Windowsマシンのext4なSSDをWSL2でmountする

これが一番やっかいでした。

ext4なSSDはWindowsシステムでは見ることができず、なんらからのアプリを入れて見れるようにするのが一般的です。

本環境ではWSL2から見えればいいのでWindowsシステム上では無視してかまいません。

管理者権限で実行されたPowerShell上から次のコマンドを実行してWSL2上にFile Systemを認識させます。

$drive = GET-CimInstance -query "SELECT * from Win32_DiskDrive" | Select-String -Pattern "Force MP600" | ForEach-Object { $($_ -split'"')[1] };wsl --mount $drive --bare

これは何をやっているかというと、GET-CimInstance -query "SELECT * from Win32_DiskDriveでWindowsシステムで見えているドライブの一覧を表示しています。

たとえば、実行してみるとこんな感じで表示されます。

PS C:\WINDOWS\system32> GET-CimInstance -query "SELECT * from Win32_DiskDrive"

DeviceID           Caption          Partitions Size          Model
--------           -------          ---------- ----          -----
\\.\PHYSICALDRIVE0 CSSD-M2B2TPG3VNF 3          2000396321280 CSSD-M2B2TPG3VNF
\\.\PHYSICALDRIVE1 Force MP600      1          2000396321280 Force MP600

私の環境でext4なSSDはForce MP600でこれをSelect-String -Pattern "Force MP600"で選択しています。

つづけて実行するとこんな感じで表示されます。

PS C:\WINDOWS\system32>  GET-CimInstance -query "SELECT * from Win32_DiskDrive" | Select-String -Pattern "Force MP600"

Win32_DiskDrive: Force MP600 (DeviceID = "\\.\PHYSICALDRIVE1")

最後にForEach-Object { $($_ -split'"')[1] }\\.\PHYSICALDRIVE1を抽出しています。

それを$driveに格納してwsl --mount $drive --bareを実行しています。

これでWSL2にext4なSSDを認識させることができます。

認識するとつぎのように/sdv/sdc1が追加されます。

hidemi@nereid:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 339.8M  1 disk
sdb      8:16   0   256G  0 disk /
sdc      8:32   0   1.8T  0 disk
└─sdc1   8:33   0   1.8T  0 part /disk2

あとはmount /dev/sdc1 /diskとかしてmountするだけです。

WSL2のストレージはWIndowsシステムからつぎのように見えるのでWindowsシステム上でmountしなくても問題ありません。

PS C:\WINDOWS\system32> ls \\wsl.localhost\Ubuntu-20.04

    ディレクトリ: \\wsl.localhost\Ubuntu-20.04

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2021/11/03     15:06                home
d-----        2021/08/20      6:40                srv
d-----        2021/11/25      8:52                work
d-----        2022/01/09      8:53                etc
d-----        2022/01/09     19:41                opt
d-----        2022/01/05     23:07                root
d-----        2021/12/30     12:00                mnt
d-----        2021/08/20      6:42                usr
d-----        2021/08/20      6:40                media
d-----        2022/01/09      8:53                sys
d-----        2022/01/09      8:53                dev
d-----        2021/08/20      6:52                boot
d-----        2022/01/09     11:36                run
d-----        2022/01/09      8:53                proc
d-----        2022/01/09     17:20                disk2
d-----        2022/01/09      0:02                snap
d-----        2022/01/09     20:30                tmp
d-----        2022/01/05     21:06                disk
d-----        2022/01/01     22:21                var
d-----        2019/04/11      1:35                lost+found
-----l        2021/08/20      6:39              7 lib
-----l        2021/08/20      6:39              9 lib64
-----l        2021/08/20      6:39              8 sbin
-----l        2021/08/20      6:39              7 bin
-----l        2021/08/20      6:39              9 lib32
-----l        2021/08/20      6:39             10 libx32
------        2021/10/05     20:50        1392928 init

つまり、WSL2でmountしたext4のSSDはこのディレクトリをたどればアクセスすることができます。

write: 2022/01/15/ 00:00:00