2つのパーティションを含む外部USBフラッシュドライブがMy Raspberry Piに接続されています。dd
フラッシュドライブの最初のパーティションがイメージファイルの最初のパーティションと異なる場合は、この外部フラッシュドライブにイメージファイルを保存したいと思います。
これを達成するためにチェックサムを比較します。
フラッシュドライブパーティションのチェックサムを計算するのは簡単です。
md5sum /dev/sda1
ところで、イメージファイルに保存されている最初のパーティションのチェックサムを計算する方法は?
私はDebian 10オペレーティングシステムを使用しています。
答え1
losetup --partscan --find --show /path/to/disk.img
以下を使用して、イメージとそのパーティションに1つ以上のループデバイスを設定できます。/dev/loopN
はい
dd if=/dev/zero bs=1M count=100 >/tmp/100M.img pimg() { parted /tmp/100M.img --align optimal unit MiB "$@"; } pimg mklabel gpt pimg mkpart primary 2 50 pimg mkpart primary 51 100% pimg print Model: (file) Disk /tmp/100M.img: 100MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 2.00MiB 50.0MiB 48.0MiB primary 2 51.0MiB 100MiB 49.0MiB primary lo=$(losetup --partscan --find --show /tmp/100M.img); echo $lo /dev/loop0 ls ${lo}* /dev/loop0 /dev/loop0p1 /dev/loop0p2
2つのチェックサムを作成する代わりに(既存のターゲットとソースイメージを完全に読み取る必要があります)を使用してください
cmp
。これはバイト不一致が発生するとすぐに停止するため、チェックサムを生成するよりも効率的です。 (そうでない場合は最後まで読みますが、使用した選択肢よりも遅くはありませんmd5sum
。)cmp /dev/loop0p1 /path/to/existing_image
たとえば、ツールを引き続き使用する場合は、
md5sum
以前に作成したループデバイスを使用できます。md5sum /dev/loop0p1
使用しないでください
dd
- これ少なくとも使用速度は速いcat
または、よりpv
簡単な方法もあります(覚えておくべき退屈なオプションがなく、誤って入力するとデータが破損する可能性はありません)。pv /dev/loop0p1 >/path/to/existing_image
答え2
画像ファイルをブロックデバイスとしてマウントし、md5sum
質問に表示されたコマンドを使用できます。
以下に示すすべてのコマンドはroot
。
生ディスクイメージの場合
生ディスクイメージの場合は、次のものを使用できますlosetup
。
losetup -fP --show disk.img
これにより、ループデバイス(たとえば/dev/loop0
)が割り当てられ、イメージが接続され、パーティションがデバイスに公開されます/dev/loop0p1
。/dev/loop0p2
完了したら、losetup -d <device>
画像を切断します。
qcow2 イメージの場合
qcow2イメージの場合は、次のようなことができますqemu-nbd
。
nbd
カーネルモジュールをロードします。modprobe nbd
画像をnbdデバイスに接続します。このコマンドでは、これに接続します
/dev/nbd0
が、すでに使用している場合は、使用可能なnbdデバイスを指定できます(デフォルトでは16個)。qemu-nbd -f qcow2 -c /dev/nbd0 disk.qcow4
イメージパーティションは背中に表示されます
/dev/nbd0p1
。/dev/nbd0p2
完了したら、実行してqemu-nbd -d /dev/nbd0
画像を切断します。