WSLでスナップショットを作成する

WSLでスナップショットを作成する

マシンに wsl 2 をインストールしました (Windows 10 Pro を使用)。Ubuntu ディストリビューション 20.04 をダウンロードしました。Vmware のようにスナップショットやクローンを作成できるかどうか知りたいです。ありがとうございます !

答え1

@EstherのSuper Userに関するコメントは良いものですが、これは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はedインスタンスのデフォルトユーザーを「記憶」しないので--import、手動で設定する必要があります。このスーパーユーザーの回答ファイルを使用してこれを行う方法については、こちらをご覧ください/etc/wsl.conf

WSL プレビューの WSL2 用の新しい短縮オプション

WSL の最新バージョン (現在はプレビュー) には、wsl --import(および--export) の追加オプションがいくつかあります。

Windows 11をお使いの場合(あなたはそうではないと思いますが、他の人はそうかもしれませんし、あなたもそうなるかもしれません)、Microsoft Storeからインストールできます。そこには次のように記載されています。「Windows Subsystem for Linux プレビュー」

このバージョンでは、 を使用して、既存のインスタンスから新しいインスタンスに VHDX ファイル (WSL2 インスタンスの仮想ディスク) を直接インポートできます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もう一度試してください。

この方法には欠点が 1 つあります。これは、既存の WSL2 vhdx ファイルの純粋な「コピー」であるということです。つまり、必要以上のスペースを消費している場合、新しいイメージにも同じ「無駄なスペース」が残ります (この答え詳細についてはこちらをご覧ください。

増分スナップショット

WSLには、スペースを節約するために増分スナップショットを実行する機能はまだありません。5月これを手動でハックすることは可能ですが、私はまだこのテクニックを個人的にテストしていません。大まかなアイデアは次のとおりです。

  • tarGnuのを使用して既存のインスタンスのtarballを作成します増分ダンプ特徴。
  • 実際のファイルシステム内の適切なファイル (およびディストリビューションで使用されている場合はその拡張属性) をキャプチャするには--one-file-system、およびを指定します。--xattrs
  • 増分 tarball から「非増分」 tarball を再構築します。
  • を使用して復元しますwsl --import

しばらく前から試してみたかったのですが、まだ時間が取れませんでした。

関連情報