🚀 將所有 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 的環境。
同時,這也是一個需要謹慎使用的方法,遷移后最好逐一進行完整的功能和性能測試。
?