複数のパーティションが含まれたイメージをマウントする
パーティションのイメージをマウントするには、そのままマウントすれば出来ますけど。
sudo mount partionA.img /mnt ##通常のマウント
複数のパーティションを含むディスクイメージだと、そうも行かない
方法
losetup の場合、背うつ属しただけだと認識されないことがあるので kpartx -a
で反映させます。
パーティションが含まれるRAW disk imageの場合
takuya@atom:~$ fdisk -l my_disk.img Disk 2014-09-09-wheezy-raspbian.img: 3276 MB, 3276800000 bytes 255 heads, 63 sectors/track, 398 cylinders, total 6400000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00090806 Device Boot Start End Blocks Id System my_disk.img1 8192 122879 57344 c W95 FAT32 (LBA) my_disk.img2 122880 6399999 3138560 83 Linux
パーティションをファイル名として指定できない
#=>パーティション2をマウントしたいけど ・・・・ sudo mount my_disk.img2 /mnt
引数my_disk.img2がファイル名として解釈されて my_disk.img<N> のようなパーティション番号として解釈されない。
そこでパーティションを含むハードディスクのイメージをマウントするには、losetup をつかうか、offsetを使う方法をとります。個人的にはlosetup を使うほうが好きですね。
方法1 offsetを使う方法
offsetを指定すれば、mountコマンドでlosetup⇛mount が出来ます。
offsetをfdisk コマンドで確認
ディスクのoffsetをfdisk コマンドを使って確認
takuya@atom:~$ fdisk -l -u 2014-09-09-wheezy-raspbian.img Disk 2014-09-09-wheezy-raspbian.img: 3276 MB, 3276800000 bytes 255 heads, 63 sectors/track, 398 cylinders, total 6400000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00090806 Device Boot Start End Blocks Id System 2014-09-09-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA) 2014-09-09-wheezy-raspbian.img2 122880 6399999 3138560 83 Linux
offsetから、マウントコマンドを作成
sudo mount -o loop,offset=$((122880*512)) 2014-09-09-wheezy-raspbian.img /mnt
mount を確認
takuya@atom:~$ ls /media/img bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var
ちなみに loop デバイスを確認
takuya@atom:~$ sudo losetup -a /dev/loop0: [fe00]:58464759 (/home/takuya/2014-09-09-wheezy-raspbian.img), offset 62914560
チャント、loop が設定されていますね。
mount がloop を管理しています。
この方法の場合、パーティションの(スタートxセクタサイズ)を計算するのですが、セクタってなに、スタートセクタってなに??ってなりませんか?
いまどき、セクタ・シリンダ・ユニット単位とか気にしないじゃん・・・
方法2 loop デバイスを手動で設定する(オススメ)
先ほどのmountが管理していたloopを手作業で管理する場合です。
複数パーティションが含まれたディスクイメージを /dev/sda1 /dev/sda2 の用に数値で指定できるようにする。そのためのloopデバイスを手動管理するスタイル。
個人的にはこの方が楽だと思ってたりする。覚えやすいし、イメージしやすい。
通常の物理デバイスと使い方がほぼ同じ
これらをコマンドを使って1つずつ確認するから迷わないし、通常の物理ディスク接続の手順に近いので覚えやすい。
準備
いくつかの準備をします。
/etc/modprobe.d/loop.conf に以下を記述
options loop max_part=63 max_loop=8
#
modprobeで設定を反映する。
sudo rmmod loop sudo modprobe loop
これで準備完了
loop デバイスに登録
img ファイルを loopデバイスに割り当てる。
takuya@atom:~$ sudo losetup /dev/loop1 2014-09-09-wheezy-raspbian.img
loopデバイスに割り当てられたか確認
losetup -a で割り当て済みのデバイスを見ることが出来る
takuya@atom:~$ sudo losetup -a /dev/loop1: [fe00]:58464759 (/home/takuya/2014-09-09-wheezy-raspbian.img)
今回は /dev/loop1 に割り当てました。
デバイス指定を省略
デバイスの指定を明示したのは初めてやる人が、覚えるためで、
通常は次のコマンドで、パパっと接続します。
sudo losetup -f 2014-09-09-wheezy-raspbian.img
これで、USBフラッシュメモリを、差し込んだのとほぼ同じようになります。
パーティションの確認
loopデバイスをfdisk するとパーティションを見ることが出来ます。
takuya@atom:~$ ls /dev/loop0* /dev/loop0 /dev/loop0p1 /dev/loop0p2
これを使うことでハードディスクのイメージのパーティションを格段に触りやすくなると思う。
パーティションを番号で指定する。
takuya@atom:~$ sudo mount /dev/loop0p2 /media/img/
パーティションの番号で指定できるようになって、覚えること減った。
takuya@atom:~$ ls /media/img/ bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var
計算もいらないし、fdisk コマンドも使ってない。
方法3 kpartx
loop デバイスを作るの面倒なので、kpartx を使う方法でmapper を使って、デバイスを作る
準備
aptitude install kpartx
ループデバイスをマッピング
takuya@atom:~$ sudo kpartx -a
kpartx を使うと/dev/mapper に以下のような物ができる
takuya@atom:~$ ls /dev/mapper/ atom-root atom-swap_1 control loop0p1 loop0p2 takuya@atom:~$ ls /dev/mapper/loop0p1 /dev/mapper/loop0p1 takuya@atom:~$ ls /dev/mapper/loop0p2 /dev/mapper/loop0p2 takuya@atom:~$
後はコレをマウントする
sudo mount /dev/mapper/loop0p2 /media/img
作業が終わったらおかたづけ
takuya@atom:~$ sudo umount /dev/mapper/loop0p1 takuya@atom:~$ sudo kpartx -d /dev/loop0 takuya@atom:~$ sudo losetup -d /dev/loop0
やってることは同じなんですけどね。
ループデバイスを自動生成するか、手作業でループ指定するか、マッピングするか、この違いなんだけど、
いっぱいやり方あって困りますね。
今回は、紹介しませんでしたが、libvirt kvm での qemu-img やら、openstack が使ってる管理ツールnova cinder swift だとか、似たようなものや、ラッパーが作らていて。。。もう頭痛い
ぐぐってもこれらの方法を中途半端が混ざってたりしてて、スゴく迷った。
私も過去に、ごっちゃになっていました。
参考資料
http://takuya-1st.hatenablog.jp/entries/2012/10/10