如何在 WSL 中移動 ubuntu

如何在 WSL 中移動 ubuntu

當我開始開發時,WSL我不知道為什麼,但我Ubuntu-20.04從 Microsoft 商店安裝了應用程序,而不僅僅是Ubuntu.我知道唯一的區別是新版本發佈Ubuntu-20.04時不會自動更新。Ubuntu我想做的就是Ubuntu像這樣Ubuntu-20.04而不需要重新配置它。我曾想過將所有文件從 移動Ubuntu-20.04Ubuntu,但我不知道這樣做是否安全。有人知道如何做我想做的事嗎?我也應該這樣做嗎?

編輯:兩個版本的 ubuntu 都在運行,WSL-2我已經使用wsl -l -v@NotTheDr01ds 所說的方法對其進行了檢查。

編輯2:我想要我的所有配置,Ubuntu-20.04包括Ubuntu所有文件和已安裝的軟體包

答案1

為什麼你可能根本不需要這樣做

好的,首先要做的事。這可能是非常不必要的。

商店中的“Ubuntu”(沒有版本號)會自動更新這一事實……確實如此,但實際上有點誤導。

這有點難以解釋,但是當您從商店安裝“Ubuntu”(無版本)時,您實際上最終會得到事物:

  • 中的rootfs 套件 ( install.tar.gz)C:\Program Files\WindowsApps\CanonicalGroup...您可以透過啟動管理 PowerShell 並執行來查看這一點Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\Canonical*' | Where-Object {$_.Name -eq 'install.tar.gz' } | % { $_.DirectoryName }

  • 首次運行時(通過ubuntu.exe),安裝程式會在您的%UserProfile%\AppData\Local\Packages\CanonicalGroup....

當商店中有新版本時,唯一更新的是 rootfs 套件。確實如此不是更改您已安裝的實例。 (感謝 Reddit 上的 u/zoredache 保持讓我想起了這一點.)

這對於大多數用戶來說毫無用處,除非您:

  1. 取消註冊實例(這會刪除所有配置)並透過重新運行命令來重新配置它ubuntu.exe
  2. 想要使用它install.tar.gz來建立第二個 WSL/Ubuntu 實例(使用wsl --import)。然後,新建立的實例將使用儲存更新的 rootfs。

這兩種情況都不常見。即使未版本化的商店Ubuntu更新到(大概)22.04,它也不會改變您的已安裝20.04 的實例,只有 rootfs包裹

sudo do-release-upgrade -d當您最終想要升級到 22.04(或臨時版本)時,您仍然需要執行 a 。

因此,鑑於...既然您已經按照您想要的方式進行了配置,那麼除了為 WSL 實例Ubuntu-20.04獲得一個更短、更清晰的命名之外,更改它並沒有太大的好處。Ubuntu

無論如何該怎麼做

也就是說,根據 WSL2 儲存資料的方式,行動配置並不是那麼困難。 WSL2 實例的整個檔案系統儲存在名為 的虛擬 HDD 中ext4.vhdx

由於您有兩個 Ubuntu 安裝(UbuntuUbuntu-20.04),因此您將在 下找到其中兩個ext4.vhdx檔案%userprofile%\AppData\Local\Packages\。若要取得確切位置,請從 PowerShell 執行下列命令:

Get-ChildItem "$env:USERPROFILE\AppData\Local\Packages\CanonicalGroupLimited*\LocalState\*"

對於我的安裝,那就是:

...\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
...\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

此時解決方案可能相當明顯,但當然要小心:

  • 退出所有正在執行的 WSL 實例。

  • 然後wsl --shutdown確保當前沒有任何運行。

  • 備份現有配置wsl --export Ubuntu-20.04 2021-09-26_Ubuntu-20.04_backup.tar(或任何您想要呼叫的備份檔案)並不是一個壞主意。這基本上創建了當前 rootfs 的 tarball,包括所有檔案、所有權和權限。

  • 此時,只需將所需的 (Ubuntu-20.04) 複製ext4.vhdx到新安裝的 (Ubuntu) 上即可。真正的技巧只是確保您複製了正確的內容。您可能想要運行您的Ubuntu-20.04發行版並進行快速更改,以便您可以輕鬆地在“正確”副本上看到後一個時間戳記。

唯一真正的要求是兩個實例的預設使用者應該相同。


另一種可能性 - 由於您備份了所需的配置wsl --export,因此您始終可以將wsl --import其備份到名為 的新實例中Ubuntu

  • 首先,您需要解除安裝 Store Ubuntu
  • 然後為您的新實例選擇一個目錄。它可以位於任何地方,不再需要位於您的AppData目錄下。
  • wsl --import Ubuntu <directory> path\to\2021-09-26_Ubuntu-20.04_backup.tar --version 2

我把我的%userprofile%\Documents\WSL\instances和我的tar備份放在%userprofile%\Documents\WSL\images.這使我能夠透過 快速啟動新實例wsl --import。能夠在不影響我的日常環境的情況下測試某些東西真是太好了。


請注意閱讀本文的所有 WSL1 使用者。 WSL1 的 rootfs 不儲存在虛擬 HDD 檔案中,而是作為...\LocalState\rootfs\.請不要直接存取這些文件,因為它很容易導致 WSL 文件系統損壞(請參閱微軟開發部落格)。

如果您只需從 Windows 存取文件,請使用\\wsl$\<distro>該 Microsoft 部落格中所述的 Windows 中的路徑。但是,如果您需要複製整個內容,就像在這個問題中一樣,最好的選擇是先透過wsl --set-version <distro> 2wsl --export首先進行備份)將實例轉換為 WSL2。轉換後,檔案系統將採用 WSL2ext4.vhdx格式。

相關內容