在使用wsl2的过程中,由于开发的相关项目越来越多,而wsl默认安装在C盘下,导致空间占用太大,思考能否将wsl子系统迁移到其它盘符下.经过一番尝试,完成了迁移,在此总结一下,供有需要的开发者参考.

一、迁移前的准备工作

  1. 停止 WSL2 运行

    • 在 Windows PowerShell 或 CMD 中执行以下命令,确保 WSL 实例已关闭:
      1
      wsl --shutdown
    • 验证状态(显示为 Stopped):
      1
      wsl -l -v
    • 此处可以记录下自己的 wsl -l -v 输出的 发行版名称name ,以便后续导出使用。
  2. 创建目标目录

    • 在 D 盘新建一个文件夹用于存放迁移后的 WSL 文件(如 D:\WSL_Ubuntu)。

二、导出 WSL2 系统镜像

  1. 导出现有系统为压缩包
    • 替换 <发行版名称> 为你的 WSL 名称(如 Ubuntu-22.04):
      1
      wsl --export <发行版名称> D:\WSL_Ubuntu\ubuntu.tar
    • 此过程需等待较长时间,文件大小取决于原系统数据量 。

三、注销原有 WSL 实例

  1. 卸载原系统
    1
    wsl --unregister <发行版名称>
    • 执行后再次检查是否注销成功:
      1
      wsl -l -v

四、将镜像导入到 D 盘

  1. 重新导入系统至目标目录
    1
    wsl --import <新发行版名称> D:\WSL_Ubuntu\ D:\WSL_Ubuntu\ubuntu.tar --version 2
    • 参数说明
      • <新发行版名称>:可保留原名(如 Ubuntu-22.04)或自定义。
      • --version 2:强制使用 WSL2 内核,避免兼容性问题。

五、恢复默认用户

  1. 解决 root 用户问题

    • 导入后首次启动会以 root 身份登录,需通过以下命令恢复原用户:
      1
      <发行版短名>.exe config --default-user <原用户名>
    • 发行版短名规则
      • Ubuntu-22.04 → ubuntu2204.exe
      • Ubuntu-20.04 → ubuntu2004.exe
      • 其他发行版需根据名称调整(如 Debiandebian.exe)。
  2. 备用方案(修改配置文件)

    • 若命令无效,手动编辑 WSL 配置文件:
      1
      \\wsl.localhost\<发行版名称>\etc\wsl.conf
    • 添加以下内容(替换 <原用户名>):
      1
      2
      [user]
      default = <原用户名>
    • 重启 WSL 生效:
      1
      wsl --shutdown && wsl

六、验证迁移结果

  1. 检查文件与用户

    • 启动 WSL,确认:
      • 用户名为原账户(非 root)。
      • 原用户文件(如 /home/<用户名>)完整存在。
  2. 查看系统路径

    • 在 Windows 资源管理器中访问 D:\WSL_Ubuntu,确认生成 ext4.vhdx 虚拟磁盘文件。

七、释放 C 盘空间

  • 确保系统迁移完成后,可以选择删除原 C 盘的 WSL 文件(位于 %LOCALAPPDATA%\Packages)需手动删除 。

通过以上步骤,将 WSL2 完整迁移至 D 盘,完美解决 C 盘空间占用过大的问题。