
で開発を始めたときWSL
、なぜか ではなくUbuntu-20.04
Microsoft ストアからアプリをインストールしましたUbuntu
。 唯一の違いは、新しいバージョンがリリースされてUbuntu-20.04
も は自動的に更新されないことです。 私がやりたいのは、再構成せずに と同じようにすることです。からにすべてのファイルを移動することも考えましたが、それが安全かどうかわかりません。 私がやろうとしていることを行う方法を誰か知っていますか? また、私はそれを行うべきでしょうか?Ubuntu
Ubuntu
Ubuntu-20.04
Ubuntu-20.04
Ubuntu
編集: 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に感謝します。これを思い出させる。
以下の場合を除き、これはほとんどのユーザーにとってほとんど役に立ちません。
- インスタンスを登録解除し (すべての構成が削除されます)、
ubuntu.exe
コマンドを再実行して再構成します。 - これを使用して
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
希望どおりに構成されているので、Ubuntu
WSL インスタンスに短くてわかりやすい名前を付ける以外に、変更しても大きな利点はありません。
とにかくどうやってやるの
とはいえ、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 --import
Ubuntu
- まず、ストアをアンインストールする必要があります
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のルートファイルシステムは仮想HDDファイルに保存されるのではなく、実際のファイルとディレクトリとして保存されます...\LocalState\rootfs\
。これらのファイルに直接アクセスしないでください。WSLファイルシステムが破損する恐れがあります(Microsoft 開発ブログ)。
Windows からファイルにアクセスするだけの場合は、\\wsl$\<distro>
Microsoft ブログに記載されている Windows のパスを使用します。ただし、この質問のようにすべてをコピーする必要がある場合は、まずインスタンスを WSL2 に変換するのが最善策ですwsl --set-version <distro> 2
(wsl --export
まずバックアップを作成してください)。変換後、ファイルシステムは WSL2 形式になりますext4.vhdx
。