当前位置: 首页 > backend >正文

【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记(附 异常处理)

🚀 将所有 WSL 发行版从 C 盘迁移到 I 盘的完整教程(含 Podman / NVIDIA Workbench / Ubuntu 等) 

 【无标题】使用 Chocolatey 安装 WSL 管理工具 LxRunOffline-CSDN博客

 

免责声明

重要提示

在执行 WSL 迁移操作前,请务必仔细阅读以下声明:

风险提示
  1. 操作复杂性:WSL 迁移流程涉及系统级操作(如注册表修改、磁盘文件迁移),步骤繁琐且存在潜在风险。
  2. 数据安全:迁移过程可能导致数据丢失或系统异常,请务必提前备份 WSL 发行版及重要数据(推荐使用wsl --export命令导出完整镜像)。
  3. 环境差异:本文记录的操作步骤基于特定系统环境(Windows 11 预览版 + WSL2),不同设备或配置可能出现未知问题。
  4. 功能完整性:由于迁移流程较为复杂且耗时,迁移完成后暂未对所有功能和性能进行全面测试;
责任声明
  • 本文仅出自于本机真实操作记录,不对迁移过程中的数据丢失、系统故障等问题承担任何责任
  • 请根据自身技术能力审慎评估操作风险,建议在非生产环境(如测试机)先行尝试。
问题支持

若迁移中遇到技术问题,可通过以下途径寻求帮助:

  1. 社区交流:与技术同仁讨论操作细节;
  2. AI 工具辅助:通过 Gemini、ChatGPT 等智能助手获取实时解决方案(建议提供完整错误日志)。
最终建议

WSL 迁移本质是对系统底层文件的重构,请务必在操作前完整阅读文档、明确每一步目的,避免因误操作导致环境损坏。如无十足把握,可优先采用官方推荐的分步迁移方案(wsl --export/import)降低风险。


 

🧭 Windows 系统中将所有 WSL 发行版从 C 盘迁移到 I 盘的完整笔记

本教程适合希望释放 C 盘空间,或将 WSL 多发行版统一迁移至其他分区(如 I 盘)的高级用户。全程使用 LxRunOffline 工具完成迁移,并逐步确认位置、执行迁移、清理旧文件。


🧩 目录

  1. 环境准备与目标说明

  2. 获取已安装的全部 WSL 发行版

  3. 检查当前每个发行版的安装路径

  4. 判断哪些发行版需要迁移

  5. 使用 LxRunOffline 执行迁移操作

  6. 清理 C 盘原始文件

  7. 最终验证和可选优化建议


✅ 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. 判断哪些发行版需要迁移

例如:
 

发行版名称当前位置是否迁移?
✅ UbuntuC:\Users\love\AppData\Local\wsl\...✅ 迁移到 I:\WSL\Ubuntu
✅ Ubuntu-PreviewC:\Users\love\AppData\Local\Packages\...✅ 迁移到 I:\WSL\Ubuntu-Preview
✅ podman-machine-defaultC:\Users\love\.local\share\containers\...✅ 迁移到 I:\WSL\podman-machine-default
✅ podman-0C:\Users\love\.local\share\containers\...✅ 迁移到 I:\WSL\podman-0
✅ NVIDIA-WorkbenchC:\Users\love\AppData\Local\NVIDIA...✅ 迁移到 I:\WSL\NVIDIA-Workbench
❌ docker-desktopD:\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 盘)的发行版。


✅ 当前的发行版迁移计划如下:

发行版名称当前位置是否迁移?
✅ UbuntuC:\Users\love\AppData\Local\wsl\...✅ 迁移到 I:\WSL\Ubuntu
✅ Ubuntu-PreviewC:\Users\love\AppData\Local\Packages\...✅ 迁移到 I:\WSL\Ubuntu-Preview
✅ podman-machine-defaultC:\Users\love\.local\share\containers\...✅ 迁移到 I:\WSL\podman-machine-default
✅ podman-0C:\Users\love\.local\share\containers\...✅ 迁移到 I:\WSL\podman-0
✅ NVIDIA-WorkbenchC:\Users\love\AppData\Local\NVIDIA...✅ 迁移到 I:\WSL\NVIDIA-Workbench
❌ docker-desktopD:\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.exedockerd.exewsl.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 --allLxRunOffline get-dir -n <发行版名> 确认路径后再删除。


🔚 总结

通过本文的方法,可以将多个 WSL 发行版从系统盘顺利迁移到其他磁盘,释放空间、统一管理,适用于包括 Podman Desktop、NVIDIA AI Workbench、多个 Ubuntu 的环境。

同时,这也是一个需要谨慎使用的方法,迁移后最好逐一进行完整的功能和性能测试。


 

http://www.xdnf.cn/news/14639.html

相关文章:

  • C++ 中 QVector 的判断与操作
  • 【Linux第四章】gcc、makefile、git、GDB
  • TensorFlow 安装与 GPU 驱动兼容(h800)
  • 编程基础:调用访问
  • 【设计模式】4.代理模式
  • 基于YOLO的智能车辆检测与记录系统
  • `customRef` 在实战中的使用:防抖、计算属性缓存和异步数据获取
  • 【StarRocks系列】建表优化
  • SpringBoot电脑商城项目--显示勾选+确认订单页收货地址
  • ZooKeeper 3.9.2 集群安装指南
  • Jupyter notebook调试:设置断点运行
  • Kubernetes 集群性能优化实战:从资源分配到调度策略
  • `teleport` 传送 API 的使用:在 Vue 3 中的最佳实践
  • 为WIN10微软输入法的全角切换Bug禁用Shift+Space组合键
  • C++ unordered_set基础概念、对象创建、赋值操作、数据插入、数据删除、代码练习 1 2
  • 前端开发面试题总结-vue3框架篇(二)
  • 《map和set的使用介绍》
  • stm32串口(uart)2转发到串口(uart)3实现
  • Qt实战:自定义二级选项框 | 附完整源码
  • 为车辆提供路径规划解决方案:技术演进、挑战与未来蓝图
  • 网络编程及原理(六):三次握手、四次挥手
  • 【软考高级系统架构论文】论NoSQL数据库技术及其应用
  • 通过事件过滤器拦截QRadioButton点击事件
  • 算法第38天|322.零钱兑换\139. 单词拆分
  • 数据分析和可视化:Py爬虫-XPath解析章节要点总结
  • 【Python进阶系列】第9篇:聊聊 Python 中常用的第三方库
  • C++递归应用
  • 7.3.1二叉排序树
  • 【编译原理】语句的翻译
  • FPGA基础 -- Verilog 共享任务(task)和函数(function)