複数パーティションを含むイメージをループバックマウントする方法

多くの場合でイメージファイルは単純な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
created by Rinker
トランセンドジャパン
¥1,890 (2022/08/11 05:44:31時点 Amazon調べ-詳細)

まとめ

複数のパーティションがある場合、mount コマンドにオプションでオフセット情報を渡すことでもマウントが出来るようですが、 kpartx を用いると簡単にパーティションをマウントすることができました。知らないと戸惑うケースになりますが、知ってしまえば難しい話ではないと思います。

関連記事

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください