WSL 迁移指南:将 Linux 发行版从 C 盘安全转移到其他磁盘

问题背景

使用 wsl --install 命令快速安装 Ubuntu 等发行版时,系统会默认将所有文件存放在 C 盘用户目录下:

C:\Users\<用户名>\AppData\Local\Packages\

随着项目代码、开发工具和 Docker 镜像的不断累积,WSL 占用的空间会迅速膨胀,很容易导致系统盘容量告急。本文将介绍如何将 WSL 发行版安全、彻底地迁移到其他磁盘(例如 D:\WSL)。

一、查看当前 WSL 安装位置

在进行迁移之前,可以先确认当前发行版的物理存储位置。

方法 1:通过文件资源管理器

  1. 打开文件资源管理器。
  2. 在地址栏输入以下路径并回车:
    %LOCALAPPDATA%\Packages
  3. 找到以 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 发行版就已经成功迁移到指定磁盘,并具备良好的网络环境和下载速度,可以继续顺畅地进行开发。

THE END