イメージファイル内のパーティションのチェックサムの計算

イメージファイル内のパーティションのチェックサムの計算

2つのパーティションを含む外部USBフラッシュドライブがMy Raspberry Piに接続されています。ddフラッシュドライブの最初のパーティションがイメージファイルの最初のパーティションと異なる場合は、この外部フラッシュドライブにイメージファイルを保存したいと思います。

これを達成するためにチェックサムを比較します。

フラッシュドライブパーティションのチェックサムを計算するのは簡単です。 md5sum /dev/sda1

ところで、イメージファイルに保存されている最初のパーティションのチェックサムを計算する方法は?

私はDebian 10オペレーティングシステムを使用しています。

ベストアンサー1

  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. 2つのチェックサムを作成する代わりに(既存のターゲットとソースイメージを完全に読み取る必要があります)を使用してくださいcmp。これはバイト不一致が発生するとすぐに停止するため、チェックサムを生成するよりも効率的です。 (そうでない場合は最後まで読みますが、使用した選択肢よりも遅くはありませんmd5sum。)

    cmp /dev/loop0p1 /path/to/existing_image
    

    たとえば、ツールを引き続き使用する場合は、md5sum以前に作成したループデバイスを使用できます。

    md5sum /dev/loop0p1
    
  3. 使用しないでくださいdd- これ少なくとも使用速度は速いcatまたは、よりpv簡単な方法もあります(覚えておくべき退屈なオプションがなく、誤って入力するとデータが破損する可能性はありません)。

    pv /dev/loop0p1 >/path/to/existing_image
    

おすすめ記事