대용량 파일의 md5sum

대용량 파일의 md5sum

문맥:

md5sum다양한 유형의 대용량 미디어 파일, ISO 이미지 파일 등이 포함된 대용량 테라바이트 드라이브가 있습니다 . 속도/성능으로 인해 첫 번째 메가바이트를 사용하여 해당 내용을 확인하고 싶습니다 .

다음과 같이 합계를 생성할 수 있습니다.

FILE=four_gig_file.iso
SUM=$(head -c 1M "$FILE" | md5sum)
printf "%s *%s\n" ${SUM%-} "$FILE" >>test.md5

첫 번째 메가바이트의 서명이 전체 파일의 서명과 다르므로 이를 어떻게 확인합니까?

다른 언어로 이 작업을 수행하는 것을 본 적이 있지만 어떻게 수행하는지 궁금합니다.세게 때리다. 나는 md5sum -c파이프 등을 포함한 다양한 순열을 실험했습니다.


를 사용하는 대신 md5sum -c해시를 새 파일로 다시 계산한 다음 '비교'해야 합니까?

당신은 사용할 수 있습니다

find /directory/path/ -type f -print0 | xargs -0 md5sum blah blah

많은 수의 파일을 작업합니다.

추신:재동기화는 옵션이 아닙니다

업데이트 2: 현재로서는 --

head, find 및 md5sum 사용 그런 다음 소스 디렉토리에서 파일을 상당히 빠르게 생성한 다음 대상에서 계산한 후 다른 쪽에서 diff를 사용하여 확인할 수 있습니다. 이에 대한 영리한 한 줄짜리 스크립트나 스크립트가 있습니까?

답변1

파일의 첫 번째 메가바이트만 샘플링하여 내용을 확인하면 더 큰 파일 중 일부가 어떤 방식으로든 손상되거나 변경되었는지 감지하지 못할 가능성이 높습니다. 그 이유는 해제될 수 있는 다른 수백 메가바이트가 있을 수 있는 경우 해싱 알고리즘에 1MB의 데이터만 제공하기 때문입니다. 잘못된 위치에 있는 비트라도 다른 서명을 제공합니다.

데이터 무결성을 확인하려는 경우 CRC32 알고리즘을 사용하는 것이 더 좋습니다. MD5보다 빠릅니다. 올바른 CRC32 서명이 있는 것처럼 보이도록 파일을 위조/수정하는 것이 가능하지만 임의의 손상으로 인해 그렇게 될 가능성은 없습니다.

업데이트:

다음은 모든 파일에 대해 1MB 기반 md5 체크섬을 수행하는 멋진 한 줄입니다.

find ./ -type f -print0 | xargs -0 -n1 -I{} sh -c "echo '{}' >> output.md5 && head -c 1M '{}' | md5sum >> output.md5"

원한다면 md5sum을 cksum으로 바꾸십시오. 출력에 파일 이름을 포함하기로 선택했습니다. 그 이유는 md5sum에 전체 파일을 제공하지 않으면 파일 이름 문자열이 전달되지 않기 때문입니다.

답변2

find -size 인수를 사용하여 10M보다 큰 파일만 제한하고 파일의 처음 1M과 마지막 1M 부분에서 md5sum을 계산하는 약간 수정된 솔루션/예입니다.

find . -type f -a -size +10M -print0 | xargs -0 -n1 -I{} sh -c 'echo "$( (head -c 1M '{}'; tail -c 1M '{}' ) | md5sum) {} "'

관련 정보