2개의 파티션이 포함된 외부 USB 플래시 드라이브가 내 Raspberry Pi에 연결되어 있습니다. dd
플래시 드라이브의 첫 번째 파티션이 이미지 파일의 첫 번째 파티션과 다른 경우 이 외부 플래시 드라이브에 이미지 파일을 저장하고 싶습니다.
이를 달성하기 위해 체크섬을 비교할 것입니다.
플래시 드라이브 파티션의 체크섬을 계산하는 것은 쉽습니다.
md5sum /dev/sda1
그런데 이미지 파일에 저장된 첫 번째 파티션의 체크섬을 계산하는 방법은 무엇입니까?
저는 Debian 10 운영 체제를 사용합니다.
답변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
두 개의 체크섬을 생성하는 대신(기존 대상 및 소스 이미지를 완전히 읽어야 함) 을 사용하십시오
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
이미지 연결을 끊습니다.