目的
ディスクイメージのファイルがある。このファイルをマウントして中身を確認・変更したい。
loopデバイスを使ってmountできることは知っているけど、offsetを調べるとか面倒くさい。
方法
kpartx
コマンドを使用すると、面倒なoffsetの値をfdisk
コマンドなどで調べる必要がなくなる。
kpartxのインストール
kpartxは、Ubuntuではパッケージになっているのでapt
コマンドを使ってインストールします。
$ sudo apt install kpartd
ディスクイメージをマウント
まずディスクイメージの各パーティションをkpartx
コマンドを使ってloopデバイスに割り当てます。ここでは読み込み専用にしたいので-r
オプションを加えています。
$ sudo kpartx -avr disk.img
add map loop0p1 (252:6): 0 8396800 linear 7:0 2048
add map loop0p2 (252:7): 0 2 linear 7:0 8400894
add map loop0p5 (252:8): 0 8382464 linear 7:0 8400896
次に割り当てたloopデバイスを通して、目的のパーティションをマウントします。
$ sudo mount /dev/mapper/loop0p1 /mnt
mount: /dev/mapper/loop0p1 is write-protected, mounting read-only
$ ls /mnt/
bin home lib64 opt sbin tmp vmlinuz.old
boot initrd.img lost+found proc snap usr
dev initrd.img.old media root srv var
etc lib mnt run sys vmlinuz
アンマウント
使い終わったらアンマウントしておきます。
$ sudo umount /mnt
$ sudo kpartx -d disk.img
loop deleted : /dev/loop0
意外と忘れやすいのが、loopデバイスの後片付けです。アンマウントしたら、忘れずにkpartx -d
しておきます。