파일 복사 시 md5 또는 sha1

파일 복사 시 md5 또는 sha1

모든 Linux 배포판에서 파일이 로컬 파티션에서 NFS 파티션으로 전송될 때 md5sum 또는 sha1 검사를 수행하는 방법이 있습니까?

예:

NFS 마운트 드라이브가 있고 로컬 드라이브에 매우 큰 파일이 있습니다. md5 검사를 수행하는 동안 파일을 NFS 마운트 드라이브로 전송하고 싶습니다. 파일을 원격 드라이브에 복사한 후 md5를 하는 스크립트를 많이 찾아봤는데 100GB가 넘는 아주 큰 파일이기 때문에 파일이 이미 복사되어 있다는 점을 활용할 수 있는 방법이 없을지 궁금합니다. 전송 시 빨간색으로 복사됩니다.

답변1

나는 이 작업을 수행할 수 있는 표준 Linux 유틸리티를 모릅니다. 파일이 메모리 기반 캐시에 맞는 경우 먼저 md5sum을 수행한 다음 복사(복사하면 메모리에서 데이터를 가져옴)하는 것이 그다지 비효율적이지 않습니다.

다음 조합을 사용할 수 있습니다.

cat filename | tee remote_output_name | md5sum

저장된 md5 에 대해 직접 md5sum인쇄된 합계를 확인 하도록 수정할 수 있습니다. 이는 디스크에서 파일을 한 번만 읽습니다.

check.md5당신 이

cd dir_with_big_files
md5sum * > check.md5

, 다음 Python 프로그램은 한 번에 64Mb를 읽고 쓰면서 단일 파일을 복사하고 검사합니다. /usr/local/bin/chkcopy로 저장하고 chmod +x /usr/local/chkcopy사용하십시오.chkcopy file_name check.md5 destination_filename_or_dir

#! /usr/bin/env python

import sys, os, hashlib

m = hashlib.md5()
file_name = sys.argv[1]
md5_name = sys.argv[2]
out_name = sys.argv[3]
if os.path.isdir(out_name):
    out_name = os.path.join(out_name, file_name)
BUF_SIZE = 64 * (1024 ** 2)

with open(file_name, 'rb') as ifp:
    with open(out_name, 'wb') as ofp:
        buf = ifp.read(BUF_SIZE)
        while buf:
            m.update(buf)
            ofp.write(buf)
            buf = ifp.read(BUF_SIZE)
with open(md5_name) as fp:
    for line in fp:
        md5, fn = line.rstrip().split('  ', 1)
        if fn == file_name:
            assert m.hexdigest() == md5
            break
    else:
        print('no md5 found for ' + file_name)

답변2

dd확장된 기능을 갖춘 잘 알려진 분기가 있습니다.dcfldd나는 수년 동안 그것을 사용하고 있거나 dd다음과 같은 패치 버전을 사용해 왔습니다.dc3dd다소 비슷한 기능을 가지고 있습니다.

두 도구 모두 복사 프로세스 중에 해싱을 수행할 수 있습니다(원하는 경우 여러 해시 유형을 동시에 사용할 수도 있음). 해시 값은 블록 및/또는 전체 데이터 스트림에서 계산될 수 있습니다.

일부 배포판(예: debian)은 리포지토리에 직접 패키지를 제공하고, Fedora 패키지는 외부에서 사용할 수 있습니다.인증서 저장소예를 들어.

8MiB 청크로 파일을 복사하고 전체 데이터의 MD5sum을 계산하여 STDERR로 인쇄하려면 다음을 수행하세요.

dcfldd if=/path/to/input bs=8M hash=md5 of=/path/to/outputfile

8MiB 청크로 파일을 복사하려면 전체 데이터의 SHA256 해시와 각 64MiB 청크의 SHA256sum을 계산합니다.

dcfldd if=/path/to/input bs=8M hash=SHA256 hashwindow=64M of=/path/to/outputfile

인수를 통해 파일을 지정하여 계산된 해시 값의 출력 파일을 제공할 수도 있습니다 hashlog. 여러 해시를 계산할 때 별도의 출력을 md5log=FILE1.log sha256log=FILE2.log다음과 같이 지정할 수 있습니다 .

답변3

확장 되어 체크섬과 함께 제공되는 외부 프로그램( crcsum) 을 사용할 수 있습니다 .cpmv

https://sourceforge.net/projects/crcsum/

관련 정보