如何在執行 Windows 10 系統「重設」時保留 WSL Linux 環境?

如何在執行 Windows 10 系統「重設」時保留 WSL Linux 環境?

這個帖子提到簡單地恢復 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.vhdxWindows.old新安裝中即可。

  • 有了 WSL1,我90% 有信心您可以Windows.old使用以下方法還原 WSL 安裝。

    1. 首先,從商店安裝發行版。我知道,你想恢復你的老的安裝,但我們將使用這個新安裝來做到這一點。當我們完成後,您可以隨時卸載商店發行版。

    2. 啟動該發行版。

    3. /etc/wsl.conf使用以下內容建立:

      [automount]
      options = "metadata"
      
    4. 下一個,

      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此操作時,您想要查看/該安裝的目錄。

    5. 從該目錄中,tar cvf recovery.tar .. WSL1 安裝需要一段時間。

    6. sudo mv recovery.tar <somewhere>其他在C:驅動器上;類似的東西/mnt/c/Users/<youruser>/Documents/wsl(它接近我用於此目的的東西)。當我們完成後,這將是分發的新位置。

    7. 退出 WSL

    8. 從 PowerShell 中,導航到您放置recovery.tar.

    9. mkdir OldUbuntu(或你想怎麼稱呼它)

    10. wsl --import OldUbuntu .\OldUbuntu .\recovery.tar。該指令還可以選擇使用 a --version 1/2(在末尾)來強制使用 WSL 版本。

    11. 如果需要,請將此設定為預設的 WSL 安裝wsl --set-default OldUbuntu

    12. 使用 啟動發行版wsl ~ -d OldUbuntu-d/--distribution只有當您未在上面將其設為預設值時,才需要該參數。

    13. 建立一個/etc/wsl.conf包含以下內容的文件:

      [user]
      default=username
      

      在重設 Windows 之前,請編輯username為您在發行版中的使用者名稱。

    14. (可選)卸載我們安裝並用於創建 tarball 的發行版。

    應該是這樣。我實際上已經用稍微不同的場景對此進行了測試。我安裝了一個 WSL1 實例,然後從另一個實例對其執行了上述過程。--import經過上述步驟後,我成功了。檔案/目錄所有權和權限看起來是正確的,符號連結也是如此。我唯一關心的是真正舊的 WSL 發行版是否可能使用不同的元資料。

    警告:如果您沒有其他方法來恢復,請僅在 WSL1 檔案系統上嘗試此操作。透過%AppData%(或等效方式)存取 WSL1 檔案系統中的檔案是已知會導致腐敗。這就是為什麼我自己創建了一個一次性實例來嘗試這一點。

    邊註:您可能會考慮從 Windows 內部tar匯入文件Windows.old,而不是經歷安裝另一個 WSL 實例的麻煩。我在這裡擔心的是,這不會捕獲Linux所有權和權限,這可能會導致安裝時損壞wsl --import

相關內容