WSL環境を別PCへ移すときは、 wsl --export と wsl --import を使うと、ディストリビューション全体をtarファイルとして退避・復元できます。
この記事では、WSL上のUbuntu環境を別PCへ移す手順と、移行後に root でログインされないようにする default user 設定をまとめます。
この記事は、WSL環境を「丸ごと移す」ための手順です。
新しいPCで最初から環境を作り直す場合は、 winget 、 uv 、 mise 、 devcontainer などで再現できる形に寄せた方が管理しやすい場合もあります。
先に全体像
移行の流れは次の通りです。
- 移行元PCでWSLディストリビューション名を確認する
- 移行元PCで容量と移行対象を確認する
- 必要ならデフォルトログインユーザーを確認・設定する
- 移行元PCで
wsl --exportする - tarファイルを移行先PCへ移す
- 移行先PCで
wsl --importする - 移行先PCで起動確認する
- Windows側の設定を確認する
基本はこの流れです。
移行元でディストリビューション名を確認する
PowerShellで、WSLディストリビューションの一覧を確認します。
wsl --list --verbose
または短く書くなら次の通りです。
wsl -l -v
出力例です。
NAME STATE VERSION
* Ubuntu-22.04 Stopped 2
この例では、ディストリビューション名は Ubuntu-22.04 です。
以降のコマンドでは、この名前を指定します。
移行前に容量を確認する
WSL環境を丸ごとexportすると、tarファイルが大きくなることがあります。
Linux側でホームディレクトリや主要ディレクトリの容量を確認します。
du -sh ~
sudo du -sh /var/lib/* 2>/dev/null | sort -h
Windows側では、WSLの一覧と状態を確認します。
wsl -l -v
不要な一時ファイルやビルド成果物が多い場合は、export前に整理しておくと移行が楽になります。
wsl --export はディストリビューション全体をtarファイルにします。
Pythonの仮想環境、node_modules、Docker関連データなどが大きい場合、tarファイルも大きくなります。
default userを確認しておく
WSL環境を移行すると、移行先で意図せず root ユーザーで起動することがあります。
移行前に、Linux側で /etc/wsl.conf を確認しておくと安心です。
cat /etc/wsl.conf
デフォルトユーザーを明示する場合は、次のように設定します。
[user]
default=your-user-name
設定したら、いったんWSLを終了します。
wsl --terminate Ubuntu-22.04
/etc/wsl.conf の default には、WSL内に存在するLinuxユーザー名を書きます。
Windowsのユーザー名ではありません。
移行元でexportする
移行元PCで、対象ディストリビューションをtarファイルへ書き出します。
wsl --export Ubuntu-22.04 D:\backup\Ubuntu-22.04.tar
出力先ディレクトリは事前に作っておきます。
New-Item -ItemType Directory -Path D:\backup
エクスポート中は対象ディストリビューションを止めておく方が安全です。
wsl --terminate Ubuntu-22.04
wsl --export Ubuntu-22.04 D:\backup\Ubuntu-22.04.tar
MicrosoftのFAQでも、WSLディストリビューションのバックアップや移動には wsl --export / wsl --import を使う方法が案内されています。
作成されたtarファイルのサイズも確認しておきます。
Get-Item D:\backup\Ubuntu-22.04.tar | Select-Object Name, Length
移行先でimportする
移行先PCにtarファイルをコピーしたら、 wsl --import で取り込みます。
wsl --import Ubuntu-22.04 D:\wsl\Ubuntu-22.04 D:\backup\Ubuntu-22.04.tar --version 2
引数の意味は次の通りです。
| 引数 | 例 | 意味 |
|---|---|---|
| ディストリビューション名 | Ubuntu-22.04 |
WSL上で表示される名前 |
| インストール先 | D:\wsl\Ubuntu-22.04 |
WSLの実体を置くWindows側ディレクトリ |
| tarファイル | D:\backup\Ubuntu-22.04.tar |
wsl --export で作ったファイル |
| バージョン | --version 2 |
WSL 2として取り込む |
取り込み後、一覧に表示されることを確認します。
wsl -l -v
起動確認する
取り込んだディストリビューションを起動します。
wsl --distribution Ubuntu-22.04
ログインユーザーを明示する場合は、次のようにします。
wsl --distribution Ubuntu-22.04 --user your-user-name
ホームディレクトリや主要コマンドを確認します。
whoami
pwd
lsb_release -a
root でログインされてしまう場合は、移行先でも /etc/wsl.conf を確認します。
cat /etc/wsl.conf
必要に応じて、次の設定を入れます。
[user]
default=your-user-name
その後、Windows側から対象ディストリビューションを終了して再起動します。
wsl --terminate Ubuntu-22.04
wsl --distribution Ubuntu-22.04
よく確認すること
移行後は、次の点を確認しておくとよいです。
| 確認項目 | コマンド例 | 見ること |
|---|---|---|
| ログインユーザー | whoami |
想定ユーザーでログインしているか |
| WSLバージョン | wsl -l -v |
WSL 2になっているか |
| systemd | systemctl status |
systemdを使う環境なら動くか |
| SSH鍵 | ls ~/.ssh |
鍵や権限が移っているか |
| Git設定 | git config --global --list |
名前やメールが意図通りか |
| Python環境 | python --version |
必要なランタイムが動くか |
| Docker連携 | docker version |
Docker Desktop連携が必要なら動くか |
WSL環境の中身は移せても、Windows側のアプリや設定まで移るわけではありません。
VS Code、Windows Terminal、Docker Desktop、SSH Agent、環境変数など、Windows側に依存する設定は別途確認します。
Windows側の設定は別途確認する
wsl --export / wsl --import で移るのは、基本的にWSLディストリビューションの中身です。
次のようなWindows側の設定は別途確認します。
| 対象 | 確認すること |
|---|---|
| Windows Terminal | プロファイル、起動ディレクトリ、フォント |
| VS Code | Remote WSL拡張、ワークスペース設定 |
| Docker Desktop | WSL連携対象のディストリビューション |
| SSH Agent | Windows側で鍵を管理している場合の連携 |
| Git Credential Manager | 認証情報やGitHub連携 |
| 環境変数 | Windows側のPATHやツール設定 |
特にDocker Desktopを使っている場合は、移行先PCでWSL連携が有効になっているか確認します。
export/importで移すべきか、作り直すべきか
WSL環境の移行には、大きく2つの考え方があります。
| 方法 | 向いているケース |
|---|---|
wsl --export / wsl --import で丸ごと移す |
既存環境をそのまま残したい、再構築手順が未整理 |
| セットアップスクリプトで作り直す | 環境を再現可能にしたい、不要な設定を持ち越したくない |
個人的には、古いPCから新しいPCへ急いで移るときは export/import が便利です。
一方で、長期的にはセットアップ手順をコード化しておく方が、環境の再現性は高くなります。