WSL 从系统盘迁移 Ubuntu-22.04 至其他磁盘(如 D:\)

前提条件:

  • 已安装 WSL2;
  • 操作全程需使用 管理员权限的 PowerShell 或 CMD

一、确认当前 WSL 状态

1. 查看已安装的发行版列表与运行状态

wsl -l -v

正常输出示例:

  NAME           STATE      VERSION
* Ubuntu-22.04   Running    2

记录以下关键信息:

  • 发行版全名Ubuntu-22.04(注意连字符与版本号)
  • 当前状态:应为 RunningStopped

2. 安全终止目标发行版

为防止文件写入冲突,必须完全终止实例:

wsl --shutdown Ubuntu-22.04

二、导出与迁移

1. 创建目标目录(推荐结构清晰)

在目标磁盘(如 D:\)创建专用目录,例如:

mkdir D:\WSL\Ubuntu-22.04

建议路径命名规范:D:\WSL\<发行版名称>,便于后续管理。


2. 导出当前 WSL 实例为 tar 包

wsl --export Ubuntu-22.04 D:\WSL\Ubuntu-22.04\backup.tar

成功标志:目标路径下出现 backup.tar


3. 注销(卸载)原发行版

重要:此操作仅删除 WSL 注册项与虚拟硬盘注册不会删除刚导出的 backup.tar

wsl --unregister Ubuntu-22.04

成功提示:

The distribution 'Ubuntu-22.04' has been unregistered.

再次运行 wsl -l -v,确认该发行版已消失


4. 从备份导入到新位置

wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\WSL\Ubuntu-22.04\backup.tar --version 2

成功后:

  • 目录 D:\WSL\Ubuntu-22.04 下将生成 ext4.vhdx 文件(动态扩展虚拟磁盘);
  • 运行 wsl -l -v 应显示新实例已注册,状态为 Stopped

三、恢复用户环境

--import 操作不会保留原默认用户设置,首次启动将默认以 root 身份进入,导致:

  • 无法使用 sudo(因普通用户不存在或未授权);
  • 家目录 /home/<user> 不可见(因当前在 /root);
  • VS Code Remote-WSL、SSH 等依赖用户配置的功能失效。

正确解决方案:设置默认用户

Ubuntu 系发行版自带配置工具,注意命令名需转换格式

原 WSL 名称 配置命令前缀
Ubuntu-22.04 ubuntu2204
Ubuntu-20.04 ubuntu2004
Debian debian

执行(以管理员身份运行 CMD/PowerShell):

ubuntu2204 config --default-user [your_username]

成功无输出即为正常;失败则提示 'ubuntu2204' is not recognized...(见下文排错)。

然后重启实例:

wsl --terminate Ubuntu-22.04

验证用户恢复成功

wsl -d Ubuntu-22.04 whoami

应输出:

[your_username]