이 도구를 통해 8GB SD 카드에 쓰고 있는 약 1GB의 이미지가 있습니다 dd
. 다시 읽고 해당 해시를 원래 해시와 비교하여 손상 없이 작성되었는지 확인하고 싶습니다.
dd
분명히 결과 이미지의 크기로 다시 읽으면 내 SD 카드의 크기와 일치하므로 해시를 확인하는 것이 쓸모가 없습니다.
나는 어떻게든 출력을 해석해야 한다고 생각합니다.글쓰기올바르게 읽으려면 구성 skip
/ 매개변수를 호출하세요 .count
이미지를 작성하는 데 사용하는 명령은 다음과 같습니다.
> sudo dd if=my.img of=/dev/sdc bs=1M
8+50581 records in
8+50581 records out
3947888640 bytes (3.9 GB) copied, 108.701 s, 36.3 MB/s
이미지를 읽는 데 사용하는 명령은 다음과 같습니다.
> sudo dd if=/dev/sdc of=same_as_my.img
15523840+0 records in
15523840+0 records out
7948206080 bytes (7.9 GB) copied, 285.175 s, 27.9 MB/s
답변1
\ls -l my.img
예를 들어 (아니요 ls -lh
, 대략적인 크기를 제공하고 \ls
와 같은 별칭을 방지함 ls='ls -h'
) 또는 를 사용하여 이미지의 크기를 결정합니다 stat -c %s my.img
.
원본과 복사본을 한 번만 확인하려면 파일을 비교하면 됩니다. 해시를 사용하면 일회성 비교에는 쓸모가 없으며 작업 속도가 느려지고 더 많은 명령이 필요합니다. 주문하다cmp
바이너리 파일을 비교해보세요. 이미지 파일과 SD 카드의 해당 부분을 전달해야 합니다. 사용head
SD 카드의 시작 부분을 추출하십시오.
</dev/sdc head -c "$(stat -c %s my.img)" | cmp - my.img
해시는 해시를 계산하기 위해 각 인스턴스를 한 번만 읽어야 하기 때문에 다중 비교를 수행하려는 경우 유용합니다. 데이터 손상이 걱정되므로 어떤 해시든 가능합니다. 보안상의 이유로 파일이 수정되지 않았는지 확인해야 하는 경우 cksum
및가 적합하지 않으므로 대신 또는를 md5sum
사용해야 합니다 .sha256sum
sha512sum
md5sum <my.img >my.img.md5sum
</dev/sdc head -c "$(stat -c %s my.img)" | md5sum >sd-copy.md5sum
cmp my.img.md5sum sd-copy.md5sum
첫 번째 명령의 입력 리디렉션에 유의하세요. 이렇게 하면 체크섬 파일에 파일 이름이 포함되지 않으므로 체크섬 파일을 비교할 수 있습니다. 체크섬 파일과 확인할 복사본이 있는 경우 직접 사용할 수 있습니다.
</dev/sdc head -c "$(stat -c %s my.img)" | md5sum -c my.img.md5sum
아, 그리고사용하지 마세요dd
, 이는 느리고(또는 기껏해야 빠르지는 않지만) 복제 오류를 감지하지 않습니다.
답변2
우리가 하는 일은 md5um
실제 파티셔닝입니다. 디스크를 사용하여 이미지를 체크섬하는 것을 정확하게 허용하지는 않지만, 디스크가 몇 개 있는 경우(우리처럼) "올바른" 체크섬을 설정할 수 있습니다.
예를 들어, 우리의 경우 파티션은 다음과 같습니다.
$ sudo fdisk -l /dev/sdc
Disk /dev/sdc: 7948 MB, 7948206080 bytes
245 heads, 62 sectors/track, 1021 cylinders, total 15523840 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
Device Boot Start End Blocks Id System
/dev/sdc1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/sdc2 122880 7710719 3793920 83 Linux
그런 다음 간단히 파티션에 해시를 생성할 수 있습니다.
$ sudo md5sum /dev/sdc2
그러나 이는 다음을 가정합니다.
- 테스트할 수 있는 SD 카드가 여러 개 있습니다.
- 해시를 실행하기 전에 SD 카드를 마운트하지 않았습니다.
또한 SD 카드 속성에 따라 다른 해시 값이 제공되므로 전체 디스크(예: 위 예에서 "/dev/sdc")를 체크섬할 수 없다는 점에 유의하세요.
답변3
md5sum
이미지 파일의 값과 SD 카드의 값을 비교하는 것이 좋은 해결책이 될 것입니다.
답변4
sudo sh -c '
dd bs=64k if="$1" of="$2"
! cmp -- "$1" "$2" 2>&1 |
grep -qvF "EOF on $1"
' -- my.img /dev/sdc
cmp
두 파일은 바이트 단위로 비교되어 동일한지 여부에 따라 반환됩니다. 하나가 다른 것보다 짧지만 두 파일 중 더 짧은 파일의 전체 길이가 동일한 경우 cmp
1이 반환되고 보고됩니다.EOF on <shorter file>...
표준 오류로. 두 파일이 동일하면 cmp
0을 반환하고 아무것도 보고하지 않지만, 서로 다른 경우 cmp
1을 반환하고 다른 바이트를 보고합니다. 따라서 cmp
위의 명령문은 stdout 또는 stderr에서 일치하지 않는 출력 행을 생성하는 모든 실행에 대해 1을 반환합니다.EOF on $1
그렇지 않으면 0입니다.