
這個帖子提到簡單地恢復 WSL 目錄,部分恢復了 WSL,但存在一些功能問題。這個帖子提供有關如何備份和還原 Linux 安裝的通用資訊。這個帖子說 %appdata% 實際上已移至您的 Windows.old 資料夾中,該資料夾是在重置後創建的,包含您的「舊」檔案。 )在第一個海報實驗中可能遺失了哪些資訊?是否有一些註冊表設定或設定檔可以讓簡單地恢復 Linux 根目錄 ( %USERPROFILE%/AppData/Local/lxss
) 工作?
編輯
我的問題被標記為重複在系統重設或重新安裝之前,如何備份 (WSL) Windows 10 的 Linux 子系統?。
然而,這個問題只是關於如何備份安裝——基本上是 tar 並將其保存在某個地方。我明確詢問如何恢復它。
答案1
這是一個很老的問題,今天被提出來了,自問題提出以來的 4 年裡,情況已經發生了很大變化。實際上,幾年前我對我的日常駕駛員進行了“重置”,並遇到了類似的情況。
那時,你真正能做的最好的事情就是複製任何數據從舊的檔案系統中出來。當提出這個問題時,該檔案系統通常(正如您在問題中提到的)位於%USERPROFILE%\AppData\Local\lxss
.我會相信你的話,因為我記不太清楚了,而且我周圍也沒有任何舊的裝置了。
在某些時候,可能當 WSL 開始支援多個發行版時,WSL1 資料夾變更為%USERPROFILE%\AppData\Local\Packages\<PackageName>\LocalState\rootfs
.幾年前,當我在 PC 上進行重置時,我修復了tar
該目錄,然後在重置和 WSL 重新安裝後恢復了各個文件(但不是整個文件系統,如您所要求的)。我沒有考慮Windows.old
,但這也是獲取這些文件的有效方法。
如今,是的,前進行重置時,wsl --export
可以按照此處其他答案中提到的方式執行。
但如果用戶不想這樣做,可能重置後仍然可以使用 來完全恢復檔案系統Windows.old
。有兩種情況:
WSL2 讓這變得相當容易,因為整個檔案系統都儲存在
%USERPROFILE%\AppData\Local\Packages\<PackageName>\LocalState\rootfs\ext4.vhdx
.看這個答案有關詳細信息,但您基本上只需將其複製ext4.vhdx
到Windows.old
新安裝中即可。有了 WSL1,我90% 有信心您可以
Windows.old
使用以下方法還原 WSL 安裝。首先,從商店安裝發行版。我知道,你想恢復你的老的安裝,但我們將使用這個新安裝來做到這一點。當我們完成後,您可以隨時卸載商店發行版。
啟動該發行版。
/etc/wsl.conf
使用以下內容建立:[automount] options = "metadata"
下一個,
cd /mnt/C/Windows.old/Users/<yourusername>/AppData/Local/Packages/<PackageName>/LocalState/rootfs
<PackageName>
取決於您的發行版,但將從Canonical...
Ubuntu 發行版開始。如果您的 WSL 安裝足夠舊,它可能是/mnt/C/Windows.old/Users/<yourusername>/AppData/Local/lxss
.當您執行ls
此操作時,您想要查看/
該安裝的目錄。從該目錄中,
tar cvf recovery.tar .
. WSL1 安裝需要一段時間。sudo mv recovery.tar <somewhere>
其他在C:
驅動器上;類似的東西/mnt/c/Users/<youruser>/Documents/wsl
(它接近我用於此目的的東西)。當我們完成後,這將是分發的新位置。退出 WSL
從 PowerShell 中,導航到您放置
recovery.tar
.mkdir OldUbuntu
(或你想怎麼稱呼它)wsl --import OldUbuntu .\OldUbuntu .\recovery.tar
。該指令還可以選擇使用 a--version 1/2
(在末尾)來強制使用 WSL 版本。如果需要,請將此設定為預設的 WSL 安裝
wsl --set-default OldUbuntu
。使用 啟動發行版
wsl ~ -d OldUbuntu
。-d/--distribution
只有當您未在上面將其設為預設值時,才需要該參數。建立一個
/etc/wsl.conf
包含以下內容的文件:[user] default=username
在重設 Windows 之前,請編輯
username
為您在發行版中的使用者名稱。(可選)卸載我們安裝並用於創建 tarball 的發行版。
應該是這樣。我實際上已經用稍微不同的場景對此進行了測試。我安裝了一個 WSL1 實例,然後從另一個實例對其執行了上述過程。
--import
經過上述步驟後,我成功了。檔案/目錄所有權和權限看起來是正確的,符號連結也是如此。我唯一關心的是真正舊的 WSL 發行版是否可能使用不同的元資料。警告:如果您沒有其他方法來恢復,請僅在 WSL1 檔案系統上嘗試此操作。透過
%AppData%
(或等效方式)存取 WSL1 檔案系統中的檔案是已知會導致腐敗。這就是為什麼我自己創建了一個一次性實例來嘗試這一點。邊註:您可能會考慮從 Windows 內部
tar
匯入文件Windows.old
,而不是經歷安裝另一個 WSL 實例的麻煩。我在這裡擔心的是,這不會捕獲Linux所有權和權限,這可能會導致安裝時損壞wsl --import
。