LVMで管理されたext4ファイルシステムを持つHDDをWSL上にマウントして読み書きする

手持ちのLinuxで使っていたHDDがあり、中にあるファイルを読みたくなった。 USBでHDDを接続することはできるけど、LVMの上にext4が乗っている感じなので、Windowsからは当然読めない。適当なLinuxイメージを焼いてブートするのもめんどくさい。

今ならWSLからいけるのでは?と思いながら調べてたら、できたのでメモ。

こちらの記事をみて、ディスクイメージからLVMのボリュームグループを識別して、マウントできるらしいことを知った。

qiita.com

これのブロックデバイス版をやればよいわけだ。

前提

WSL 2 でUbuntu 22.04を使っている

WSLにデバイスをマウントする

まずWindows機にUSBで接続されたディスクをWSL上に認識させる必要がある。

このHDDはブート用のパーティション(だったはず)とメインのパーティションで2つ区切られている。

この状態になっていれば後は次の手順でマウントまで行ける。

learn.microsoft.com

PowerShellGET-CimInstance -query "SELECT * from Win32_DiskDrive" を実行し、得られたDeviceIDを使ってwsl --mount する。

今回は次のコマンドでマウントした。パーティションが切られているので --bare をつけた。

wsl --mount \\.\PHYSICALDRIVE3 --bare

成功したらあとはWSLにアクセスして、マウントされたデバイスを見つけて、fdisk等で確認する(WSLのUbuntuイメージには入っていないので apt install fdisk とかやって入れておく)

$ sudo fdisk -l /dev/sdc
Disk /dev/sdc: 298.09 GiB, 320072933376 bytes, 625142448 sectors
Disk model: 225
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: dos
Disk identifier: 0x0007b244

Device     Boot   Start       End   Sectors   Size Id Type
/dev/sdc1  *       2048   1026047   1024000   500M 83 Linux
/dev/sdc2       1026048 625141759 624115712 297.6G 8e Linux LVM

/dev/sdc2 がLinux LVMとあるので、これが目的のデバイスである。

LVMとして認識させる

LVM関連のコマンドを導入する

apt install lvm2

lvm関連のコマンドが使えるようになるので色々やる。

# VGをスキャンし、/devのLVMのスペシャルファイルに反映する(新規があれば作ったり不要であれば削除)
vgscan --mknodes

# VGを確認
vgdisplay

# VGをアクティブにする(VolGroup=vgdisplayで確認したVG Name)
vgchange -a y VolGroup

# 認識された論理ボリュームを確認
sudo lvscan
$ sudo lvscan
  ACTIVE            '/dev/VolGroup/lv_root' [50.00 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_home' [<239.82 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_swap' [7.78 GiB] inherit

/dev/VolGroup/lv_root がお目当てのブロックデバイス

論理ボリュームをマウント

あとはマウントするだけ。

mkdir /mnt-test
mount /dev/VolGroup/lv_root /mnt-test
ls -l /mnt-test

実行結果

$ ls -l /mnt-test
total 112
dr-xr-xr-x.  2 root root  4096 Jul 27 07:29 bin
drwxr-xr-x.  2 root root  4096 Oct 13  2016 boot
drwxr-xr-x.  2 root root  4096 Oct 13  2016 dev
drwxr-xr-x. 76 root root  4096 Jul 28 01:52 etc
drwxr-xr-x.  2 root root  4096 Oct 13  2016 home
dr-xr-xr-x.  8 root root  4096 Jul 18 22:07 lib
dr-xr-xr-x.  9 root root 12288 Jul 27 07:54 lib64
drwx------.  2 root root 16384 Oct 13  2016 lost+found
drwxr-xr-x.  2 root root  4096 Sep 23  2011 media
drwxr-xr-x.  3 root root  4096 Jul 10  2022 mnt
drwxrwxrwx.  2 root root  4096 Oct 13  2016 nas1
drwxr-xr-x.  6 root root  4096 Jul 27 08:11 opt
drwxr-xr-x.  2 root root  4096 Oct 13  2016 proc
dr-xr-x---.  9 root root  4096 Jul 27 07:17 root
dr-xr-xr-x.  2 root root 12288 Jul 19 05:30 sbin
drwxr-xr-x.  2 root root  4096 Oct 13  2016 selinux
drwxr-xr-x.  2 root root  4096 Sep 23  2011 srv
drwxr-xr-x.  2 root root  4096 Oct 13  2016 sys
drwxrwxrwt. 15 root root  4096 Jul 28 01:52 tmp
drwxr-xr-x. 14 root root  4096 Jul 19 05:33 usr
drwxr-xr-x. 19 root root  4096 Jul 19 05:33 var

よかったですね。