이미지 파일 내 파티션의 체크섬 계산

이미지 파일 내 파티션의 체크섬 계산

2개의 파티션이 포함된 외부 USB 플래시 드라이브가 내 Raspberry Pi에 연결되어 있습니다. dd플래시 드라이브의 첫 번째 파티션이 이미지 파일의 첫 번째 파티션과 다른 경우 이 외부 플래시 드라이브에 이미지 파일을 저장하고 싶습니다.

이를 달성하기 위해 체크섬을 비교할 것입니다.

플래시 드라이브 파티션의 체크섬을 계산하는 것은 쉽습니다. md5sum /dev/sda1

그런데 이미지 파일에 저장된 첫 번째 파티션의 체크섬을 계산하는 방법은 무엇입니까?

저는 Debian 10 운영 체제를 사용합니다.

답변1

  1. losetup --partscan --find --show /path/to/disk.img다음을 사용하여 이미지와 해당 파티션에 대해 하나 이상의 루프 장치를 설정할 수 있습니다./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
    
  3. 사용하지 마세요 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이미지 연결을 끊습니다.

관련 정보