WSL 安装到其他盘 / 迁移到其他盘:完整避坑指南
很多人装完 WSL2 才发现,C盘空间被吃得干干净净。ubuntu2404.tar 动不动就 10GB+,加上后期的开发环境、Docker 镜像,C盘分再多都不够用。
这篇文章讲两件事:
- 从零开始在 D/E 盘安装 WSL(不占用 C 盘)
- 把已有的 WSL 迁移到其他盘(完整搬家,包含所有数据)
前置要求
确保系统满足以下条件:
- Windows 10 2004 以上,或 Windows 11
- 已在「Windows 功能」中开启「适用于 Linux 的 Windows 子系统」和「虚拟机平台」
- BIOS/UEFI 中已开启 CPU 虚拟化(Intel VT-x / AMD-V)
# 以管理员身份运行 PowerShell,检查是否已开启
dism.exe /online /get-features | findstr "Linux"
如果显示 Microsoft-Windows-Subsystem-Linux 和 VirtualMachinePlatform 为 Enabled,说明环境就绪。
方法一:从零开始在非系统盘安装 WSL
第一步:下载 Linux 发行版
不要用 wsl --install(默认装到 C 盘),手动下载 tar.gz 镜像:
- 打开 WSL手动安装教程
- 下载你喜欢的发行版,例如 Ubuntu 24.04 LTS:
- 地址:
https://cloud-images.ubuntu.com/wsl/ - 找
jammy(Ubuntu 22.04)或noble(Ubuntu 24.04)目录 - 下载
.tar.gz文件(约 300-700MB)
第二步:安装到指定目录
假设下载的镜像是 ubuntu-24.04-server-cloudimg-amd64-wsl.rootfs.tar.gz,放到 D:\WSL\Images\ 目录下:
# 创建 WSL 根目录
New-Item -ItemType Directory -Path D:\WSL\Instances -Force
New-Item -ItemType Directory -Path D:\WSL\Images -Force
# 导入发行版到指定路径
wsl --import Ubuntu-24.04 D:\WSL\Instances\Ubuntu-24.04 D:\WSL\Images\ubuntu-24.04-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2
关键参数说明:
| 参数 | 含义 |
|---|---|
Ubuntu-24.04 |
发行版名称(可自定义) |
D:\WSL\Instances\Ubuntu-24.04 |
发行版的安装目录(这里放所有数据) |
D:\WSL\Images\ubuntu-24.04.tar.gz |
原始镜像文件路径 |
--version 2 |
强制使用 WSL2 |
导入完成后,WSL 的所有数据都会存储在 D:\WSL\Instances\Ubuntu-24.04\ 下,包括那个会不断膨胀的 ext4.vhdx 虚拟磁盘。
第三步:设置默认用户
导入的发行版默认以 root 登录。如果需要用普通用户:
# 先进入 WSL 设置用户
wsl -d Ubuntu-24.04 -e bash -c "echo 'yourname:yourpassword' | chpasswd && usermod -m -d /home/yourname yourname"
# 或者简单一点,直接用 root,后续创建用户
wsl -d Ubuntu-24.04
推荐创建一个普通用户并设为默认:
# 在 WSL 终端内执行
useradd -m -s /bin/bash yourname
echo "yourname:yourpassword" | chpasswd
echo "yourname ALL=(ALL) ALL" >> /etc/sudoers
# 退出后,在 Windows PowerShell 设置默认用户
ubuntu2404 config --default-user yourname
⚠️ 注意:
ubuntu2404要替换成你导入时用的发行版名称。如果名称含空格,用引号包起来。
第四步:验证安装位置
# 查看所有发行版及安装路径
wsl --list -v
# 进入 WSL 测试
wsl -d Ubuntu-24.04
# 在 WSL 内查看磁盘挂载情况
df -h
确认 ext4.vhdx 在 D 盘:
# Windows 下查看 VHDX 文件位置
Get-ChildItem D:\WSL\Instances\Ubuntu-24.04\ -Recurse -Filter "*.vhdx"
第五步:设置默认发行版
# 把新安装的 WSL 设为默认
wsl --set-default Ubuntu-24.04
# 以后直接输 wsl 就能进入这个版本
wsl
方法二:把已有的 WSL 迁移到其他盘
假设你的 WSL 目前在 C 盘,现在想搬到 D/E 盘。整个过程是:导出 → 删除原版 → 导入到新位置。
⚠️ 迁移过程中原 WSL 会暂时不可用,建议先关闭所有 WSL 终端和相关程序。
第一步:查看当前 WSL 状态
# 列出所有发行版
wsl --list -v
# 确认要迁移的发行版名称和当前挂载点
# 假设要迁移的是 "Ubuntu-22.04"
第二步:导出(备份为 tar 文件)
# 创建一个足够大的目录存放备份
New-Item -ItemType Directory -Path D:\WSL\Backup -Force
# 导出发行版(这步比较慢,10-30分钟不等)
wsl --export Ubuntu-22.04 D:\WSL\Backup\Ubuntu-22.04-backup.tar
💡 备份文件会占用和原 VHDX 同等大小的空间,确保目标磁盘有足够空间。
第三步:注销原发行版
# 重要:先确认备份已经完成!
wsl --unregister Ubuntu-22.04
执行后,C 盘上的所有数据会被删除。如果备份文件损坏,这一步是不可逆的。
第四步:导入到新目录
# 导入到 D 盘的新位置
wsl --import Ubuntu-22.04 D:\WSL\Instances\Ubuntu-22.04 D:\WSL\Backup\Ubuntu-22.04-backup.tar --version 2
第五步:重新设置默认用户
和全新安装一样,导入后默认是 root,需要重新设置默认用户:
# 先启动一次确认 root 可用
wsl -d Ubuntu-22.04
# 在 WSL 内创建用户后,PowerShell 设置默认
ubuntu2004 config --default-user yourname
第六步:验证
# 确认 VHDX 在新位置
Get-ChildItem D:\WSL\Instances\Ubuntu-22.04\ -Recurse -Filter "*.vhdx" | Select-Object FullName, Length
# 进入 WSL 测试
wsl -d Ubuntu-22.04
进阶技巧
技巧 1:给 VHDX 磁盘扩容
WSL 的虚拟磁盘默认最大 1TB,但实际初始大小只有几十 GB,会随着使用自动扩展。如果想手动扩容:
# 关闭 WSL
wsl --shutdown
# 使用 diskpart 扩展 VHDX(假设路径是 D:\WSL\Instances\Ubuntu-22.04\ext4.vhdx)
diskpart
select vdisk file="D:\WSL\Instances\Ubuntu-22.04\ext4.vhdx"
attach vdisk
expand vdisk maximum=512000 # 扩展到 512GB(单位是 MB)
detach vdisk
exit
进入 WSL 后还需要扩展文件系统:
sudo resize2fs /dev/sda <size>G
# 或者不指定大小,用满整个空间
sudo resize2fs /dev/sda
技巧 2:多个发行版共享镜像目录
如果你需要安装多个 Ubuntu 版本,可以共用一个镜像目录,每次 wsl --import 时指定不同的实例目录:
# 安装 Ubuntu 22.04
wsl --import Ubuntu-22.04 D:\WSL\Instances\Ubuntu-22.04 D:\WSL\Images\ubuntu-22.04.tar.gz --version 2
# 安装 Ubuntu 24.04(镜像同一个)
wsl --import Ubuntu-24.04 D:\WSL\Instances\Ubuntu-24.04 D:\WSL\Images\ubuntu-24.04.tar.gz --version 2
两个实例完全独立,互不影响。
技巧 3:Windows 资源管理器直接访问 WSL 文件
在文件资源管理器地址栏输入:
\\wsl$\Ubuntu-22.04\home\yourname
就可以像访问普通文件夹一样访问 WSL 内部文件。也可以右键「映射网络驱动器」把它挂载成盘符。
技巧 4:.wslconfig 全局配置
在 C:\Users\你的用户名\.wslconfig(注意前面有个点)可以设置 WSL 全局参数:
[wsl2]
# 限制 WSL2 使用的内存和 CPU
memory=8GB
processors=4
# 设置交换空间大小
swap=4GB
# 禁用 IPv6(如果不需要)
# ipv6=false
# 限制最大虚拟磁盘大小
# vhd极限size=512GB
修改后需要重启 WSL:
wsl --shutdown
wsl
常见问题
Q:导出时提示「拒绝访问」?
确保所有 WSL 终端已关闭,且没有程序正在访问 WSL 文件。用 wsl --shutdown 完全关闭。
Q:导入后找不到 .ssh 或 .gitconfig 等配置?
迁移是完整复制,/home/yourname/ 下的所有文件都会保留。检查一下是不是 WSL 的默认用户变了导致 home 目录路径不一致。
Q:想同时保留原版和迁移版可以吗?
可以。导出后不要 --unregister,直接 --import 成一个新名字:
wsl --import Ubuntu-22.04-New D:\WSL\Instances\Ubuntu-22.04-New D:\WSL\Backup\Ubuntu-22.04-backup.tar --version 2
Q:wsl –import 报错「已存在」?
说明同名发行版已经存在。换个名字或者先 wsl --unregister 原名 再来。
Q:迁移后 Docker Desktop 里看不到 WSL?
Docker Desktop 2.4+ 自带了 WSL 集成。如果看不到:
# 查看 Docker Desktop 的 WSL 集成
wsl --list -v
# 在 Docker Desktop 设置 → Resources → WSL Integration 里勾选对应发行版
总结
| 场景 | 操作 |
|---|---|
| 从零安装到 D 盘 | 下载 tar.gz → wsl --import 指定路径 |
| 迁移已有 WSL | wsl --export 备份 → wsl --unregister 注销 → wsl --import 到新路径 |
| 扩容 VHDX | diskpart 扩展虚拟磁盘 + WSL 内 resize2fs |
| 多个发行版 | 共用镜像目录,分别导入不同实例目录 |
核心就一条命令:wsl --import。把镜像下载到非系统盘,用这条命令指定安装路径,C 盘就不会再被 WSL 吃掉了。
评论区
评论已关闭