Linuxのファイルシステムをマウント可能に
「Build 20211」で、物理ストレージ上にある「Linux」のファイルシステムをマウントできるようになりました。「Linux」のファイルシステムを「WSL 2」内にアタッチ及びマウントでき、「WSL 2」及び「Windows」からそのファイルシステムにアクセスできます。
簡潔に言えば「ext4」等でフォーマットされたファイルシステムを「WSL 2」や「Windows」からアクセスできます。
マウント操作は管理者権限が必要
ファイルシステムのマウント操作には、管理者権限が必要です。サポートしているファイルシステム
「Linux kernel」でネイティブにサポートされているファイルシステムのみマウント可能です。またデフォルトのファイルシステムは「ext4」です。
「ntfs-3g」のように別途ソフトウェアが必要なファイルシステムはマウントできません。
USBメモリーはサポートされていない
現時点ではUSBメモリー(USBフラッシュドライブ)はサポートされません。USBメモリーを「WSL 2」にアタッチしようとしても失敗します。
その一方でUSBディスクはサポートされています。
ディスク全体のみアタッチ可能
現時点ではディスク全体のみ「WSL 2」にアタッチ可能です。つまりパーティションのみを「WSL 2」にアタッチすることはできません。
マウントするファイルシステムの確認
まずマウントするファイルシステムを特定する必要があります。1.ストレージの確認
ここでは例として「Ubuntu」をインストールしたストレージをマウントしてみます。この「Ubuntu」は、「ext4」でフォーマットされたファイルシステム上にインストールされています。
「ディスクの管理」でストレージを見てみると、「Ubuntu」がインストールされたストレージ及びパーティションは、上記のように「ディスク 1 パーティション 2」となっており、2番目のストレージの2番目のパーティションであることが分かります。
2.デバイスIDの確認
マウントするストレージはデバイスIDで指定します。デバイスIDは、以下のコマンドで確認できます。
wmic diskdrive list brief
以下のようにPCに接続されているストレージの情報が一覧で表示されます。
Caption DeviceID Model Partitions Size
VMware, VMware Virtual S SCSI Disk Device \\.\PHYSICALDRIVE0 VMware, VMware Virtual S SCSI Disk Device 5 107372805120
VMware, VMware Virtual S SCSI Disk Device \\.\PHYSICALDRIVE1 VMware, VMware Virtual S SCSI Disk Device 2 107372805120
VMware, VMware Virtual S SCSI Disk Device \\.\PHYSICALDRIVE0 VMware, VMware Virtual S SCSI Disk Device 5 107372805120
VMware, VMware Virtual S SCSI Disk Device \\.\PHYSICALDRIVE1 VMware, VMware Virtual S SCSI Disk Device 2 107372805120
「DeviceID」列にある情報がストレージのデバイスIDです。
デバイスIDは「\\.\PHYSICALDRIVE」で始まるIDです。
今回の例では「\\.\PHYSICALDRIVE1」がマウントするストレージのデバイスIDになります。
ファイルシステムをマウントする
デバイスIDとパーティション番号を組み合わせてマウントするファイルシステムを指定します。ストレージがパーティションを持っていない場合、パーティションの指定は省略できます。
1.パーティションを指定してマウントする場合
今回の例のようにパーティションを指定してマウントする場合、パーティションテーブルの形式は「MBR」もしくは「GPT」のみがサポートされています。2.マウントの実行
以下のいずれかのコマンドを実行し、ファイルシステムをマウントします。
wsl --mount <DiskPath> --partition <PartitionNumber> --type <Filesystem>
wsl --mount <DiskPath> -p <PartitionNumber> -t <Filesystem>
「DiskPath」にストレージのデバイスIDを指定します。
「PartitionNumber」にパーティション番号を指定します。
「Filesystem」にマウントするファイルシステムの種類を指定します。
「Filesystem」を省略した場合は、「ext4」が指定されたものとして扱われます。
今回の例では
今回の例では「DiskPath」に「\\.\PHYSICALDRIVE1」を指定します。「PartitionNumber」に「2」を指定します。
ファイルシステムは「ext4」なので「Filesystem」の指定は省略します。
つまり以下のコマンドを実行します。
wsl --mount \\.\PHYSICALDRIVE1 --partition 2
特に問題なければ以下のようにメッセージが出力されます。
ディスク \\.\PHYSICALDRIVE1 は、名前「PHYSICALDRIVE1p2」で正常にマウントされました。マウントポイントは、自動マウント設定が指すパス ( 既定: / mnt / wsl) の下にあります。
ディスクをアンマウントしてデタッチするには、「wsl --unmount \\.\PHYSICALDRIVE1」を実行します。
ディスクをアンマウントしてデタッチするには、「wsl --unmount \\.\PHYSICALDRIVE1」を実行します。
3.Linuxからアクセスしてみる
早速Linuxディストリビューションを起動し、マウントされたファイルシステムにアクセスしてみます。今回の例でマウントポイントは、「/mnt/wsl/PHYSICALDRIVE1p2」になります。
上記のようにマウントされたファイルシステムにアクセスできます。
4.Windowsからアクセスしてみる
次に「Windows」の「エクスプローラー」からアクセスしてみます。上記のように「WSL 2」経由で「エクスプローラー」からアクセスできます。
マウントオプションを指定する場合
今回は使用しませんでしたがマウントオプションを指定する場合、以下のように「-o」とマウントオプションを追記します。
wsl --mount <DiskPath> -o <MountOptions>
例えば以下のように記述します。
wsl --mount \\.\PHYSICALDRIVE1 --partition 2 -o "data=ordered"
補足
現時点では、ファイルシステム固有のマウントオプションのみサポートされています。「ro」や「rw」、「noatime」といった一般的なオプションはサポートされていません。
アタッチとマウント
ファイルシステムのマウントには、ストレージのアタッチとファイルシステムのマウントの2段階の手続きがあります。上記の例ではストレージのアタッチとマウントを同時に実行しています。
ここではアタッチとマウントの状況を「Ubuntu 20.04 LTS」を例に見てみます。
アタッチ
アタッチはPCにストレージを接続するのと同様です。この逆がデタッチです。
カーネルリングバッファーにメッセージが出力される
アタッチ実行時にカーネルリングバッファーにメッセージが出力されます。今回の例では以下のようなメッセージが出力されます。
[ 1497.163353] scsi 0:0:0:2: Direct-Access VMware, VMware Virtual S 1.0 PQ: 0 ANSI: 2
[ 1497.166323] sd 0:0:0:2: Attached scsi generic sg2 type 0
[ 1497.170825] sd 0:0:0:2: [sdc] 209715200 512-byte logical blocks: (107 GB/100 GiB)
[ 1497.173273] sd 0:0:0:2: [sdc] Write Protect is off
[ 1497.173303] sd 0:0:0:2: [sdc] Mode Sense: 0f 00 00 00
[ 1497.175983] sd 0:0:0:2: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 1497.202527] sdc: sdc1 sdc2
[ 1497.210796] sd 0:0:0:2: [sdc] Attached SCSI disk
[ 1497.166323] sd 0:0:0:2: Attached scsi generic sg2 type 0
[ 1497.170825] sd 0:0:0:2: [sdc] 209715200 512-byte logical blocks: (107 GB/100 GiB)
[ 1497.173273] sd 0:0:0:2: [sdc] Write Protect is off
[ 1497.173303] sd 0:0:0:2: [sdc] Mode Sense: 0f 00 00 00
[ 1497.175983] sd 0:0:0:2: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 1497.202527] sdc: sdc1 sdc2
[ 1497.210796] sd 0:0:0:2: [sdc] Attached SCSI disk
アタッチしたストレージは「sdc」であることが分かります。
アタッチするとデバイスファイルが生成される
ストレージをアタッチすると、ブロックデバイスが生成されます。つまり今回の例では、以下のデバイスファイルが生成されます。
- /dev/sdc
- /dev/sdc1
- /dev/sdc2
「/dev」を見ると以下のようになっており、デバイスファイルが生成されていることが分かります。
$ ls sdc*
sdc sdc1 sdc2
sdc sdc1 sdc2
デバイスファイルが存在するということは、Linuxの手続きに沿って自分でマウントすることも可能です。
利用可能なブロックデバイスを調べるには
Linuxディストリビューション上で以下のコマンドを実行すれば、利用可能なブロックデバイスの一覧を表示できます。
lsblk
今回の例では以下のように表示されます。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 256G 0 disk
sdb 8:16 0 256G 0 disk /
sdc 8:32 0 100G 0 disk
├─sdc1 8:33 0 121M 0 part
└─sdc2 8:34 0 99.9G 0 part /mnt/wsl/PHYSICALDRIVE1p2
sda 8:0 0 256G 0 disk
sdb 8:16 0 256G 0 disk /
sdc 8:32 0 100G 0 disk
├─sdc1 8:33 0 121M 0 part
└─sdc2 8:34 0 99.9G 0 part /mnt/wsl/PHYSICALDRIVE1p2
マウントせずアタッチのみ行う
マウントせずアタッチのみ行う場合は、「wsl --mount」に「--bare」オプションを追加します。サポートされていないストレージ構造
サポートされていないストレージ構造を利用する場合、マウントはできませんがアタッチは可能です。ファイルシステムをマウントせずにストレージのアタッチのみ行う場合は、「--bare」オプションを指定します。
wsl --mount <DiskPath> --bare
例えば以下のように記述します。
wsl --mount \\.\PHYSICALDRIVE1 --bare
ファイルシステムをアンマウントするには
マウントしたファイルシステムをアンマウント(デタッチ)する方法です。ファイルシステムのアンマウント
マウントしたファイルシステムをアンマウントするには、以下のコマンドを実行します。
wsl --unmount <DiskPath>
「DiskPath」にアンマウントするデバイスIDを指定します。
今回の例では、以下のコマンドを実行します。
wsl --unmount \\.\PHYSICALDRIVE1
補足
Linuxディストリビューションがマウントしたファイルシステムを使用していると、ファイルシステムはアンマウントできません。すべてのファイルシステムをアンマウントするには
すべてのファイルシステムをまとめてアンマウントするには、以下のコマンドを実行します。
wsl --unmount
すべてのファイルシステムを強制的にアンマウントするには
以下のコマンドを実行すれば、「WSL 2」の終了とマウントしたファイルシステムのアンマウントが可能です。
wsl --shutdown