WSLでUbuntuを移動する方法

WSLでUbuntuを移動する方法

で開発を始めたときWSL、なぜか ではなくUbuntu-20.04Microsoft ストアからアプリをインストールしましたUbuntu。 唯一の違いは、新しいバージョンがリリースされてUbuntu-20.04も は自動的に更新されないことです。 私がやりたいのは、再構成せずに と同じようにすることです。からにすべてのファイルを移動することも考えましたが、それが安全かどうかわかりません。 私がやろうとしていることを行う方法を誰か知っていますか? また、私はそれを行うべきでしょうか?UbuntuUbuntuUbuntu-20.04Ubuntu-20.04Ubuntu

編集: Ubuntu の両方のバージョンが実行中であり、@NotTheDr01ds が言ったようにWSL-2使用して確認しました。wsl -l -v

Ubuntu-20.04編集2:から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)、インストーラーは に実際の WSL インスタンスを作成します%UserProfile%\AppData\Local\Packages\CanonicalGroup...

ストアに新しいリリースがある場合、更新されるのはrootfsパッケージのみです。ないインストールを変更する実例(Redditのu/zoredacheに感謝します。これを思い出させる

以下の場合を除き、これはほとんどのユーザーにとってほとんど役に立ちません。

  1. インスタンスを登録解除し (すべての構成が削除されます)、ubuntu.exeコマンドを再実行して再構成します。
  2. これを使用してinstall.tar.gz、2 番目の WSL/Ubuntu インスタンスを作成します ( を使用wsl --import)。新しく作成されたインスタンスは、ストアで更新された rootfs を使用します。

どちらのシナリオもあまり一般的ではありません。バージョン管理されていないストアがUbuntu(おそらく)22.04に更新されても、インストール済み20.04のインスタンス、rootfsのみパッケージ

sudo do-release-upgrade -d最終的に 22.04 (または中間リリース) にアップグレードする場合は、を実行する必要があります。

つまり、すでにUbuntu-20.04希望どおりに構成されているので、UbuntuWSL インスタンスに短くてわかりやすい名前を付ける以外に、変更しても大きな利点はありません。

とにかくどうやってやるの

とはいえ、WSL2 がデータを保存する方法を考えると、構成を移動するのはそれほど難しくありません。WSL2 インスタンスのファイルシステム全体は、 という名前の仮想 HDD に保存されますext4.vhdx

Ubuntu が 2 つインストールされているため (Ubuntuと)、これらのファイルUbuntu-20.04のうち 2 つは の下にあります。正確な場所を取得するには、PowerShell から次のコマンドを実行します。ext4.vhdx%userprofile%\AppData\Local\Packages\

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 が作成されます。

  • その時点で、ext4.vhdx新しくインストールされた (Ubuntu) の上に、希望する (Ubuntu-20.04) をコピーするだけです。本当のコツは、正しいものをコピーしていることを確認することです。Ubuntu-20.04ディストリビューションを実行して、簡単な変更を加えると、「正しい」コピーの後のタイムスタンプを簡単に確認できます。

唯一の実際の要件は、両方のインスタンスのデフォルト ユーザーが同じである必要があることです。


別の可能性として、 で必要な設定をバックアップしてあるので、という名前の新しいインスタンスにそれをwsl --exportバックアップすることもできます。wsl --importUbuntu

  • まず、ストアをアンインストールする必要がありますUbuntu
  • 次に、新しいインスタンスのディレクトリを選択します。ディレクトリはどこにでも置くことができ、AppDataディレクトリの下にある必要はなくなりました。
  • wsl --import Ubuntu <directory> path\to\2021-09-26_Ubuntu-20.04_backup.tar --version 2

私は自分のものを に保存し%userprofile%\Documents\WSL\instancestarバックアップを に保存しています%userprofile%\Documents\WSL\images。これにより、 経由で新しいインスタンスをすばやく起動できますwsl --import。日常の環境に影響を与えずに何かをテストできるのは便利です。


これを読んでいるWSL1ユーザーへの注意。WSL1のルートファイルシステムは仮想HDDファイルに保存されるのではなく、実際のファイルとディレクトリとして保存されます...\LocalState\rootfs\。これらのファイルに直接アクセスしないでください。WSLファイルシステムが破損する恐れがあります(Microsoft 開発ブログ)。

Windows からファイルにアクセスするだけの場合は、\\wsl$\<distro>Microsoft ブログに記載されている Windows のパスを使用します。ただし、この質問のようにすべてをコピーする必要がある場合は、まずインスタンスを WSL2 に変換するのが最善策ですwsl --set-version <distro> 2(wsl --exportまずバックアップを作成してください)。変換後、ファイルシステムは WSL2 形式になりますext4.vhdx

関連情報