頑張らないために頑張る

ゆるく頑張ります

既存のWSL環境を別PCに移行する

Posted at — Nov 22, 2024

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オプションが利用できます。

WSL環境の移行手順(エクスポートとインポート)

現在のWSL環境のエクスポート

まず、移行元の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でのWSL環境のインポート

次に、移行先のPCでエクスポートした.tarファイルをインポートします。これにより、WSLディストリビューションが新しいPCにインストールされます。

wsl --import <ディストリビューション名> <インストール先のフォルダ> <エクスポートした.tarファイルのパス>

例:

wsl --import Ubuntu-22.04 D:\WSL\Ubuntu D:\WSL\バックアップ\Ubuntu-22.04.tar

古いWSLインスタンスの削除(オプション)

移行元のPCで古いWSLインスタンスを削除して、ディスクスペースを解放することができます。

wsl --unregister <古いディストリビューション名>

例:

wsl --unregister Ubuntu-22.04

新しいWSLディストリビューションの起動

インポートしたディストリビューションを起動します。

wsl -d <新しいディストリビューション名>

例:

wsl -d Ubuntu-22.04

WSL環境の移行手順(--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ディストリビューションの停止

まず、WSLディストリビューションを停止します。これにより、VHDXファイルが安全にコピーできる状態になります。

wsl --shutdown

VHDXファイルのエクスポートあるいは退避(オプション)

次に、移行元のWSL環境からVHDXファイルをエクスポートします。以下のコマンドを使用して、VHDXファイルを指定の場所にエクスポートします。

wsl --export <ディストリビューション名> <エクスポート先のパス>\<ファイル名>.vhdx --vhd

例:

wsl --export Ubuntu-22.04 D:\WSL\バックアップ\Ubuntu-22.04.vhdx --vhd

ただし、--exportオプションを使わなくても、既存環境のvhdxファイルを直接移行先にコピーする方法もあります。

vhdxファイルファイルを移行先へコピー

vhdxファイルを、移行先PCにコピーします。

前の作業でvhdxファイルをエクスポートした場合は、エクスポートした先に格納されているvhdxファイルを移行先へコピーします。エクスポートせず直接既存環境のvhdxファイルをコピーする場合、既存環境が格納されているフォルダを探す必要があります。

%LOCALAPPDATA%\Packages\CanonicalGroupLimited.<<環境名>>\LocalState\

インストールされているWSLの環境が複数ある場合は、ディストリビューション名やバージョンを頼りに対象を探します。対象環境のフォルダ内に存在するLocalStateというフォルダについて見ると、ext4.vhdxというファイルがあるはずです。このファイルが既存環境そのものですので、このファイルを移行先へコピーします。

vhdxファイルはファイルサイズが大きくなりがちなので、ファイルのコピーをrobocopyなどのツールにより実行することをオススメします。

3. 移行先PCでのインポート

移行先のPCで、エクスポートしたVHDXファイルを新しいWSLディストリビューションとしてインポートします。以下のコマンドを使用します。

wsl --import-in-place <新しいディストリビューション名> <VHDXファイルのパス>

例:

wsl --import-in-place NewUbuntu D:\WSL\バックアップ\Ubuntu-22.04.vhdx

4. インポートしたディストリビューションの起動

インポートが完了したら、新しい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--import-in-placeはそれぞれ異なる用途に応じて使い分けることができます。移行の目的や環境に応じて、適切なオプションを選択してください。

注意事項

この手順を実行することで、WSL環境を別のPCに移行することができます。これにより、開発環境や設定をそのまま新しいPCで利用することが可能です。

参考

  1. microsoft/WSL
  2. WSL の基本的なコマンド
  3. WSLには3つの「バージョン」がある
  4. WSL2のディストリビューションの環境移行
  5. WSL2環境をコピー(複製)する方法
  6. robocopy
comments powered by Disqus