在 WSL 中製作快照

在 WSL 中製作快照

我剛剛在機器中安裝了 wsl 2(使用 Windows 10 pro)。我下載了 ubuntu 發行版 20.04。我想知道是否可以像在 Vmware 中那樣對其進行快照和克隆。謝謝 !

答案1

@Esther 指向超級用戶的評論是一個很好的評論,但我認為這個問題值得在 Ask Ubuntu 上有自己的答案。它還需要一個更新答案是因為 WSL 在這方面有新功能。

超級用戶問題也僅涵蓋克隆/備份,但不是真正的“快照”,我認為這通常意味著“增量”備份。所以我會試圖在這個答案中也談到「快照」。

備份 WSL1 或 WSL2 發行版

支援的「備份」WSL1 或 WSL2 發行版的機制是使用wsl --export.與大多數備份一樣,最好先關閉正在使用的文件,因此最好從 PowerShell 執行這些操作。

  1. 在 WSL 上退出 Ubuntu

  2. 來自 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 不會「記住」--imported 實例的預設用戶,因此您需要手動設定。看這位超級用戶的回答了解如何使用/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

這是我很久以來就想嘗試的事情,但我還沒有時間。

相關內容