![在 WSL 中製作快照](https://rvso.com/image/1072221/%E5%9C%A8%20WSL%20%E4%B8%AD%E8%A3%BD%E4%BD%9C%E5%BF%AB%E7%85%A7.png)
我剛剛在機器中安裝了 wsl 2(使用 Windows 10 pro)。我下載了 ubuntu 發行版 20.04。我想知道是否可以像在 Vmware 中那樣對其進行快照和克隆。謝謝 !
答案1
@Esther 指向超級用戶的評論是一個很好的評論,但我認為這個問題值得在 Ask Ubuntu 上有自己的答案。它還需要一個更新答案是因為 WSL 在這方面有新功能。
超級用戶問題也僅涵蓋克隆/備份,但不是真正的“快照”,我認為這通常意味著“增量”備份。所以我會試圖在這個答案中也談到「快照」。
備份 WSL1 或 WSL2 發行版
支援的「備份」WSL1 或 WSL2 發行版的機制是使用wsl --export
.與大多數備份一樣,最好先關閉正在使用的文件,因此最好從 PowerShell 執行這些操作。
在 WSL 上退出 Ubuntu
來自 PowerShell:
wsl -l -v # Confirm your distribution name for the following commands wsl --terminate <distro_name> # Create directory structure, adjust to preference: mkdir "$env:userprofile\WSL\images" # You can hardcode the backup name below if you wish. # This example creates it with a date/timestamp-prefix on the tarball: wsl --export <distroname> "$env:userprofile\WSL\images\$(date -f yyyyMMdd_HHmmss)_Ubuntu.tar"
將先前的備份還原到新實例(建立克隆實例)
建立複製可以透過使用wsl --import
命令從上一個步驟建立的備份建立新實例來完成。
再次,來自 PowerShell:
# Adjust paths and names to your preference
mkdir "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone"
wsl --import Ubuntu20.04_TestClone "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone" <path_to_previous_backup.tar> --version 2
WSL 不會「記住」--import
ed 實例的預設用戶,因此您需要手動設定。看這位超級用戶的回答了解如何使用/etc/wsl.conf
文件來做到這一點。
WSL Preview 中針對 WSL2 的新的、更短的選項
在最新版本的 WSL(目前為預覽版)中,有幾個附加選項wsl --import
(以及--export
)。
如果你運行的是 Windows 11(我知道你不是,但其他人可能會,最終你也會),那麼你可以從 Microsoft Store 安裝它。它被列為“Linux 預覽版的 Windows 子系統”。
在此版本中,您可以使用wsl --import --vhd
.首先,您需要知道現有 VHDX 所在的位置。
來自 PowerShell:
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | ForEach-Object { (Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath }
然後只需從該位置導入:
# Adjust paths and names to your preference
mkdir "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone"
wsl --import Ubuntu20.04_TestClone "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone" <path_to_main_distro>\ext4.vhdx> --vhd --version 2
請注意,如果您收到以下錯誤:
The process cannot access the file because it is being used by another process.
....然後按順序嘗試:
wsl --terminate <distro>
現有實例,然後重試--import
。- 如果 Docker Desktop 正在運行,請將其停止,然後再試一次
--import
。 wsl --shutdown
,然後重試--import
。
此方法有一個缺點,因為這純粹是現有 WSL2 vhdx 檔案的「副本」。這意味著,如果它消耗的空間多於所需的空間,則新圖像將具有相同的「浪費空間」(請參閱這個答案了解更多)。
增量快照
WSL 尚不具備執行增量快照以節省空間的功能。它可能可以手動將其組合在一起,但我還沒有親自測試過這項技術。從高層次來看,這個想法是:
tar
使用Gnu創建現有實例的 tarball增量轉儲特徵。- 指定
--one-file-system
和--xattrs
擷取實際檔案系統中的正確檔案(及其擴充屬性,如果在您的發行版中使用)。 - 從增量 tarball 重建「非增量」tarball。
- 使用 恢復它
wsl --import
。
這是我很久以來就想嘗試的事情,但我還沒有時間。