多くの場合でイメージファイルは単純な1パーティションのデータを持つものです。ですが、 Jetson Nano のイメージのように複数のパーティションから構成されるイメージファイルというものが存在します。HDD/SSD のイメージを dd コマンドで取得したときにも、このような状態になるでしょう。
ループバックマウントを使って、イメージ内のファイルを確認するということをやりたいわけですが、複数のパーティションを持つ場合には単純なマウントでは対応できません。今回はこの方法を紹介します。
1. イメージファイルをマウント
まずはイメージファイルをループバックマウントします。このときのコマンドは以下の通りです。
$ sudo losetup /dev/loop0 ~/my-sdcard-system.img
これで一旦 /dev/loop0 に対象のファイル内容がマウントされました。
しかしこの状態で、 mount -t ext4 /dev/loop0 /mnt としても中身を見ることは出来ません。
2. デバイスマップを作る
この状態で fdisk コマンドで確認をしてみます。以下のようなコマンドを実行してみると、各パーティションが含まれている&認識されていることは分かりました。
$ sudo fdisk -l /dev/loop0
(... 省略 ...)
Disklabel type: gpt
Disk identifier: 13F87FF9-A4F2-47E6-8CD7-5BD22D867EA9
Device Start End Sectors Size Type
/dev/loop0p1 28672 67950591 67921920 32.4G Linux filesystem
/dev/loop0p2 2048 2303 256 128K Linux filesystem
/dev/loop0p3 4096 4991 896 448K Linux filesystem
/dev/loop0p4 6144 7295 1152 576K Linux filesystem
/dev/loop0p5 8192 8319 128 64K Linux filesystem
/dev/loop0p6 10240 10623 384 192K Linux filesystem
/dev/loop0p7 12288 13055 768 384K Linux filesystem
/dev/loop0p8 14336 14463 128 64K Linux filesystem
/dev/loop0p9 16384 17279 896 448K Linux filesystem
/dev/loop0p10 18432 19327 896 448K Linux filesystem
/dev/loop0p11 20480 22015 1536 768K Linux filesystem
/dev/loop0p12 22528 22655 128 64K Linux filesystem
/dev/loop0p13 24576 24959 384 192K Linux filesystem
/dev/loop0p14 26624 26879 256 128K Linux filesystem
ここで、kpartx コマンドを使って、これらのパーティションを簡単にマウントできるようにします。以下のコマンドを実行します。
$ sudo kpartx -a /dev/loop0
このコマンドを実行すると、 /dev/mapper 以下に、各パーティションごとのデバイスが出現します。
$ ls -l /dev/mapper/loop0*
brw------- 1 root root 252, 0 Apr 21 18:06 /dev/mapper/loop0p1
brw------- 1 root root 252, 9 Apr 21 18:06 /dev/mapper/loop0p10
brw------- 1 root root 252, 10 Apr 21 18:06 /dev/mapper/loop0p11
brw------- 1 root root 252, 11 Apr 21 18:06 /dev/mapper/loop0p12
brw------- 1 root root 252, 12 Apr 21 18:06 /dev/mapper/loop0p13
brw------- 1 root root 252, 13 Apr 21 18:06 /dev/mapper/loop0p14
brw------- 1 root root 252, 1 Apr 21 18:06 /dev/mapper/loop0p2
brw------- 1 root root 252, 2 Apr 21 18:06 /dev/mapper/loop0p3
brw------- 1 root root 252, 3 Apr 21 18:06 /dev/mapper/loop0p4
brw------- 1 root root 252, 4 Apr 21 18:06 /dev/mapper/loop0p5
brw------- 1 root root 252, 5 Apr 21 18:06 /dev/mapper/loop0p6
brw------- 1 root root 252, 6 Apr 21 18:06 /dev/mapper/loop0p7
brw------- 1 root root 252, 7 Apr 21 18:06 /dev/mapper/loop0p8
brw------- 1 root root 252, 8 Apr 21 18:06 /dev/mapper/loop0p9
3. マウントする
デバイスマップされたものを用いて、マウントコマンドを実行します。パーティションの番号に注意して、マウントを行います。
$ sudo mount -t ext4 /dev/mapper/loop0p1 /mnt/disk
4. 後始末
使い終わったらマウントを解除していきます。
$ sudo kpartx -d /dev/loop0
$ sudo losetup -d /dev/loop0
まとめ
複数のパーティションがある場合、mount コマンドにオプションでオフセット情報を渡すことでもマウントが出来るようですが、 kpartx を用いると簡単にパーティションをマウントすることができました。知らないと戸惑うケースになりますが、知ってしまえば難しい話ではないと思います。
コメント