Windows 10 システムを「リセット」しながら WSL Linux 環境を維持するにはどうすればよいですか?

Windows 10 システムを「リセット」しながら WSL Linux 環境を維持するにはどうすればよいですか?

この郵便受けWSL ディレクトリを単純に復元すると、WSL が部分的に復元されますが、機能上の問題がいくつかあります。この郵便受けLinux インストールをバックアップおよび復元する方法に関する一般的な情報を提供します。この郵便受け%appdata% は実際には Windows.old フォルダに移動さ​​れます。このフォルダはリセット後に作成され、「古い」ファイルが含まれています。) 最初の投稿者の実験で失われた情報は何でしょうか? Linux ルート ディレクトリ ( %USERPROFILE%/AppData/Local/lxss) を復元するだけで機能するレジストリ設定や構成ファイルはありますか?

編集

私の質問は重複としてマークされましたシステムをリセットまたは再インストールする前に、Windows 10 用の (WSL) Linux サブシステムをバックアップするにはどうすればよいですか?

しかし、その質問はインストールをバックアップする方法、つまり基本的にはそれを tar にしてどこかに保存する方法についてのみでした。私は、それを復元する方法について明確に質問しています。

答え1

今日再び取り上げられた非常に古い質問ですが、質問されてから 4 年の間に状況は大きく変わりました。私は実際に数年前に毎日使っているデバイスを「リセット」しましたが、同じような状況になりました。

当時、できることといえば、何でも真似することくらいだった。データ古いファイルシステムから。この質問がなされたとき、そのファイルシステムは通常 (質問で言及されているように) のどこかにありました%USERPROFILE%\AppData\Local\lxss。正確には思い出せませんし、もうそれほど古いインストールは手元にないので、あなたの言うことを信じます。

ある時点で、おそらく WSL が複数のディストリビューションをサポートし始めたときに、WSL1 フォルダーが に変更されました%USERPROFILE%\AppData\Local\Packages\<PackageName>\LocalState\rootfs。数年前に PC をリセットしたとき、tarそのディレクトリをアップし、リセットと WSL の再インストール後に個々のファイル (ただし、ご質問のとおり、ファイルシステム全体ではありません) を復元しました。 は考慮しませんでしたWindows.oldが、それもそれらのファイルにアクセスする有効な方法だったでしょう。

今では、そうです、前にリセットを実行すると、wsl --exportここでの他の回答に記載されているように実行できます。

しかし、ユーザーがこれをやろうと思わなければ、5月リセット後も、 を使用してファイルシステムを完全に復元することは可能ですWindows.old。 2 つのシナリオがあります。

  • WSL2では、ファイルシステム全体が仮想ドライブに保存されるため、これはかなり簡単です%USERPROFILE%\AppData\Local\Packages\<PackageName>\LocalState\rootfs\ext4.vhdxこの答えext4.vhdx詳細については、こちらを参照してください。基本的には、これを新しいインストールからコピーWindows.oldして新しいインストールにコピーするだけです。

  • WSL1では、90%自信ありWindows.old次の方法を使用して WSL インストールを回復できます。

    1. まず、ストアからディストリビューションをインストールします。古いインストールはできませんが、この新しいインストールを使用してインストールします。作業が完了したら、いつでもストア配布をアンインストールできます。

    2. その配布を開始します。

    3. /etc/wsl.conf以下を使用して作成します。

      [automount]
      options = "metadata"
      
    4. 次、

      cd /mnt/C/Windows.old/Users/<yourusername>/AppData/Local/Packages/<PackageName>/LocalState/rootfs
      

      <PackageName>はディストリビューションによって異なりますが、Ubuntu ディストリビューションの場合は から始まりますCanonical...。WSL インストールが古い場合は である可能性があります/mnt/C/Windows.old/Users/<yourusername>/AppData/Local/lxss。そこを実行すると、そのインストールのディレクトリlsが表示されます。/

    5. そのディレクトリ内から、tar cvf recovery.tar .WSL1 のインストールにはしばらく時間がかかります。

    6. sudo mv recovery.tar <somewhere>ドライブ上の elseC:のような場所/mnt/c/Users/<youruser>/Documents/wsl(これは私がこれに使用している場所に近いです)。これが、作業が完了したときの配布の新しい場所になります。

    7. WSL を終了する

    8. PowerShell から、を配置したディレクトリに移動しますrecovery.tar

    9. mkdir OldUbuntu(または何とでもお呼びください)

    10. wsl --import OldUbuntu .\OldUbuntu .\recovery.tarこのコマンドでは、オプションで--version 1/2(末尾に) を使用して WSL バージョンを強制することもできます。

    11. 必要に応じて、 を使用してこれをデフォルトの WSL インストールにしますwsl --set-default OldUbuntu

    12. でディストリビューションを起動しますwsl ~ -d OldUbuntu-d/--distribution引数は、上記でデフォルトとして設定しなかった場合にのみ必要です。

    13. /etc/wsl.conf次の内容の を作成します。

      [user]
      default=username
      

      usernameWindows をリセットする前に配布されていたユーザー名に編集します。

    14. 必要に応じて、tarball の作成に使用したインストール済みのディストリビューションをアンインストールします。

    これで完了です。私は実際に、少し異なるシナリオでこれをテストしました。WSL1 インスタンスをインストールし、別のインスタンスから上記のプロセスを実行しました。--import上記の手順を実行した後、正常に実行できました。ファイル/ディレクトリの所有権とアクセス許可は、シンボリックリンクと同様に正しいようです。唯一の懸念は、非常に古い WSL ディストリビューションが異なるメタデータを使用する可能性があるかどうかです。

    警告: 他に回復する方法がない場合にのみ、WSL1ファイルシステムでこれを試してください。WSL1ファイルシステムのファイルにアクセスするには、%AppData%(または同等の)腐敗を引き起こすことが知られている. そのため、私はこれを試すために自分で使い捨てインスタンスを作成しました。

    サイドノート:別のWSLインスタンスをインストールする手間をかけるよりも、Windows内からtarファイルをインポートすることを検討してください。ここでの懸念は、これではWindows.oldリナックス所有権と権限が失われるため、' を実行するとインストールが破損する可能性がありますwsl --import

関連情報