WSL发行版迁移到其他盘符

📅 2026/7/29 9:36:25 👁️ 阅读次数 📝 编程学习
WSL发行版迁移到其他盘符

WSL发行版迁移到其他盘符

本文用于将 WSL 2 的 Linux 发行版(例如 Ubuntu、Debian)从 C 盘迁移到其他本地 NTFS 盘,例如D:\wsls

WSL 程序本体仍可能安装在 C 盘;可迁移的是发行版数据盘(ext4.vhdx),通常也是占用空间最大的部分。

前提

  • 目标盘应为NTFS本地磁盘。
  • 目标盘应有足够空间容纳发行版数据。
  • 关闭正在运行的终端、Docker Desktop 等可能使用 WSL 的程序。
  • 以下命令均在Windows PowerShell中执行,不是在 Ubuntu 终端中执行。

检查目标盘文件系统:

Get-Volume-DriveLetter D|Select-ObjectDriveLetter,FileSystem,SizeRemaining

输出中的FileSystem应为NTFS

1. 查看发行版名称

wsl-l-v

示例:

NAME STATE VERSION * Ubuntu Stopped 2

以下示例以Ubuntu为发行版名称、D:\wsls\Ubuntu为目标位置。其他发行版请替换相应名称和路径。

2. 推荐方式:使用 WSL 内置移动命令

较新的 WSL 版本可尝试:

wsl--shutdownNew-Item-ItemType Directory-Force D:\wsls\Ubuntu wsl--manage Ubuntu--moveD:\wsls\Ubuntu wsl-l-v

若此命令可用且成功,直接跳到“验证”章节。

3. 兼容方式:导出 VHD 后原位导入

当内置移动命令不可用,或需要精确控制 VHD 存放位置时,使用以下步骤。

wsl--shutdownNew-Item-ItemType Directory-Force D:\wsls\Ubuntu wsl--export Ubuntu D:\wsls\Ubuntu\ext4.vhdx--vhdif(!(Test-PathD:\wsls\Ubuntu\ext4.vhdx)-or(Get-ItemD:\wsls\Ubuntu\ext4.vhdx).Length-eq0){throw'导出失败:原发行版尚未删除。'}wsl--unregister Ubuntu wsl--import-in-place Ubuntu D:\wsls\Ubuntu\ext4.vhdx wsl--set-defaultUbuntu

重要安全提示

wsl --unregister Ubuntu会删除旧位置的发行版注册和数据。因此,只有在导出的D:\wsls\Ubuntu\ext4.vhdx已存在且大小大于 0 后,才能执行该命令。

4. 处理“无法附加磁盘 / 拒绝访问”

如果启动时出现:

无法将磁盘 "...\\ext4.vhdx" 附加到 WSL2: 拒绝访问。 错误代码: Wsl/Service/CreateInstance/MountDisk/HCS/E_ACCESSDENIED

通常是目标目录缺少 Hyper-V/WSL 虚拟机账户访问 VHD 的 NTFS 权限。以管理员身份打开 PowerShell,运行:

wsl--shutdown icacls"D:\wsls\Ubuntu"/grant"*S-1-5-83-0:(OI)(CI)(F)"/T icacls"D:\wsls\Ubuntu\ext4.vhdx"/grant"*S-1-5-83-0:(F)"

其中S-1-5-83-0对应NT VIRTUAL MACHINE\Virtual Machines,是 WSL 2 挂载虚拟磁盘时所需的主体。

然后启动:

wsl-d Ubuntu

5. 验证迁移结果

wsl-l-v wsl-d Ubuntu

并确认 VHD 位于目标位置:

Get-ItemD:\wsls\Ubuntu\ext4.vhdx|Select-ObjectFullName,Length,LastWriteTime

多个发行版

每个发行版使用独立目录,依次迁移,例如:

D:\wsls\Ubuntu\ext4.vhdx D:\wsls\Debian\ext4.vhdx D:\wsls\kali-linux\ext4.vhdx

不要将多个发行版导入到同一个目录或共用同一个ext4.vhdx文件。

参考

  • Microsoft Learn:WSL 常用命令
  • Microsoft Learn:WSL FAQ(迁移发行版)