
當我開始開發時,WSL
我不知道為什麼,但我Ubuntu-20.04
從 Microsoft 商店安裝了應用程序,而不僅僅是Ubuntu
.我知道唯一的區別是新版本發佈Ubuntu-20.04
時不會自動更新。Ubuntu
我想做的就是Ubuntu
像這樣Ubuntu-20.04
而不需要重新配置它。我曾想過將所有文件從 移動Ubuntu-20.04
到Ubuntu
,但我不知道這樣做是否安全。有人知道如何做我想做的事嗎?我也應該這樣做嗎?
編輯:兩個版本的 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 保持讓我想起了這一點.)
這對於大多數用戶來說毫無用處,除非您:
- 取消註冊實例(這會刪除所有配置)並透過重新運行命令來重新配置它
ubuntu.exe
。 - 想要使用它
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 安裝(Ubuntu
和Ubuntu-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> 2
(wsl --export
首先進行備份)將實例轉換為 WSL2。轉換後,檔案系統將採用 WSL2ext4.vhdx
格式。