Windows上でのWSL(Windows Subsystem for Linux)の既存環境を別のWindowsパソコンへ移行する手順は、主にエクスポートとインポートのプロセスを通じて行います。また、WSLのバージョンによっては、少し簡単な方法で環境の移行が可能です。
> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Running 2
移行元PCおよび移行先PCの双方で、上記のコマンドが実行できることを確認してください。実行できない場合は、WSL2の環境セットアップを実行してください。
ここでは、上記のとおりWSL2を対象としています。WSL1では動作しません。
> wsl --version
WSL バージョン: 2.3.26.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.22631.4317
PCによっては、上記のようにwsl --version
のコマンドが有効な場合があります。これは、もともとWindowsに組み込まれているWSLではなく、最新版の「WSL」です。この環境を利用するには,MicrosoftストアやGitHubからインストーラーをダウンロードし、インストールする必要があります。最新版の環境でも以下の手順は可能ですが、もう少し簡単な手順で移行できる--import-in-place
オプションが利用できます。
まず、移行元のPCでWSL環境をエクスポートします。これにより、WSLディストリビューションを.tarファイルとして保存します。
wsl --export <ディストリビューション名> <保存先のパス>\<ファイル名>.tar
例:
wsl --export Ubuntu-22.04 D:\WSL\バックアップ\Ubuntu-22.04.tar
なお、エクスポートの際に--vhd
オプションを付与すると、tarファイルではなくvhdxファイルで出力されます。tarは圧縮ファイルであり、圧縮してから出力するため処理に時間がかかります。対して、vhdxファイルは現行環境のvhdxファイルから単純コピーするため、出力処理時間は短めです。ただし、tarファイルと比較すると出力されたvhdxファイルは非圧縮であるためサイズが大きくなり、記憶媒体を圧迫する可能性があります。ストレージの容量やネットワーク環境の具合を見て、どちらを利用するか決めると良いでしょう。
エクスポートした.tarファイルを、移行先PCにコピーします。環境の運用状況次第ですが、ファイルサイズが10GBを超えるケースもあります。この場合は、ファイルのコピーをrobocopyなどの専用ツールにより実行したほうがいいでしょう。エクスプローラーを使ったコピーでは失敗するケースもあるからです。とくにファイルサイズが大きいと、その傾向が強くなります。vhdxファイルで出力した場合、1つのファイルサイズが数十GBを超えることもあるため、エクスプローラーではなくツールによるコピーをオススメします。
次に、移行先のPCでエクスポートした.tarファイルをインポートします。これにより、WSLディストリビューションが新しいPCにインストールされます。
wsl --import <ディストリビューション名> <インストール先のフォルダ> <エクスポートした.tarファイルのパス>
例:
wsl --import Ubuntu-22.04 D:\WSL\Ubuntu D:\WSL\バックアップ\Ubuntu-22.04.tar
移行元のPCで古いWSLインスタンスを削除して、ディスクスペースを解放することができます。
wsl --unregister <古いディストリビューション名>
例:
wsl --unregister Ubuntu-22.04
インポートしたディストリビューションを起動します。
wsl -d <新しいディストリビューション名>
例:
wsl -d Ubuntu-22.04
--import-in-place
オプション)WSLの環境を移行する際に、--import-in-place
オプションを使用することで、既存環境のエクスポート作業をスキップしつつ、既存のVHDXファイルを新しいWSLディストリビューションとしてインポートすることができます。この方法は、特にWSL2の環境を複製したい場合に便利です。ただし、この方法が実行できるWSL2の環境かどうか、事前に確認する必要があります。
> wsl --version
上記のコマンドを実行したさい、WSLのカーネルバージョンが表示されるようであれば、--import-in-place
オプションが利用できます。
> wsl --version
WSL バージョン: 2.3.26.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.22631.4317
上記のような表示である場合、--import-in-place
オプションが利用できる環境です。オプション一覧が表示されるようであれば、そのWSL2環境は--import-in-place
オプションが利用できないバージョンです。その場合は、上記の「エクスポートとインポート」の手順で移行するか、MicrosoftストアやGitHubから最新版のWSL2環境をインストールします。なお、環境によってはwsl --update
を実行するとWSL2環境が最新盤になりますが、Proxy環境下ではこのコマンドを正常に実行できないと思われます。
まず、WSLディストリビューションを停止します。これにより、VHDXファイルが安全にコピーできる状態になります。
wsl --shutdown
次に、移行元のWSL環境からVHDXファイルをエクスポートします。以下のコマンドを使用して、VHDXファイルを指定の場所にエクスポートします。
wsl --export <ディストリビューション名> <エクスポート先のパス>\<ファイル名>.vhdx --vhd
例:
wsl --export Ubuntu-22.04 D:\WSL\バックアップ\Ubuntu-22.04.vhdx --vhd
ただし、--export
オプションを使わなくても、既存環境のvhdxファイルを直接移行先にコピーする方法もあります。
vhdxファイルを、移行先PCにコピーします。
前の作業でvhdxファイルをエクスポートした場合は、エクスポートした先に格納されているvhdxファイルを移行先へコピーします。エクスポートせず直接既存環境のvhdxファイルをコピーする場合、既存環境が格納されているフォルダを探す必要があります。
%LOCALAPPDATA%\Packages\CanonicalGroupLimited.<<環境名>>\LocalState\
インストールされているWSLの環境が複数ある場合は、ディストリビューション名やバージョンを頼りに対象を探します。対象環境のフォルダ内に存在するLocalState
というフォルダについて見ると、ext4.vhdx
というファイルがあるはずです。このファイルが既存環境そのものですので、このファイルを移行先へコピーします。
vhdxファイルはファイルサイズが大きくなりがちなので、ファイルのコピーをrobocopyなどのツールにより実行することをオススメします。
移行先のPCで、エクスポートしたVHDXファイルを新しいWSLディストリビューションとしてインポートします。以下のコマンドを使用します。
wsl --import-in-place <新しいディストリビューション名> <VHDXファイルのパス>
例:
wsl --import-in-place NewUbuntu D:\WSL\バックアップ\Ubuntu-22.04.vhdx
インポートが完了したら、新しいWSLディストリビューションを起動します。
wsl -d <新しいディストリビューション名>
例:
wsl -d NewUbuntu
--import
オプションと--import-in-place
オプションの違いWSL(Windows Subsystem for Linux)の環境移行において、--import
オプションと--import-in-place
オプションは、それぞれ異なる方法でディストリビューションをインポートします。
特徴 | --import オプション |
--import-in-place オプション |
---|---|---|
基本的な機能 | 指定した.tarまたは.vhdxファイルを新しいディストリビューションとしてインポートする。 | 指定した.vhdxファイルをそのまま新しいディストリビューションとして登録する。 |
ファイルのコピー | インポート時に指定したファイルのコピーを作成し、指定したディレクトリに配置する。 | ファイルをコピーせず、指定した場所の.vhdxファイルを直接使用する。 |
ディストリビューション名 | 既存のディストリビューション名と重複しないように新しい名前を指定する。 | 既存のディストリビューション名と重複しないように新しい名前を指定する。 |
使用するファイル形式 | .tarまたは.vhdxファイルを使用可能。 | .vhdxファイルのみを使用。 |
ディレクトリ構成 | 指定したディレクトリにext4.vhdxという固定名で作成される。 | 指定した.vhdxファイルの場所をそのまま使用するため、ディレクトリ構成が浅くなる。 |
パフォーマンス | ファイルのコピーが発生するため、若干のオーバーヘッドがある。 | コピーがない分、パフォーマンスが向上する。 |
適用シナリオ | 異なるディレクトリに複数のWSL環境をインポートしたい場合に便利。 | 既存の環境をそのまま複製したい場合に便利。 |
--import
オプションは、指定したバックアップファイル(.tarまたは.vhdx)を新しいWSLディストリビューションとしてインポートします。この際、ファイルのコピーが行われ、指定したディレクトリに新しいディストリビューションが作成されます。--import-in-place
オプションは、指定した.vhdxファイルをそのまま新しいディストリビューションとして登録します。このため、ファイルのコピーは行われず、元のファイルを直接利用します。--import
では、指定したファイルのコピーが作成されるため、元のファイルはそのまま残ります。--import-in-place
では、ファイルをコピーせずに直接使用するため、ストレージの効率が良くなります。--import-in-place
では既存のディストリビューション名と重複しないように注意が必要です。--import
は.tarファイルも受け入れますが、--import-in-place
は.vhdxファイルのみを使用します。--import
では、インポートされたディストリビューションはext4.vhdxという固定名で作成され、指定したディレクトリに配置されます。--import-in-place
では、指定した.vhdxファイルの場所をそのまま使用するため、ディレクトリ構成がシンプルになります。--import
はファイルのコピーが発生するため、若干のオーバーヘッドがありますが、--import-in-place
はそのまま使用するため、パフォーマンスが向上します。--import
は、異なるディレクトリに複数のWSL環境をインポートしたい場合に便利です。--import-in-place
は、既存の環境をそのまま複製したい場合に特に有用です。このように、--import
と--import-in-place
はそれぞれ異なる用途に応じて使い分けることができます。移行の目的や環境に応じて、適切なオプションを選択してください。
wsl --list --verbose
コマンドで確認できます。--import-in-place
オプションは最新版のWSL2専用です。WSL1のディストリビューションには使用できません。この手順を実行することで、WSL環境を別のPCに移行することができます。これにより、開発環境や設定をそのまま新しいPCで利用することが可能です。