WSL 从系统盘迁移 Ubuntu-22.04 至其他磁盘(如 D:\)
前提条件:
- 已安装 WSL2;
- 操作全程需使用 管理员权限的 PowerShell 或 CMD。
一、确认当前 WSL 状态
1. 查看已安装的发行版列表与运行状态
wsl -l -v
正常输出示例:
NAME STATE VERSION
* Ubuntu-22.04 Running 2
记录以下关键信息:
- 发行版全名:
Ubuntu-22.04(注意连字符与版本号) - 当前状态:应为
Running或Stopped
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]