kpartx -a xxx で追加したデバイスのソースイメージを探す
kpartx -a *.img
でイメージファイルの各パーティションをアタッチした時に、デファイスファイルのどれがどれに対応しているか調べた。環境はUbuntu 20.04。
ためしに kpartx -a
してみる。
### ディスクを作る $ dd if=/dev/zero of=/tmp/test.img bs=1 count=0 seek=1G ### 適当にパーティションを作る $ sgdisk -a1 -n1:34:2047 -t1:EF02 -n2:2048:+256M -t2:EF00 -n3:0:0:+100% -t3:8300 /tmp/test.img $ sudo sgdisk -p /tmp/test.img Disk /tmp/test.img: 2097152 sectors, 1024.0 MiB Sector size (logical): 512 bytes Disk identifier (GUID): BAC9F0D5-63A5-411B-9F48-E06CBB18E58B Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 2097118 Partitions will be aligned on 2-sector boundaries Total free space is 0 sectors (0 bytes) Number Start (sector) End (sector) Size Code Name 1 34 2047 1007.0 KiB EF02 2 2048 526335 256.0 MiB EF00 3 526336 2097118 767.0 MiB 8300 $ sudo kpartx -av /tmp/test.img add map loop0p1 (253:0): 0 2014 linear 7:0 34 add map loop0p2 (253:1): 0 524288 linear 7:0 2048 add map loop0p3 (253:2): 0 1570783 linear 7:0 526336 $ ll /dev/mapper/ total 0 drwxr-xr-x 2 root root 120 Jul 22 17:28 ./ drwxr-xr-x 16 root root 4200 Jul 22 17:28 ../ crw------- 1 root root 10, 236 Apr 23 14:53 control lrwxrwxrwx 1 root root 7 Jul 22 17:28 loop0p1 -> ../dm-0 lrwxrwxrwx 1 root root 7 Jul 22 17:28 loop0p2 -> ../dm-1 lrwxrwxrwx 1 root root 7 Jul 22 17:28 loop0p3 -> ../dm-2
名前からして /dev/mapper/loop0p{1..3}
の親は /dev/loop0
であると推測できるが、一応確認してみる。
kpartx
で接続された各パーティションは、device mapper によってマップされている。マッピングの様子は、たとえば dmsetup ls --tree
で表示できる。
$ sudo dmsetup ls --tree loop0p3 (253:2) └─ (7:0) loop0p2 (253:1) └─ (7:0) loop0p1 (253:0) └─ (7:0)
253:x や 7:0 はデバイスナンバーといい、major:minor の組で表わされる。 dev 下にあるデバイスファイルを ls -l
で表示すると、オーナー/グループと日付の間に major, minor の形で表示される。たとえば dmsetup ls --tree
の結果の loop0p3 を見ると、loop0p3 (dm-2) 自体は 253:2
で、親は 7:0
であるという。これは下の ls -l の結果と照合できる。
$ ls -l /dev/loop* /dev/mapper/* /dev/dm-* brw-rw---- 1 root disk 253, 0 Jul 22 17:28 /dev/dm-0 brw-rw---- 1 root disk 253, 1 Jul 22 17:28 /dev/dm-1 brw-rw---- 1 root disk 253, 2 Jul 22 17:28 /dev/dm-2 crw-rw---- 1 root disk 10, 237 Jul 22 06:10 /dev/loop-control brw-rw---- 1 root disk 7, 0 Jul 22 17:28 /dev/loop0 brw-rw---- 1 root disk 7, 1 Jul 22 07:57 /dev/loop1 brw-rw---- 1 root disk 7, 10 Jul 20 15:34 /dev/loop10 brw-rw---- 1 root disk 7, 11 Jul 21 06:45 /dev/loop11 brw-rw---- 1 root disk 7, 2 Jul 22 07:57 /dev/loop2 brw-rw---- 1 root disk 7, 3 Jul 22 07:56 /dev/loop3 brw-rw---- 1 root disk 7, 4 May 17 16:33 /dev/loop4 brw-rw---- 1 root disk 7, 5 Jun 21 20:28 /dev/loop5 brw-rw---- 1 root disk 7, 6 May 6 09:28 /dev/loop6 brw-rw---- 1 root disk 7, 7 Jun 14 15:28 /dev/loop7 brw-rw---- 1 root disk 7, 8 Jun 29 23:38 /dev/loop8 brw-rw---- 1 root disk 7, 9 Jul 22 07:57 /dev/loop9 crw------- 1 root root 10, 236 Apr 23 14:53 /dev/mapper/control lrwxrwxrwx 1 root root 7 Jul 22 17:28 /dev/mapper/loop0p1 -> ../dm-0 lrwxrwxrwx 1 root root 7 Jul 22 17:28 /dev/mapper/loop0p2 -> ../dm-1 lrwxrwxrwx 1 root root 7 Jul 22 17:28 /dev/mapper/loop0p3 -> ../dm-2
ループデバイスにアタッチされているものは、losetup --list
コマンドで確認できる。
$ losetup --list /dev/loop0 NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop0 0 0 0 0 /tmp/test.img 0 512
まとめると、今回の例では、 /tmp/test.img
は /dev/loop0 (7:0)
にアタッチされており、その中のパーティションが /dev/mapper/loop0p{1..3}
にアタッチされている事がわかる。
kpartx -a
でアタッチしたパーティションは kpartx -d
でデタッチできる
$ sudo kpartx -dv /tmp/test.img del devmap : loop0p3 del devmap : loop0p2 del devmap : loop0p1 loop deleted : /dev/loop0
万が一、kpartx -a
を何度もしたりアタッチしたファイルが何だったか忘れたなどの場合には、dmsetup
, losetup
を使って状況を確認、個別に削除できる。
補足
デバイスのmajor番号は、/proc/device
に一覧になっている。又、デバイス種ごとに番号は重複してもよいらしい。
$ egrep '^([A-C]| *[7] )' /proc/devices Character devices: 7 vcs Block devices: 7 loop
参考URL
- デバイスのmajor, minor numberについて https://www.ibm.com/docs/en/linux-on-systems?topic=hdaa-names-nodes-numbers
- Device mapperのわかりやすい解説 http://lc.linux.or.jp/lc2009/slide/T-02-slide.pdf