【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记(附 异常处理)
🚀 将所有 WSL 发行版从 C 盘迁移到 I 盘的完整教程(含 Podman / NVIDIA Workbench / Ubuntu 等)
【无标题】使用 Chocolatey 安装 WSL 管理工具 LxRunOffline-CSDN博客
免责声明
重要提示
在执行 WSL 迁移操作前,请务必仔细阅读以下声明:
风险提示
- 操作复杂性:WSL 迁移流程涉及系统级操作(如注册表修改、磁盘文件迁移),步骤繁琐且存在潜在风险。
- 数据安全:迁移过程可能导致数据丢失或系统异常,请务必提前备份 WSL 发行版及重要数据(推荐使用
wsl --export
命令导出完整镜像)。 - 环境差异:本文记录的操作步骤基于特定系统环境(Windows 11 预览版 + WSL2),不同设备或配置可能出现未知问题。
- 功能完整性:由于迁移流程较为复杂且耗时,迁移完成后暂未对所有功能和性能进行全面测试;
责任声明
- 本文仅出自于本机真实操作记录,不对迁移过程中的数据丢失、系统故障等问题承担任何责任。
- 请根据自身技术能力审慎评估操作风险,建议在非生产环境(如测试机)先行尝试。
问题支持
若迁移中遇到技术问题,可通过以下途径寻求帮助:
- 社区交流:与技术同仁讨论操作细节;
- AI 工具辅助:通过 Gemini、ChatGPT 等智能助手获取实时解决方案(建议提供完整错误日志)。
最终建议
WSL 迁移本质是对系统底层文件的重构,请务必在操作前完整阅读文档、明确每一步目的,避免因误操作导致环境损坏。如无十足把握,可优先采用官方推荐的分步迁移方案(wsl --export/import
)降低风险。
🧭 Windows 系统中将所有 WSL 发行版从 C 盘迁移到 I 盘的完整笔记
本教程适合希望释放 C 盘空间,或将 WSL 多发行版统一迁移至其他分区(如 I 盘)的高级用户。全程使用 LxRunOffline 工具完成迁移,并逐步确认位置、执行迁移、清理旧文件。
🧩 目录
-
环境准备与目标说明
-
获取已安装的全部 WSL 发行版
-
检查当前每个发行版的安装路径
-
判断哪些发行版需要迁移
-
使用 LxRunOffline 执行迁移操作
-
清理 C 盘原始文件
-
最终验证和可选优化建议
✅ 1. 环境准备与目标说明
🎯 目标
将所有当前位于 C 盘的 WSL 发行版迁移至非系统盘 I:\WSL\<发行版名>
,避免 C 盘爆满。
🧰 工具要求
-
系统:Windows 10/11,启用 WSL2
-
工具:下载并安装
LxRunOffline
下载地址:https://github.com/DDoSolitary/LxRunOffline/releases
安装好后将其添加到系统环境变量,确保 PowerShell 可以调用。
【无标题】使用 Chocolatey 安装 WSL 管理工具 LxRunOffline-CSDN博客
📋 2. 获取所有已安装的 WSL 发行版
运行以下命令列出所有注册的 WSL 发行版:
powershell (管理员)
wsl --list --all
示例输出:
适用于 Linux 的 Windows 子系统分发:
Ubuntu-Preview (默认)
podman-machine-default
NVIDIA-Workbench
podman-0
Ubuntu
docker-desktop
📂 3. 检查每个发行版的安装路径
【无标题】使用 Chocolatey 安装 WSL 管理工具 LxRunOffline-CSDN博客
使用 LxRunOffline
获取每个发行版的安装路径:
# 用法 LxRunOffline get-dir -n <wsl名称>LxRunOffline get-dir -n podman-machine-defaultLxRunOffline get-dir -n NVIDIA-WorkbenchLxRunOffline get-dir -n UbuntuLxRunOffline get-dir -n Ubuntu-PreviewLxRunOffline get-dir -n podman-0LxRunOffline get-dir -n docker-desktop
输出示例:
安装在默认位置 C 盘的WSL实例:
# 路径输出为:
C:\ User\ ……
\\?\C:\User\ ……
查看输出路径,如果路径以 C:\
开头,说明该发行版仍位于系统盘,需要迁移。
🚚 4. 判断哪些发行版需要迁移
例如:
发行版名称 | 当前位置 | 是否迁移? |
---|---|---|
✅ Ubuntu | C:\Users\love\AppData\Local\wsl\... | ✅ 迁移到 I:\WSL\Ubuntu |
✅ Ubuntu-Preview | C:\Users\love\AppData\Local\Packages\... | ✅ 迁移到 I:\WSL\Ubuntu-Preview |
✅ podman-machine-default | C:\Users\love\.local\share\containers\... | ✅ 迁移到 I:\WSL\podman-machine-default |
✅ podman-0 | C:\Users\love\.local\share\containers\... | ✅ 迁移到 I:\WSL\podman-0 |
✅ NVIDIA-Workbench | C:\Users\love\AppData\Local\NVIDIA... | ✅ 迁移到 I:\WSL\NVIDIA-Workbench |
❌ docker-desktop | D:\Program\Docker\wsl\main | ❌ 不迁移(已不在 C 盘) |
🛠 5. 使用 LxRunOffline move
命令迁移发行版
🔒 前提:确保 WSL 已完全关闭
wsl --shutdown
Start-Sleep -Seconds 10
🧪 示例迁移命令:
LxRunOffline move -n Ubuntu -d I:\WSL\Ubuntu
说明:
-
-n
指定发行版名称 -
-d
指定目标路径(必须是空目录,LxRunOffline 会自动复制并注册) -
手动创建目标路径(空目录)
# 创建I盘WSL根目录及各发行版文件夹
New-Item -ItemType Directory -Force -Path I:\WSL
New-Item -ItemType Directory -Force -Path I:\WSL\Ubuntu-Preview
New-Item -ItemType Directory -Force -Path I:\WSL\podman-machine-default
New-Item -ItemType Directory -Force -Path I:\WSL\NVIDIA-Workbench
New-Item -ItemType Directory -Force -Path I:\WSL\podman-0
New-Item -ItemType Directory -Force -Path I:\WSL\Ubuntu
New-Item -ItemType Directory -Force -Path I:\WSL\docker-desktop
彻底关闭所有 WSL 和相关进程
powershell (管理员)
# 关闭WSL实例
wsl --shutdown# 终止所有相关进程(包括Docker、WSL后台服务)
taskkill /f /im wsl.exe /im powershell.exe /im cmd.exe /im Docker Desktop.exe
Stop-Service com.docker.service -Force # 关闭Docker服务(如有)
我们只记录迁移目前仍在 C 盘的 WSL 发行版到 I 盘,忽略已经在其他盘(如 D 盘)的发行版。
✅ 当前的发行版迁移计划如下:
发行版名称 | 当前位置 | 是否迁移? |
---|---|---|
✅ Ubuntu | C:\Users\love\AppData\Local\wsl\... | ✅ 迁移到 I:\WSL\Ubuntu |
✅ Ubuntu-Preview | C:\Users\love\AppData\Local\Packages\... | ✅ 迁移到 I:\WSL\Ubuntu-Preview |
✅ podman-machine-default | C:\Users\love\.local\share\containers\... | ✅ 迁移到 I:\WSL\podman-machine-default |
✅ podman-0 | C:\Users\love\.local\share\containers\... | ✅ 迁移到 I:\WSL\podman-0 |
✅ NVIDIA-Workbench | C:\Users\love\AppData\Local\NVIDIA... | ✅ 迁移到 I:\WSL\NVIDIA-Workbench |
❌ docker-desktop | D:\Program\Docker\wsl\main | ❌ 不迁移(已不在 C 盘) |
🛠 PowerShell 脚本:迁移在 C 盘的发行版到 I 盘
✅ 请以管理员身份运行 PowerShell,否则会报权限错误!
# 定义要迁移的发行版列表
$distrosToMigrate = @(@{ Name = "Ubuntu"; TargetPath = "I:\WSL\Ubuntu" },@{ Name = "Ubuntu-Preview"; TargetPath = "I:\WSL\Ubuntu-Preview" },@{ Name = "podman-machine-default"; TargetPath = "I:\WSL\podman-machine-default" },@{ Name = "podman-0"; TargetPath = "I:\WSL\podman-0" },@{ Name = "NVIDIA-Workbench"; TargetPath = "I:\WSL\NVIDIA-Workbench" }
)# 创建导出文件夹
$exportFolder = "I:\WSL\Export"
if (!(Test-Path $exportFolder)) {New-Item -ItemType Directory -Path $exportFolder | Out-Null
}foreach ($distro in $distrosToMigrate) {$name = $distro.Name$target = $distro.TargetPath$tarPath = Join-Path $exportFolder "$name.tar"Write-Host "`n🔄 正在迁移 $name..." -ForegroundColor Cyantry {# 停止发行版wsl --terminate $name# 导出为 .tar 文件wsl --export $name $tarPathWrite-Host "✅ 导出 $name 到 $tarPath"# 注销原始发行版wsl --unregister $nameWrite-Host "✅ 注销 $name"# 重新导入到目标路径wsl --import $name $target $tarPath --version 2Write-Host "✅ 成功导入 $name 到 $target" -ForegroundColor Green}catch {Write-Host "❌ 迁移 $name 失败:$($_.Exception.Message)" -ForegroundColor Red}# 等待 2 秒再处理下一个Start-Sleep -Seconds 2
}Write-Host "`n🎉 所有 C 盘中的 WSL 发行版已迁移至 I 盘!" -ForegroundColor Yellow
📌 补充说明:
-
脚本会将
.tar
导出文件保存在I:\WSL\Export\
,我们可以之后删除这些备份以节省空间。 -
所有导入路径格式为
I:\WSL\<发行版名>
,我们也可以自定义。 -
脚本不会处理
docker-desktop
,因为它已经在 D 盘,不需要处理。
📦 自动迁移多个发行版(推荐):
$distrosToMove = @(@{ Name = "Ubuntu-Preview"; Path = "I:\WSL\Ubuntu-Preview" },@{ Name = "podman-machine-default"; Path = "I:\WSL\podman-machine-default" },@{ Name = "NVIDIA-Workbench"; Path = "I:\WSL\NVIDIA-Workbench" },@{ Name = "podman-0"; Path = "I:\WSL\podman-0" },@{ Name = "Ubuntu"; Path = "I:\WSL\Ubuntu" }
)foreach ($distro in $distrosToMove) {Write-Host "迁移 $($distro.Name) 到 $($distro.Path)..." -ForegroundColor Cyantry {LxRunOffline move -n $distro.Name -d $distro.Path$newPath = LxRunOffline get-dir -n $distro.NameWrite-Host "$($distro.Name) 已成功迁移至: $newPath" -ForegroundColor Green} catch {Write-Host "❌ 迁移 $($distro.Name) 时出错:" -ForegroundColor Red}Start-Sleep -Seconds 2
}
迁移时间因 WSL 所占空间大小而异。
🧹 6. 清理 C 盘上遗留的旧文件(慎用、慎用、慎用)
确保一切发行版运行正常后,可手动删除以下目录:
# Ubuntu 系列
Remove-Item "C:\Users\love\AppData\Local\Packages\CanonicalGroupLimited.*" -Recurse -Force -ErrorAction SilentlyContinue# WSL LocalState 旧路径
Remove-Item "C:\Users\love\AppData\Local\wsl" -Recurse -Force -ErrorAction SilentlyContinue# NVIDIA Workbench 残留
Remove-Item "C:\Users\love\AppData\Local\NVIDIA Corporation" -Recurse -Force -ErrorAction SilentlyContinue# Podman 残留
Remove-Item "C:\Users\love\.local\share\containers\podman\machine\wsl" -Recurse -Force -ErrorAction SilentlyContinue
删除前:
删除后:
✅ 7. 验证迁移是否成功
列出现有全部的 WSL 发行版:
wsl --list --all
使用 LxRunOffline
获取每个发行版的安装路径:
# 用法 LxRunOffline get-dir -n <wsl名称>LxRunOffline get-dir -n podman-machine-defaultLxRunOffline get-dir -n NVIDIA-WorkbenchLxRunOffline get-dir -n UbuntuLxRunOffline get-dir -n Ubuntu-PreviewLxRunOffline get-dir -n podman-0LxRunOffline get-dir -n docker-desktop
输出示例:
(base) PS C:\WINDOWS\system32> LxRunOffline get-dir -n podman-machine-default
\\?\I:\WSL\podman-machine-default
(base) PS C:\WINDOWS\system32> LxRunOffline get-dir -n NVIDIA-Workbench
\\?\I:\WSL\NVIDIA-Workbench
(base) PS C:\WINDOWS\system32> LxRunOffline get-dir -n Ubuntu
\\?\I:\WSL\Ubuntu
(base) PS C:\WINDOWS\system32> LxRunOffline get-dir -n Ubuntu-Preview
\\?\I:\WSL\Ubuntu-Preview
(base) PS C:\WINDOWS\system32> LxRunOffline get-dir -n podman-0
\\?\I:\WSL\podman-0
(base) PS C:\WINDOWS\system32> LxRunOffline get-dir -n docker-desktop
\\?\D:\Program\Docker\wsl\main
我们可以运行以下命令确认发行版正常运行:
wsl -d Ubuntu
wsl -d podman-machine-default
wsl -d NVIDIA-Workbench
wsl -d Ubuntu
wsl -d Ubuntu-Preview
wsl -d podman-0
wsl -d docker-desktop
🗃 可选:删除迁移中使用的 .tar
文件夹
如果你手动备份过发行版,可在确认无误后删除中转目录:
Remove-Item "I:\WSL\Export" -Recurse -Force
🧯 8. 迁移后遇到的问题与解决方案
在使用 LxRunOffline move
迁移发行版后,虽然表面上迁移成功,但有时在运行 Podman、Docker 或某些深度学习开发环境时,可能会出现权限、配置或服务代理方面的问题。本节将详细整理这些迁移后常见问题及其对应解决办法。
🛠️ 问题一:Docker 运行时报错 failed to write file: exit status 0xffffffff
错误信息:
configuring docker in Ubuntu-Preview: docker cli config: failed to write file: exit status 0xffffffff
可能原因:
该错误通常发生在 .docker
目录权限不正确时,WSL 无法创建/写入 Docker 配置文件。
解决方案:
进入对应发行版,修复 .docker
目录权限:
# 在 WSL 中运行(例如 Ubuntu-Preview)
sudo chown -R $(whoami):$(whoami) ~/.docker
chmod -R u+rwX ~/.docker# 检查结果
ls -ld ~/.docker
🛠️ 问题二:Podman 报错 running proxy: exit status 0xffffffff
错误信息:
running wsl distro proxy in NVIDIA-Workbench distro: running proxy: exit status 0xffffffff
可能原因:
-
Podman 的代理机制依赖于特定路径结构
-
迁移后部分绑定路径失效或服务未正确初始化
解决方案:
-
1、手动清除
~/.local/share/containers/podman/machine/
中旧缓存 -
2、重新初始化 Podman 虚拟机:
podman machine stop
podman machine rm
podman machine init
podman machine start
-
3、重新运行:
podman info
🛠️ 问题三:路径仍指向旧目录(例如 AppData)
如果迁移完成后运行 LxRunOffline get-dir
仍指向 C:\Users\xxx\AppData\...
,说明:
-
迁移未覆盖注册表路径
-
或为特殊发行版(如 Microsoft Store 安装的 WSL)不能直接用 LxRunOffline 管理
解决方案:
这种情况可以考虑重新导出 → 注销 → 导入 → 重新注册路径,可联系我提供专用脚本模板。
🛠️ 问题四:Podman / NVIDIA Workbench / Docker Desktop 依赖路径报错或无法启动
症状包括:
-
NVIDIA AI Workbench 报错无法连接代理或 workspace
-
Docker Desktop 中
wsl
后端报错 -
podman-remote
命令无法连接
通用解决办法:
-
进入 Windows 的
任务管理器
→ 手动结束podman.exe
、dockerd.exe
、wsl.exe
等相关进程 -
重新初始化配置或运行
podman system reset
🧪 验证发行版功能正常运行
迁移后,强烈建议逐一进入发行版测试:
wsl -d Ubuntu
wsl -d podman-machine-default
wsl -d NVIDIA-Workbench
在每个发行版中确认如下内容是否正常:
-
文件读写(创建测试文件)
-
权限设置(
sudo
是否生效) -
网络访问(能否
ping
、安装软件) -
Docker/Podman 运行是否成功
🎁 附录:迁移后可以安全删除的目录
如无异常,以下旧目录可清除:
# 旧 WSL 安装目录
Remove-Item "C:\Users\love\AppData\Local\Packages\CanonicalGroupLimited.*" -Recurse -Force# WSL LocalState
Remove-Item "C:\Users\love\AppData\Local\wsl" -Recurse -Force# Podman WSL 存储路径
Remove-Item "C:\Users\love\.local\share\containers\podman\machine\wsl" -Recurse -Force# NVIDIA Workbench WSL 存储路径
Remove-Item "C:\Users\love\AppData\Local\NVIDIA Corporation" -Recurse -Force
确保在运行 wsl --list --all
和 LxRunOffline get-dir -n <发行版名>
确认路径后再删除。
🔚 总结
通过本文的方法,可以将多个 WSL 发行版从系统盘顺利迁移到其他磁盘,释放空间、统一管理,适用于包括 Podman Desktop、NVIDIA AI Workbench、多个 Ubuntu 的环境。
同时,这也是一个需要谨慎使用的方法,迁移后最好逐一进行完整的功能和性能测试。