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 Ubuntu5. 验证迁移结果
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(迁移发行版)