UbuntuWSLをクリーンな仮想マシンに複製するにはどうすればよいですか?

1
2022.01.07

私はUbuntuWSLでPHP開発を行ってきましたが、今月初めにMacを購入し、まったく同じ構成で開発を続けたいと考えています。 Ubuntu WSL(PHP、nginxなどの構成を使用)をOSXで実行されている仮想マシンに複製するにはどうすればよいですか?

回答
2
2022.01.07

これを実行するための優れた方法はおそらくありませんが、いつでも試して何が起こるかを確認できます。

個人的には、Macに移行する場合は、PHP開発にmacOSとHomeBrewを採用するだけだと思います。これにより、Ubuntu VMで得られるよりも、WindowsでのWSL / Ubuntuで得られるものに近いエクスペリエンスが得られると思います。

もちろん、macOSでは利用できないLinuxカーネルやツールが特に必要な開発がある場合は、状況が変わります。

すべてをWSLからUbuntuVMに取り込むことに関しては、誰もがその方向に進んだことはありません。仮想マシンまたは物理マシンからWSLへの回答を提供しましたが、その逆はありません(今まで)。

ここで助けを求めてグーグルで出会ったArchLinuxガイドがあります。最初の行を除いて、それはあなたの質問にそれほど関連しているわけではありません:

仮想環境への移行にはもう少し手間がかかります。

WSLでは、まず、次のコマンドを使用して、任意のWSLインスタンスのrootfsのtarballを作成できます。

 wsl --export <distroname> <backupname>.tar

これにより、すべてのファイル、パーミッション、リンク、さらにはLinuxの機能も保持されます(ただし、Ubuntuディストリビューションがこれらをそのまま使用しているとは思いませんが)。

それフェイルセーフな方法でVMに取り込むことが課題です。仮想デバイスのドライバーサポートを取得するには、おそらくそのVMにUbuntu20.04をインストールすることから始める必要があります。もちろん、これはWSLtarballに存在するものではありません。

したがって、/lib 、または少なくともそこにあるドライバーをそのままにしておく必要がありますが、同時に、WSLバックアップから/libをマージする必要があります。

理論的には、両方のシステムが同じレベルにある場合(同時sudo apt update && sudo apt upgrade -yを介して)、既存のディレクトリからtarの内容を抽出するだけで済みます(理論的には、意図的に繰り返すことができます)。

wsl --export d tarを見たところ、復元してはならない「システム」ディレクトリ( /proc//boot/sysなど)を除外するのに非常に適しています。ただし、2つの例外があります。おそらく、抽出から/mnt/mediaを手動で除外する必要もあります。 UbuntuVMマウントポイントをWSLインスタンスのマウントポイントで上書きする正当な理由はほぼ確実にありません。

だから、本当に試してみたいのなら、私はこうします:

  • 既存のWSLをwsl --export

  • tarをMacに転送します。

  • できればUbuntuMinimalを使用してUbuntuVMをインストールします

  • Ubuntu VMをバックアップします(これは確かに機能しない可能性があるため)

  • tarをVMのルートに転送します

  • レスキューモードでVMを再起動します

  • 既存のディレクトリにtarを抽出します。 tar --xattrs-include="security.capability" --exclude="./mnt" --exclude="./media" -xvf ...を使用します。ターゲットディレクトリを指定する必要があるかもしれませんが、現時点ではテストできません。 --xattrsは必要ないかもしれませんが、拡張属性がある場合はより安全であることに注意してください。私はその構文を完全に確信しているわけではないので、 --excludeについてはこの回答を参照してください。

  • VMを再起動します

ここで問題を引き起こす可能性のあるその他の事項:

  • WSLはSystemdを起動しませんが、VMはデフォルトで起動します。 SystemdのインストールがWSLイメージからどれだけ堅牢になるかは不明です。