それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

パーティションを含むディスクイメージをloopデバイスにマウントする。

ディスクイメージをマウントする

ただし、ディスクイメージにはパーティションが複数含まれる。

随分と前に、設定してたので、久しぶりにやろうとしてハマったので、改めて書き直し

簡単な方法

mount 時に offset を指定する。でも面倒くさいので、今回は loop0p1 みたいな指定を扱いたかったんですね。

loop デバイスを経由するパーティションを扱う場合

loopデバイスがさらに、パーティションを扱えるように、loop の設定を変える必要があった。

/etc/modprobe.d/loop.conf

modprobe の設定を以下のように追加した。

options loop max_part=63 max_loop=8

modprobe をする

sudo rmmod loop
sudo modprobe loop

losetup で loopデバイスを設定する。

dd したイメージをlosetup でつなぐ

cd 
sudo losetup -f out.img

結果を確認。

losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /home/takuya/out.img

パーティションを確認

これで、パーティションを見えるし扱えるようになる。

$ ls /dev/loop0*
/dev/loop0  /dev/loop0p1  /dev/loop0p2

もし見えないときは、明示的にパーティション認識のオプションを付けてあげる。

losetup -P  out.img

なぜか、明示的な- P が必要な時があって。これをつけないとパーティションを認識されないことがあるようです。違いがよくわかってない。

mkfs でファイルシステムを作ることも出来る。

$sudo mkfs.ext4 /dev/loop1p2
mke2fs 1.42.12 (29-Aug-2014)
/dev/loop1p2 contains a ext4 file system
    created on Fri Jul 15 13:45:18 2016
Proceed anyway? (y,n) y # テストなので強制上書き
Discarding device blocks: done
Creating filesystem with 91136 1k blocks and 22848 inodes
Filesystem UUID: 8df6ad88-747b-4744-b782-22098f3a5edd
Superblock backups stored on blocks:
    8193, 24577, 40961, 57345, 73729

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

マウントも出来る

sudo mount /dev/loop1p2 ./mnt

マウントできるので随分楽

パーティションを指定してマウントできる。パーティションを指定出来るようになるのでほんとうに便利。

もっと良いやり方ないのかな。

ハードディスクのバックアップのマウントは結構頻出の作業なので、最初からloopデバイスで扱えればいいんだけどmodprobe する以外にないのかなぁ。

2020-11-16

-P オプションに言及

関連資料

http://takuya-1st.hatenablog.jp/entry/2014/12/12/202139

参考資料

https://stackoverflow.com/questions/37227233/having-losetup-read-the-partition-table