dd
を使用して、Raspberry Pi SDカードの画像を作成しました。
Sudo dd if=/dev/sdf of=/home/myusername/raspberry-backup-2014-04-10.img
SDカードには2つのパーティション(1つはvfat、1つはext4)が含まれており、カードを接続すると自動的にマウントされます。
私の質問:。imgファイルからこれらのパーティションをマウントするにはどうすればよいですか?
詳細:
$ fdisk -l raspberry-backup-2014-04-10.img
Disk raspberry-backup-2014-04-10.img: 3974 MB, 3974103040 bytes
255 heads, 63 sectors/track, 483 cylinders, total 7761920 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: 0x000981cb
Device Boot Start End Blocks Id System
raspberry-backup-2014-04-10.img1 8192 122879 57344 c W95 FAT32 (LBA)
raspberry-backup-2014-04-10.img2 122880 7761919 3819520 83 Linux
いくつかの追加テストの後、私は自分で解決策を見つけました:kpartx
Sudo kpartx -a raspberry-backup-2014-04-10.img
このコマンドは、/dev/mapper/loop0p1
および/dev/mapper/loop0p2
を作成しました。その後、これらのパーティションを簡単にマウントできます。
Sudo mount -o rw -t ext4 /dev/mapper/loop0p2 mount_target/
パーティションごとに個別のイメージを作成したり、kpartx
などのユーティリティをインストールしたりする必要を避けるために、offset
コマンドでmount
を指定して、各パーティションを個別にマウントできます。
最初にイメージファイルのパーティションを調べ、fdisk
を使用してオフセットを決定します。
$ fdisk -u -l rpi_image280914
Disk rpi_image280914: 16.0 GB, 16012804096 bytes
255 heads, 63 sectors/track, 1946 cylinders, total 31275008 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: 0x000cdac7
Device Boot Start End Blocks Id System
rpi_image280914p1 * 2048 514047 256000 c W95 FAT32 (LBA)
rpi_image280914p2 540672 31242239 15350784 83 Linux
必要なパーティションのStart
セクターを取得し、その値にUnits
サイズを掛けます。したがって、2番目のパーティションが必要な場合は、540672 * 512 = 276824064
を取得します。
次に、フォルダーを作成してパーティションをマウントします。
mkdir rpi_partition2
Sudo mount -o loop,offset=276824064 rpi_image280914 rpi_partition2/
パーティションデータを使用して必要な処理を完了したら、次の手順を実行します。
Sudo umount rpi_partition2/
rm -r rpi_partition2/
目的がパーティション(ファイルシステム)の内容を探索または変更することである場合、このコマンドラインはsdカードダンプのファイルシステムをマウントしますmy_sdcard_dump.imgディレクトリにmount_dir。
part_id=2; INFILE=my_sdcard_dump.img; MOUNTPT=mount_dir PARTITION=${part_id}; Sudo mount "$INFILE" "$MOUNTPT" -o loop,offset=$[ `/sbin/sfdisk -d "$INFILE" | grep "start=" | head -n $PARTITION | tail -n1 | sed 's/.*start=[ ]*//' | sed 's/,.*//'` * 512 ]
複数のパーティションを持つディスク全体のイメージを処理するのは かなり難しい です。 Linuxは、ループバックデバイスに接続されている場合でも、通常のファイルからパーティションテーブルを読み取るように設計されていないため、パーティションのオフセットを慎重に識別し、mount
コマンドに渡す必要があります。
望ましい方法は、各パーティションの個別のイメージを作成することです。
Sudo dd if=/dev/sdf1 of=/home/myusername/raspberry-backup-sdf1-2014-04-10.img
Sudo dd if=/dev/sdf2 of=/home/myusername/raspberry-backup-sdf2-2014-04-10.img
loop device にマッピングすることにより、これらのファイルをディスク上の個々のパーティションとして簡単に処理し、通常のディスクパーティションと同様にマウントできます。ループデバイス、またはループバックデバイスは、ファイルをブロックデバイス(ディスクやパーティションなど)として扱うためのLinuxの変換レイヤーを提供する仮想デバイスです。
ループデバイスは通常、/dev/loop0
〜/dev/loop8
です。 losetup
コマンドを使用して、未使用のループデバイスを特定します。
$ Sudo losetup /dev/loop0
loop: can't get info on device /dev/loop0: No such device or address
この応答は、割り当てられていないループデバイスを示します。これで、ループデバイスを画像ファイルの1つに割り当てることができます。
$ Sudo losetup /dev/loop0 /home/myusername/raspberry-backup-sdf1-2014-04-10.img
このコマンドからの出力がない場合、成功を示します。 /dev/loop0
は、ほとんどの場合、SDカードの/dev/sdf1
と機能的に同等であり、通常どおりマウントできます。
Sudo mount -t vfat /dev/loop0 /media/sdimage-1
別のループデバイスを使用してプロセスを繰り返し、他のパーティションをマウントします。完了したら、ファイルシステムをアンマウントし、ループデバイスの割り当てを解除します。
Sudo umount /dev/loop0
Sudo losetup -d /dev/loop0