今回は、WSL(Windows Subsystem for Linux)で使用するためのVHDXファイルの作成から、そのフォーマット、マウントまでの手順を詳しく解説します。これを使えば、WSLの環境間でデータを共有したり、WSLのストレージを拡張したりできます。では早速始めましょう!
VHDXファイルとは?
VHDXは「Virtual Hard Disk」の拡張版で、Windows環境で使われる仮想ディスクのフォーマットです。WSLでこれをマウントすることで、WSLのデータを効率よく移行できるようになります。
事前準備
始める前の事前要件は下記の通り。
- Windows 10 ビルド20211以降またはWindows 11を使用していること
- WSL 2がインストールされていること(WSL 1では使えません!)
- 管理者権限のあるアカウントでログインしていること
それでは実際の手順に進みましょう!
1. VHDXファイルの作成方法
VHDXファイルを作成するには、PowerShellとdiskpartの2つの方法があります。個人的にはPowerShellの方が簡単でおすすめです。
方法1: PowerShellを使った作成(おすすめ)
-
まず、管理者権限でPowerShellを開きます。スタートメニューで「PowerShell」と入力し、「管理者として実行」を選びましょう。
-
次のコマンドを実行してVHDXファイルを作成します
New-VHD -Path "C:\WSL_Disks\MyDataDisk.vhdx" -SizeBytes 50GB -Dynamic
このコマンドの意味は・・・
-
-Path
には作成したいVHDXファイルの保存先を指定します。ディレクトリは事前に作成しておく必要があります。 -
-SizeBytes
でディスクサイズを指定します。50GBや100GBなど、必要なサイズを設定してください。 -
-Dynamic
オプションをつけると、可変容量のVHDXが作成されます。これはデータが増えるにつれて自動的にサイズが拡張されるタイプで、ストレージを効率的に使えます。
もし固定容量のVHDXが必要な場合は、-Dynamic
の代わりに-Fixed
を使います(または何も指定しない)。固定容量は最初から指定したサイズ分のストレージを占有しますが、パフォーマンスが若干良くなる場合があります。
方法2: diskpartを使った作成
PowerShellが苦手な方は、diskpartコマンドを使っても同様のことができます。
-
管理者権限でコマンドプロンプトかPowerShellを開きます。
-
diskpart
と入力して、diskpartユーティリティを起動します。 -
次のコマンドを順に実行します。
create vdisk file="C:\WSL_Disks\MyDataDisk.vhdx" maximum=51200 type=expandable
exit
ここでのmaximum=51200
は50GBをMB単位で指定したものです(50×1024=51200)。
type=expandable
は可変容量、type=fixed
は固定容量を意味します。
2. VHDXファイルのフォーマット
さて、ここまでで空のVHDXファイルが作成できました。でも、このままでは使えません。Linuxで利用するためのファイルシステムでフォーマットする必要があります。
WSLでLinuxファイルシステム(主にext4)としてフォーマットするには、下記の手順を実施します。
- 作成したVHDXを「生のディスク」としてWSLにマウントします。管理者権限のPowerShellで下記を実行します。
wsl --mount "C:\WSL_Disks\MyDataDisk.vhdx" --vhd --bare
--bare
オプションはファイルシステムをマウントせず、ただディスクデバイスとしてWSLに認識させるためのものです。
-
次にWSLを起動します。Ubuntuなどのディストリビューションを開いてください。
-
WSL内で、新しく追加されたディスクデバイスを確認します。
lsblk
出力は以下のようになるでしょう。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 256G 0 disk
└─sda1 8:1 0 256G 0 part /
sdb 8:16 0 50G 0 disk
ここでsdb
(またはsdc
など、環境によって異なる)が新しく追加されたディスクです。これにはまだファイルシステムがありません。
- 次に、このディスクをext4形式でフォーマットします。
sudo mkfs.ext4 /dev/sdb
⚠️ 重要な注意: デバイス名(/dev/sdb
など)を間違えると、他のディスクのデータが失われる可能性があります!必ずlsblk
で確認したデバイス名を使用してください。
- フォーマットが完了したら、WSLを終了し、PowerShellで以下のコマンドを実行してアンマウントします。
wsl --unmount "C:\WSL_Disks\MyDataDisk.vhdx"
これでVHDXファイルがext4形式でフォーマットされ、WSLで利用可能になりました!
3. VHDXファイルのマウント
フォーマット済みのVHDXファイルをWSLにマウントします。
- 管理者権限のPowerShellで次のコマンドを実行します。
wsl --mount "C:\WSL_Disks\MyDataDisk.vhdx" --vhd --type ext4
--type ext4
オプションは、VHDXがext4形式でフォーマットされていることをWSLに伝えます。通常は自動検出されますが、明示的に指定しておくと確実です。
- WSLディストリビューションを開き、マウントポイントを確認します。
df -h
マウントされたVHDXは通常、/mnt/wsl/
ディレクトリ以下にマウントされます。
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 50G 24K 47G 1% /mnt/wsl/sdb
このマウントポイント(例:/mnt/wsl/sdb
)にアクセスすれば、VHDXファイル内のデータを利用できます!
- 使い終わったら、管理者権限のPowerShellに戻り、以下のコマンドでアンマウントします。
wsl --unmount "C:\WSL_Disks\MyDataDisk.vhdx"
便利な使い方のヒント
マウントポイントのシンボリックリンク作成
毎回/mnt/wsl/sdb
のような長いパスを入力するのは面倒です。WSL内でシンボリックリンクを作成すると便利です。
sudo ln -s /mnt/wsl/sdb /data
これで、/data
という短いパスでアクセスできるようになります。
自動マウントの設定
WSLの起動時に自動的にVHDXをマウントする標準機能はありませんが、簡単なスクリプトで実現できます。たとえば、Windowsのタスクスケジューラを使って、ログイン時に管理者権限でマウントコマンドを実行するバッチファイルを作成する方法があります。
トラブルシューティング
マウントできない場合
- WSLが完全に停止していることを確認:
wsl --shutdown
- VHDXファイルが他のプロセスで使用されていないか確認
- パスに日本語や空白がないか確認(あれば英数字のみのパスに移動)
アクセス権限の問題
WSL内でファイルにアクセスできない場合は、マウントポイントの所有者と権限を適切に設定します。
sudo chown -R your-username:your-username /mnt/wsl/sdb
sudo chmod -R 755 /mnt/wsl/sdb
まとめ
これで、WSL用のVHDXファイルを作成、フォーマット、マウントする方法がわかりましたね!この技術を使えば、WSLとWindows間でのデータ共有がとても簡単になります。また、WSLのデフォルトファイルシステムとは別に大容量のストレージを追加することもできるため、開発環境の構築にも役立つでしょう。
ぜひ試してみてください!何か質問があればコメントで教えてくださいね。