最終更新日:2023年7月1日
はじめに
WSL2からWindows側のドライブにアクセスするだけなら非常に簡単です。「/mnt/c」「/mnt/d」などでそれぞれCドライブ、Dドライブにアクセスできます。しかし、それらのドライブはWindowsファイルシステムでフォーマットされているのでWSL2で読み書きする時に本来の速度が出ません。今回は外付けSSDをext4形式でフォーマットしてWSL2専用の外付けドライブとして使用してみました。
使用したもの
KIOXIA 500GB NVMe M.2 SSD『EXCERIA SSD-CK500N3/N』 FIDECO M.2 NVMe SATA SSDケース 『M203CP』
使用環境
C:\>wsl --status 既定のディストリビューション: Ubuntu-20.04 既定のバージョン: 2 WSL1 は、現在のマシン構成ではサポートされていません。 WSL1 を使用するには、"Linux 用 Windows サブシステム" オプション コンポーネントを有効にしてください。 WSL バージョン: 0.50.2.0 カーネル バージョン: 5.10.74.3 WSLg バージョン: 1.0.29 Windows バージョン: 10.0.22000.376
方法
SSDのフォーマット
Windowsの標準機能ではext4形式でのフォーマットはできないのでフリーソフト『AOMEI Partition Assistant』を使わせて頂きました。www.diskpart.com
Windows側から使用するデバイスを見る
コマンドプロンプトで wmic.exe diskdrive get deviceID,Caption を実行します。C:\>wmic.exe diskdrive get deviceID,Caption Caption DeviceID CT500MX500SSD1 \\.\PHYSICALDRIVE1 SAMSUNG MZ7LN256HMJP-000H1 \\.\PHYSICALDRIVE0 JMicron Tech SCSI Disk Device \\.\PHYSICALDRIVE3 Generic- SD/MMC/MS PRO USB Device \\.\PHYSICALDRIVE2
自分の環境では3番目の『JMicron Tech SCSI Disk Device \\.\PHYSICALDRIVE3』が外付けSSDです。
どれかわからない時は外付けSSDを外した状態でもう一回実行すれば良いと思います。
『\\.\PHYSICALDRIVE3』を次で使います。
WSL2側からデバイスを見る
まずはWSL2を立ち上げて lsblk を実行します。この時点では外付けSSDは見えていません。
user@OMEN-870-281jp:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 344.9M 1 disk sdb 8:16 0 4G 0 disk [SWAP] sdd 8:48 0 256G 0 disk /
次にWindows側で外付けSSDをアタッチします。
管理者として実行したコマンドプロンプトで以下のようbareオプションをつけてmountを実行するとアタッチされます。
C:\>wsl --mount \\.\PHYSICALDRIVE3 --bare この操作を正しく終了しました。
最後にWSL2に戻って lsblk をもう一回実行します。
user@OMEN-870-281jp:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 344.9M 1 disk sdb 8:16 0 4G 0 disk [SWAP] sdc 8:32 0 465.8G 0 disk └─sdc1 8:33 0 465.8G 0 part sdd 8:48 0 256G 0 disk /
最初の出力と比較するとsdc, sdc1が今回のSSDだとわかります。sdc1の1はバーティション番号です。次で使います。
最後にマウントする
管理者として実行したコマンドプロンプトでパーティション番号を指定してmountを実行します。C:\>wsl --mount \\.\PHYSICALDRIVE3 --partition 1 ディスク \\.\PHYSICALDRIVE3 は、名前 'PHYSICALDRIVE3p1' で正常にマウントされました。マウントポイントは、自動マウント設定が指すパス (既定: /mnt/wsl) の下にあります。 ディスクのマウントを解除してデタッチするには、'wsl.exe --unmount \\.\PHYSICALDRIVE3' を実行します。
これでWSL2からext4でフォーマットされた外付けSSDを使用することが可能になります。
2回目以降は最後のここだけ実行すれば良いです。
マウントの解除はこのようにします。
wsl --unmount \\.\PHYSICALDRIVE3
WSL2の作業を終了するのであれば以下で自動的にマウントは解除されます。
wsl --shutdown
注意点
ファイルやフォルダの作成、変更、削除にroot権限が必要ですと警告が出る場合があります。その場合には以下を実行すれば良いと思います。sudo chmod -R 777 /mnt/wsl/PHYSICALDRIVE3p1/
フォルダのアクセス権限を変更しています。
「-R」は「recursive」を設定しています。そのフォルダだけでなくフォルダ以下を一括して変更可能です。
このコマンドは一時的な変更ではないようです。どこかに保存されているのでしょう。
2回目以降は不要です。
補足
C#で以下のようなコンソールアプリを作っておくとマウントを自動化できます。using System.Diagnostics; namespace mountDISK { internal class Program { static void Main(string[] args) { var proc = new Process(); proc.StartInfo.FileName = @"c:\Windows\System32/cmd.exe"; proc.StartInfo.Verb = "RunAs"; proc.StartInfo.UseShellExecute = true; proc.StartInfo.Arguments = @"/C wsl --mount \\.\PHYSICALDRIVE3 --partition 1"; proc.Start(); } } }
さいごに
改善点や間違いがあればコメントして頂けたらうれしいです。高パフォーマンスのための設定(2022年4月14日追記)
こちらに注意点を書きました。touch-sp.hatenablog.com
2023年7月1日追記
良かったらこちらの記事も読んで下さい。touch-sp.hatenablog.com