stylesheet

2022-04-20

WSL2でデュアルブートのLinuxパーディションをマウントしてWindowsからアクセス

Windows11ビルド22000のWSL2から外部ストレージのマウントが可能となった。
これは物理ディスク上のext4パーティションも含まれるので、この機能でLinuxパーティションをマウントしてやるとWSL2経由ながらもWindowsからLinuxパーティションを読み書きできるようになる。

パーティションのマウントは以下のコマンドで行う。

wsl --mount <DiskPath> --partition <PartitionNumber> --type <Filesystem>

以下、必要なオプションの調べ方について解説を行う。

DiskPath

Windowsが認識するディスクのパス。\\.\PHYSICALDRIVE*の形式。
一覧を表示するには以下のコマンドを実行する。

Get-CimInstance -query "select * from Win32_DiskDrive"

DeviceID           Caption                     Partitions Size          Model
--------           -------                     ---------- ----          -----
\\.\PHYSICALDRIVE0 SAMSUNG MZ7TE256HMHP-000L7  4          256052966400  SAMSUNG MZ7TE256HMHP-000L7
\\.\PHYSICALDRIVE1 TCSUNBOW N4 240GB           2          256052966400  TCSUNBOW N4 240GB
\\.\PHYSICALDRIVE2 I-O DATA HDCZ-UT USB Device 1          3000590369280 I-O DATA HDCZ-UT USB Device

今回のケースでは、TCSUNBOW N4 240GB\\.\PHYSICALDRIVE1となる。

PartitionNumber

こちらはLinux側が認識するパーティション番号。
不明な場合は一旦ディスクをアタッチしてWSL内で調べる。--bareはマウントせずにアタッチのみ行うオプション。

sudo wsl --mount \\.\PHYSICALDRIVE1 --bare

一旦マウントすればWSL内でディスク情報を参照できる。

lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   256G  0 disk
sdb      8:16   0 339.8M  1 disk
sdc      8:32   0   256G  0 disk /
sdd      8:48   0 238.5G  0 disk
├─sdd1   8:49   0   512M  0 part
└─sdd2   8:50   0   238G  0 part

ターゲットは/dev/sdd2と認識されているので、パーティション番号は2だと判明。

FileSystem

ファイルシステムもWSL内で調べることができる。通常はext4なので省略可能。

sudo blkid

/dev/sda: UUID="3255683f-53a2-4fdf-91cf-b4c1041e2a62" TYPE="ext4"
/dev/sdb: TYPE="ext4"
/dev/sdc: UUID="3255683f-53a2-4fdf-91cf-b4c1041e2a62" TYPE="ext4"
/dev/sdd1: UUID="8601-AE73" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="f99957fe-c58c-4a67-ad7c-441cc3ca77ff"
/dev/sdd2: UUID="9a702a75-3c18-4355-8b87-6ac083f01d17" TYPE="ext4" PARTUUID="106b41ac-a008-41d9-8325-28d60ddc5302"

ターゲットデバイスの/dev/sdd2のファイルシステムはext4だ。

パーティションをマウント

必要なオプションが特定できた。
ファイルシステムは既定のext4なので省略して、次のコマンドでマウントする。

wsl --mount \\.\PHYSICALDRIVE1 --partition 2

ディスク \\.\PHYSICALDRIVE1 は、名前 'PHYSICALDRIVE1p2' で正常にマウントされました。マウントポイントは、自動マウント設定が指すパス (既定: /mnt/wsl) の下にあります。
ディスクをアンマウントしてデタッチするには、'wsl --unmount \\.\PHYSICALDRIVE1' を実行します。

WSL内では/mnt/wsl/PHYSICALDRIVE1p2から、Windowsからは\\wsl.localhost\Ubuntu-20.04\mnt\wsl\PHYSICALDRIVE1p2からアクセスできる。

パーティションをアンマウント

wslをシャットダウンすれば、アンマウントされるので、あまり明示的に行うことはないだろうが、アンマウントは次のコマンドで行える。

wsl --unmount \\.\PHYSICALDRIVE1

参照:Linux ディスクを WSL 2 にマウントする