WSL 迁移指南:将 Linux 发行版从 C 盘安全转移到其他磁盘
问题背景
使用 wsl --install 命令快速安装 Ubuntu 等发行版时,系统会默认将所有文件存放在 C 盘用户目录下:
C:\Users\<用户名>\AppData\Local\Packages\
随着项目代码、开发工具和 Docker 镜像的不断累积,WSL 占用的空间会迅速膨胀,很容易导致系统盘容量告急。本文将介绍如何将 WSL 发行版安全、彻底地迁移到其他磁盘(例如 D:\WSL)。
一、查看当前 WSL 安装位置
在进行迁移之前,可以先确认当前发行版的物理存储位置。
方法 1:通过文件资源管理器
- 打开文件资源管理器。
- 在地址栏输入以下路径并回车:
%LOCALAPPDATA%\Packages - 找到以
CanonicalGroupLimited.开头的文件夹,例如:CanonicalGroupLimited.Ubuntu22.04onWindows_...该文件夹内就存放着对应发行版的虚拟磁盘文件。
方法 2:通过命令行
在 PowerShell 或 CMD 中执行:
wsl -l -v
该命令会列出所有已安装的发行版及其状态,虽然不会直接显示物理路径,但结合方法 1 可以快速定位。
另外,WSL 内的文件可以通过 \\wsl$\<发行版名> 路径直接访问,例如 \\wsl$\Ubuntu-22.04。
二、迁移 WSL 到指定路径(四步法)
在开始前,请确保目标磁盘有足够的剩余空间,建议至少为当前占用空间的 2 倍。
步骤 1:导出 WSL 发行版为 tar 文件
首先,查看需要迁移的发行版名称:
wsl -l -v
然后执行导出命令(以 Ubuntu-22.04 为例):
wsl --export Ubuntu-22.04 D:\WSL\Ubuntu.tar
- 第一个参数必须是
wsl -l -v中显示的精确名称。 - 第二个参数是导出的
.tar文件路径,请提前创建目标文件夹D:\WSL。
步骤 2:注销当前发行版
确认导出成功后,注销原来的发行版:
wsl --unregister Ubuntu-22.04
这个操作会删除原 C 盘中的所有 WSL 数据,因此务必保证上一步的导出已完成且文件可用。
步骤 3:导入到新位置
将刚才导出的 tar 文件导入到新的磁盘路径:
wsl --import Ubuntu-22.04 D:\WSL\Ubuntu D:\WSL\Ubuntu.tar
参数说明:
- 第一个参数:发行版名称(可以和原来相同)。
- 第二个参数:新的安装目录,用于存放虚拟磁盘文件。
- 第三个参数:第一步中导出的
.tar文件路径。
导入完成后,在 D:\WSL\Ubuntu 目录下会出现 ext4.vhdx 等虚拟磁盘文件。
步骤 4:设置默认登录用户
WSL 导入后默认会以 root 用户启动。如果需要恢复原来的普通用户登录,需要额外配置。
情况 A:通过 Microsoft Store 安装的官方发行版
这类发行版通常带有独立的 exe 启动器,例如 ubuntu2204.exe。以管理员身份打开 CMD,执行:
ubuntu2204.exe config --default-user your_username
将 your_username 替换为你在 Linux 中的实际用户名。
情况 B:自定义导入或无法使用 exe 启动器的发行版
可以在 WSL 内创建配置文件来指定默认用户:
sudo nano /etc/wsl.conf
添加以下内容:
[user]
default = your_username
保存后,在 PowerShell 中重启 WSL:
wsl --shutdown
再次启动 WSL 时,便会自动以指定的普通用户登录。
三、验证迁移结果
启动迁移后的 WSL:
wsl -d Ubuntu-22.04
依次检查以下几点:
- 确认登录用户是否正确。
- 打开 Windows 资源管理器,进入
D:\WSL\Ubuntu,验证ext4.vhdx文件存在且占用空间正常。 - 在 WSL 内执行
df -h,查看磁盘挂载及容量信息。
四、补充建议
- 路径命名规范:建议使用无空格、无中文的路径,例如
D:\WSL\Ubuntu2204,以避免某些兼容性问题。 - 定期备份:可以利用
wsl --export命令定期备份发行版,操作简单且能完整保留系统环境。 - Docker 用户注意:迁移 WSL 后,需要在 Docker Desktop 的设置中重新指定 WSL 后端所使用的发行版路径,否则容器可能无法正常启动。
五、修复 WSL2 的 DNS 解析问题(可选)
在某些网络环境下(如 VPN、企业网络),WSL2 的 DNS 可能会失效,表现为无法解析域名。下面是永久性修复方法。
1. 创建 WSL 配置文件
在 WSL 中执行:
sudo nano /etc/wsl.conf
加入以下内容:
[network]
generateResolvConf = false
保存并退出。这会阻止 WSL 每次启动时自动生成 /etc/resolv.conf。
2. 创建静态 resolv.conf
编辑 /etc/resolv.conf:
sudo nano /etc/resolv.conf
写入公共 DNS 服务器地址(也可以替换为内网 DNS):
nameserver 8.8.8.8
nameserver 8.8.4.4
3. 重启 WSL2
在 Windows PowerShell 中执行:
wsl --shutdown
然后重新打开 Ubuntu 终端。
4. 验证修复
cat /etc/resolv.conf # 应显示你设置的 DNS
ping -c 4 baidu.com # 应该能成功 ping 通
nslookup baidu.com # 检查 DNS 解析是否正常
如果需要使用公司或校园网内部 DNS,可以在 Windows 中通过以下命令查看:
ipconfig /all | findstr "DNS Servers"
然后将这些 DNS 地址填入 WSL 内的 /etc/resolv.conf。
六、更换 Ubuntu 22.04 软件源
迁移完成后,为了获得更快的下载速度,可以将软件源更换为国内镜像。
编辑 /etc/apt/sources.list:
sudo vim /etc/apt/sources.list
阿里云源(jammy 版本)
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
保存后执行更新:
sudo apt update
完成以上步骤后,WSL 发行版就已经成功迁移到指定磁盘,并具备良好的网络环境和下载速度,可以继续顺畅地进行开发。