ディスクイメージをマウントする
ただし、ディスクイメージにはパーティションが複数含まれる。
随分と前に、設定してたので、久しぶりにやろうとしてハマったので、改めて書き直し
簡単な方法
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