WSL2 をCドライブ以外で使う

# 概要

WSL2の Linuxディストリビューションの仮想ディスク（vhdxファイル）を、Cドライブ以外に配置して使うための手順です。

WSL2の仮想ディスクはデフォルトでCドライブに配置されていますが、使っているとファイルサイズが大きくなります。Cドライブの空き容量が足りなくなったら移動すると良いです。

vhdxファイルが100GBを超えるくらい大きくなっていても、エクスプローラーでのファイルコピーには時間がかかりますが、その他の処理はすぐ終わります。

所要時間: 5～10分くらい

# (1) WSLで Linuxをインストール

好きな Linuxディストリビューションをインストールして VHDXファイルを作成します。
※インストール済みのディストリビューションを移動する場合は、この作業は飛ばしてください

```shell: PowerShell
# インストールできる Linux 一覧を確認
PS> wsl -l -o
NAME                            FRIENDLY NAME
Ubuntu                          Ubuntu
Debian                          Debian GNU/Linux
kali-linux                      Kali Linux Rolling
Ubuntu-18.04                    Ubuntu 18.04 LTS
Ubuntu-20.04                    Ubuntu 20.04 LTS
Ubuntu-22.04                    Ubuntu 22.04 LTS
Ubuntu-24.04                    Ubuntu 24.04 LTS
...

# 好きな Linux をインストール
PS> wsl --install -d Ubuntu-24.04
インストール中: Ubuntu 24.04 LTS
Ubuntu 24.04 LTS がインストールされました。
Ubuntu 24.04 LTS を起動しています...

# ユーザー名とパスワードを入力
Enter new UNIX username: [ユーザー名を入力]
New password: [パスワードを入力]
Retype new password: [パスワードを再入力]

# Linuxシェルが起動したら終了させる
$ exit
```

# (2) VHDXファイルを配置場所へコピー

コピー作業の前に、WSLを終了します。

```shell: PowerShell
# WSLを終了する
PS> wsl --shutdown

# インストール済みの Linux 一覧を表示
PS> wsl -l -v
  NAME              STATE           VERSION
* Ubuntu-24.04      Stopped         2
```

エクスプローラーで "C:\Users\ユーザー名\AppData\Local\Packages\" を開いて、ディストリビューションのVHDXファイルを探します。Ubuntu 24.04 の場合は以下のフォルダにあります。

```
C:\Users\ユーザー名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu24.04LTS_XXXXXXXXX\LocalState\
```

LocalStateフォルダ内の ext4.vhdx を別のドライブの好きな場所にコピーします。

# (3) VHDXファイルを WSL にインポート

コピーした ext4.vhd (この例では "D:\XXX\My-Ubuntu-24\ext4.vhdx") を、新しい LinuxディストリビューションとしてWSLにインポートします。

```shell: PowerShell
# VHDXファイルを Linux「My-Ubuntu-24」としてインポート
PS> wsl --import-in-place My-Ubuntu-24 "D:\XXX\My-Ubuntu-24\ext4.vhdx"

# インストール済みの Linux 一覧を表示
PS> wsl -l -v
  NAME              STATE           VERSION
* Ubuntu-24.04      Stopped         2
  MY-Ubuntu-24      Stopped         2

# インポートした Linux「My-Ubuntu-24」を起動
PS> wsl -d My-Ubuntu-24
```

# (4) 初期設定

インポートした Linux を起動すると、rootユーザーでシェルが起動するので、以下を実行します。

```shell: bash
# wsl.conf を修正
root@HOSTNAME# echo "
[user]
default=＜普段使うユーザー名＞

[interop]
enabled=true
" >> /etc/wsl.conf

# ユーザーを変更
root@HOSTNAME# su - ＜普段使うユーザー名＞
Password: [パスワードを入力]

# .bash_profile を作成
$ echo "
# カレントディレクトリをホームに設定
[[ \$SHLVL -eq 1 ]] && cd ~

# .bashrc を読み込み
if [[ -f ~/.bashrc ]] ; then
  . ~/.bashrc
fi" >> ~/.bash_profile

# シェルを終了
$ exit

# rootのシェルを終了
root@HOSTNAME# exit

# WSLを終了
PS> wsl --shutdown
```

# (5) 動作確認

```shell: PowerShelll
# Linux「My-Ubuntu-24」を起動
PS> wsl -d My-Ubuntu-24
```

移動前に Dockerを使用していた場合、Dockerコンテナはすべて消えています。```docker compose up``` コマンドなどで作りなおします。

```shell: bash
# Dockerコンテナを表示
$ docker ps -a
CONTAINER ID   IMAGE                                                COMMAND                  CREATED          STATUS
```

# (6) 古い仮想ディスクを削除

動作に問題がなければ、古い Linuxディストリビューションを削除します。この時、古い仮想ディスク (vhdxファイル) も自動的に削除されます。

```shell: PowerShell
# インストール済みの Linux 一覧を表示
PS> wsl -l -v
  NAME              STATE           VERSION
* Ubuntu-24.04      Stopped         2
  MY-Ubuntu-24      Stopped         2

# 古い Linuxディストリビューションを削除
PS> wsl --unregister Ubuntu-24.04

# インストール済みの Linux 一覧を表示。「Ubuntu-24.04」が消えた
PS> wsl -l -v
  NAME              STATE           VERSION
* MY-Ubuntu-24      Stopped         2
```


# 参考にした記事

https://note.com/meltedsoy_sourc/n/na87a91bcd0de