将 WSL 发行版移动到其他驱动器
Source: Dev.to – Moving WSL 2 Distributions to Another Drive
Source: …
我的发行版存放在哪里?
在移动任何内容之前,先确定你的发行版当前所在的位置。WSL 将每个发行版的虚拟硬盘(VHDX)存储在 Windows 注册表中注册的基路径下:
HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}\BasePath常见默认位置
| WSL 版本 | 默认路径 |
|---|---|
| 较新的 WSL | %LOCALAPPDATA%\wsl\{GUID}\ |
| 通过 Microsoft Store 安装的发行版 | %LOCALAPPDATA%\Packages\<PackageName>\LocalState\ |
你可以在 PowerShell 中检查每个 VHDX 的大小:
Get-ChildItem -Path "$env:LOCALAPPDATA\wsl" -Recurse -Filter "ext4.vhdx" |
Select-Object FullName,
@{N='SizeGB';E={[math]::Round($_.Length/1GB, 2)}}或者列出所有发行版及其 WSL 版本:
wsl --list --verbose方法 1 – wsl --manage --move(推荐)
最简的移动发行版方式是使用内置的 move 命令。它一次性迁移 VHDX 文件并更新注册表。
步骤 1 – 停止发行版
wsl --terminate Ubuntu验证它已停止:
wsl --list --verbose你应该在发行版名称旁看到 Stopped。
步骤 2 – 移动它
wsl --manage Ubuntu --move "D:\WSL\Ubuntu"如果需要,WSL 会创建目标文件夹并移动 VHDX 文件。大型 VHDX 文件(例如 50 GB)可能会根据磁盘速度耗费数分钟。
步骤 3 – 验证
wsl -d Ubuntu
whoami
ls ~如果这些命令正常运行,你的发行版现在位于 D:,且 WSL 已知其位置。所有文件、软件包和配置均已保留。
方法 2 – 导出与导入
当 --manage --move 不可用,或需要重命名发行版时使用。此方法适用于所有 WSL 2 安装。
步骤 1 – 导出发行版
您有三种格式可选:
| 格式 | 描述 | 命令 |
|---|---|---|
| TAR(默认,通用) | 简单归档,随处可用 | powershell<br>wsl --export Ubuntu D:\Backups\ubuntu-backup.tar<br> |
| VHD(更快,保留磁盘结构) | 直接复制 VHDX;对大型发行版速度更快 | powershell<br>wsl --export Ubuntu D:\Backups\ubuntu-backup.vhdx --format vhd<br> |
| Compressed TAR(文件更小) | 与 TAR 相同,但使用 gzip 压缩 | powershell<br>wsl --export Ubuntu D:\Backups\ubuntu-backup.tar.gz --format tar.gz<br> |
步骤 2 – 注销旧发行版
wsl --unregister Ubuntu警告: 此操作会将发行版从 WSL 注册表中移除并删除原始 VHDX。请确保导出已成功完成(检查文件大小),再执行此命令。
步骤 3 – 导入到新位置
从 TAR 导出文件导入
wsl --import Ubuntu "D:\WSL\Ubuntu" D:\Backups\ubuntu-backup.tar从 VHD 导出文件导入
wsl --import Ubuntu "D:\WSL\Ubuntu" D:\Backups\ubuntu-backup.vhdx --vhd通用语法为:
wsl --import <DistroName> <InstallLocation> <FileName> [--vhd] [--version <1|2>]步骤 4 – 设置默认用户(仅在 TAR 导入时需要)
从 TAR 归档导入时,WSL 默认使用 root。在新发行版内部创建或编辑 /etc/wsl.conf,指定您的常用用户。
# 以 root 身份打开导入的发行版的 shell
wsl -d Ubuntu -u root
# 追加配置(将 `your-username` 替换为实际用户名)
cat <<EOF >> /etc/wsl.conf
[user]
default=your-username
EOF更改完成后,退出 shell 并重新启动发行版;此时将以指定用户登录。
注意: 此方法绕过了
--export/--import所执行的安全检查。请确保 VHDX 未损坏,且目标文件夹仅包含 VHDX(没有其他文件)。按照 方法 1,步骤 3 中的说明验证导入的发行版是否正常工作。
快速参考速查表
| 任务 | 命令 |
|---|---|
| 列出已安装的发行版(含版本) | wsl --list --verbose |
| 停止运行中的发行版 | wsl --terminate <distro> |
| 移动发行版(WSL ≥ 0.58) | wsl --manage --move <distro> <new‑path> |
| 导出发行版为 .tar 存档 | wsl --export <distro> <path>\<distro>.tar |
| 导出发行版为 .vhdx 文件 | wsl --export <distro> <path>\<distro>.vhdx --format vhd |
| 注销(删除)发行版 | wsl --unregister <distro> |
| 将 .tar 存档导入为新发行版 | wsl --import <new‑distro> <install‑path> <path>\<distro>.tar |
| 将 .vhdx 文件导入为新发行版 | wsl --import <new‑distro> <install‑path> <path>\<distro>.vhdx --vhd |
| 为发行版设置默认用户 | 编辑发行版的 /etc/wsl.conf 并添加:ini<br>[user]<br>default=<username><br> |
| 删除备份文件(PowerShell) | Remove-Item <path>\<file> |
将 VHDX 文件移动到新位置
您可以直接注册已移动的 VHDX,而无需再次复制:
wsl --import-in-place Ubuntu "D:\WSL\Ubuntu\ext4.vhdx"- 这会告诉 WSL 使用当前所在位置的 VHDX。
- 文件 必须是 ext4 格式(所有 WSL 2 VHDX 文件都是如此)。
- 如果您已经自行移动了文件,这是最快的方案。
选择合适的方法
| 因素 | --manage --move | Export/Import (TAR) | Export/Import (VHD) |
|---|---|---|---|
| 速度 | 快(直接移动) | 慢(tar + 解压) | 中等(文件复制) |
| 所需磁盘空间 | 仅目标磁盘 | 2 倍(导出 + 导入) | 2 倍(导出 + 导入) |
| 保留用户设置 | 是 | 否(需手动修复) | 是 |
| 重命名发行版 | 否 | 是 | 是 |
| 所需 WSL 版本 | 最新 WSL | 任意 WSL 2 | 任意 WSL 2 |
| 复杂度 | 低 | 中等 | 中等 |
建议: 对大多数用户而言,
--manage --move是正确的选择。当需要重命名发行版或使用较旧的 WSL 版本时,请使用导出/导入。
在不同驱动器上安装新发行版
您可以通过提前指定安装位置来避免以后移动发行版:
wsl --install Ubuntu --location "D:\WSL\Ubuntu"VHDX 文件将从一开始就创建在 D:。
简单方法:WSL UI
WSL UI 提供了一种点选方式来移动发行版。
移动发行版对话框
- 显示当前位置和磁盘大小。
- 允许浏览到新位置。
- 自动处理停止发行版、移动文件以及更新注册表。
- 对于大规模移动会显示进度。
无需命令行,也不需要手动编辑注册表。它在内部使用 WSL 的原生 move 命令,保留文件、设置、默认用户和配置。
故障排除
| 症状 | 原因 / 解决办法 |
|---|---|
“不支持此操作” 在使用 --manage --move 时 | 您可能使用的是较旧的 WSL 版本。运行 wsl --update,或改用导出/导入。 |
| 导入默认使用 root 用户 | 在使用 TAR 导入时这是预期行为。编辑 /etc/wsl.conf(参见上文“设置默认用户”)。 |
| “访问被拒绝” 在移动过程中 | 确保没有 WSL 进程正在使用该发行版。运行 wsl --shutdown 后重试。 |
| 导入后未显示发行版 | 确认导入路径存在且您拥有写入权限。以 管理员 身份运行 PowerShell。 |
| 导出时空间不足 | 直接导出到目标磁盘(例如,从 C: 移动到 D: 时导出到 D:\Backups\)。 |
Summary
| 任务 | 命令 |
|---|---|
| 列出发行版 | wsl --list --verbose |
| 停止发行版 | wsl --terminate <distro> |
| 移动(简单) | wsl --manage --move <distro> <new‑path> |
| 导出(TAR) | wsl --export <distro> backup.tar |
| 导出(VHD) | wsl --export <distro> backup.vhdx --format vhd |
| 注销 | wsl --unregister <distro> |
| 导入(TAR) | wsl --import <distro> "D:\path" backup.tar |
| 导入(VHD) | wsl --import <distro> "D:\path" backup.vhdx --vhd |
| 原位导入 | wsl --import-in-place "D:\path\ext4.vhdx" |
| 安装到 D: | wsl --install Ubuntu --location "D:\WSL\Ubuntu" |
| 修复默认用户 | Edit /etc/wsl.conf → add a [user] section with default=username |
移动发行版是一次性(或偶尔)任务,但它可以释放拥挤的 C: 盘上的大量空间。