1TB 파일이 올바르게 전송되었는지 어떻게 확인합니까? netcat을 사용하여

장기 저장을 위해 하이퍼 바이저에서 보관 서버로 VM 이미지를 자주 전송합니다.

sccat, rsync, ect보다 빠르기 때문에 netcat을 사용하여 전송합니다.

hypervisor$ cat foo.box | nc <archive IP> 1234

archive$ nc -l -p 1234 > foo.box

파일 전송이 끝나면 md5sum대상과 소스 모두에서 실행 하여 손상이 없는지 확인 합니다.

불행히도 큰 파일에서 md5sum을 실행하는 데 시간이 오래 걸릴 수 있습니다. 두 개의 큰 파일의 무결성을 더 빨리 비교하려면 어떻게해야합니까?

최신 정보:

  • 전송이 거의 중단되지 않으므로 재시작 기능에 문제가 없습니다.
  • NC를 통해 전송하는 데 일반적으로 3-4 시간이 걸리고 md5sum을 얻으려면 40 분이 걸립니다.
  • 이 경우 해시의 보안은 문제가되지 않습니다.


답변

tee 를 사용 하여 다음과 같이 즉시 합계를 할 수 있습니다 (필요에 따라 netcat 명령을 적용하십시오).

섬기는 사람:

netcat -l -w 2 1111 | tee >( md5sum > /dev/stderr )

고객:

tee >( md5sum > /dev/stderr ) | netcat 127.0.0.1 1111


답변

tee체크섬을 동시에 전송하고 계산하는 데 사용 하는 것에 대한 Nerdwaller의 답변 은 주로 네트워크의 손상에 대해 걱정하는 경우 좋은 방법입니다. 디스크에 닿기 전에 체크섬을 취하기 때문에 디스크로가는 등의 손상으로부터 보호하지 않습니다.

그러나 나는 무언가를 추가하고 싶습니다 :

1TiB / 40 분 ≈ 437MiB / 초 1 .

실제로는 매우 빠릅니다. 당신이하지 않는 한 것을 기억 많은 의 스토리지에서 돌아오고있어 것으로, RAM의를. 따라서 가장 먼저 확인해야 할 것은 iostat -kx 10체크섬을 실행할 때 확인하는 것입니다. 특히 %util열에 주의를 기울이고 싶습니다 . 디스크를 100 % 가까이 파고 있다면 더 빠른 스토리지를 구입해야합니다.

그렇지 않으면 다른 포스터에서 언급했듯이 다른 체크섬 알고리즘을 사용해 볼 수 있습니다. MD4, MD5 및 SHA-1은 모두 암호화 해시로 설계되었습니다 (해당 목적으로는 더 이상 사용해서는 안되며 모두 너무 약한 것으로 간주 됨). 현명하게, 당신은 그들을 비교할 수 있습니다 openssl speed md4 md5 sha1 sha256. 적어도 하나 이상의 강력한 해시를 갖기 위해 SHA256에 던졌습니다.

The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md4              61716.74k   195224.79k   455472.73k   695089.49k   820035.58k
md5              46317.99k   140508.39k   320853.42k   473215.66k   539563.35k
sha1             43397.21k   126598.91k   283775.15k   392279.04k   473153.54k
sha256           33677.99k    75638.81k   128904.87k   155874.91k   167774.89k

위에서 MD4가 가장 빠르며 SHA256이 가장 느리다는 것을 알 수 있습니다. 이 결과는 적어도 PC와 같은 하드웨어에서 일반적입니다.

더 많은 성능을 원한다면 ( 손상을 입히는사소한 비용이 들며 손상을 감지 할 가능성도 적음) CRC 또는 Adler 해시를보고 싶을 것입니다. 둘 중 Adler는 일반적으로 빠르지 만 약합니다. 불행히도, 나는 정말 빠른 명령 행 구현을 모른다. 내 시스템의 프로그램은 모두 OpenSSL의 md4보다 느립니다.

그래서 가장 좋은 건 속도는-현명 openssl md4 -r합니다 ( -r차종 그것은 md5sum이 출력과 같이).

컴파일 및 / 또는 최소한의 프로그래밍을 수행하려는 경우 스택 오버플로xxhash 에서 Mark Adler의 코드 오버를 참조하십시오 . SSE 4.2가있는 경우 하드웨어 CRC 명령의 속도를 이길 수 없습니다.


1 TiB = 1024⁴ 바이트; 1MiB = 1024² 바이트 1000 단위의 전력으로 ≈417MB / 초에 이릅니다.


답변

openssl명령은 여러 메시지 요약을 지원합니다. 내가 시도 할 수있는 것 중 md4시간의 약 65 %, 시간의 md5약 54 % sha1(내가 테스트 한 파일 의 경우)에서 실행되는 것 같습니다 .

md2설명서 에도 포함 되어 있지만와 동일한 결과를 제공하는 것 같습니다 md5.

대략적으로 속도는 품질과 반비례하는 것처럼 보이지만 의도적 인 충돌을 일으키는 적에 대해 걱정하지 않기 때문에 그다지 큰 문제는 아닙니다.

더 오래되고 간단한 메시지 요약을 둘러 볼 수 있습니다 ( md1예 :가 있었 습니까).

사소한 점 :의 쓸모없는 사용이cat 있습니다. 오히려 :

cat foo.box | nc <archive IP> 1234

당신이 사용할 수있는:

nc <archive IP> 1234 < foo.box

또는:

< foo.box nc <archive IP> 1234

이렇게하면 프로세스가 절약되지만 성능에는 큰 영향을 미치지 않습니다.


답변

두 가지 옵션 :

용도 sha1sum

sha1sum foo.box

어떤 상황에서는 sha1sum이 더 빠릅니다 .


용도 rsync

전송하는 데 시간이 더 걸리지 만 rsync는 파일이 손상되지 않은 상태인지 확인합니다.

rsync 매뉴얼 페이지에서

rsync는 항상 파일이 전송 될 때 생성되는 전체 파일 체크섬을 확인하여 전송 된 각 파일이 수신 측에서 올바르게 재구성되었는지 확인합니다.


답변

과학은 발전하고 있습니다. 새로운 BLAKE2 해시 함수는 MD5보다 빠르며 (암호 적으로 부팅하는 것이 훨씬 강력합니다).

참조 : https://leastauthority.com/blog/BLAKE2-harder-better-faster-stronger-than-MD5.html

Zooko의 슬라이드에서 :

바이트 당 인텔 코어 i5-3210M (Ivy Bridge) 
기능 사이클의 바이트 당 사이클
긴 메시지 4096B 64B MD5 5.0 5.2 13.1 SHA1 4.7 4.8 13.7 SHA256 12.8 13.0 30.0 케카 8.2 8.5 26.0 블레이크 1 5.8 6.0 14.9 BLAKE2 3.5 3.5 9.3


답변

좋은 해시보다 더 잘 할 수는 없습니다. 다른 해시 / 체크섬 함수를 확인하여보다 빠른 것이 있는지 확인할 수 있습니다 md5sum. MD5만큼 강력한 것이 필요하지 않을 수도 있습니다. MD5 (및 SHA1과 같은 것)는 암호화 방식으로 강력하게 설계되었으므로 공격자 / 임 포스터가 기존 값과 동일한 해시 값을 갖는 새 파일을 만들 수 없습니다 (예 : 서명 된 e -메일 및 기타 서류). 통신에 대한 공격이 걱정되지 않고 제재소 통신 오류 만 발생하는 경우 CRC (Cyclic Redundancy Check)와 같은 것으로 충분할 수 있습니다. (그러나 나는 그것이 더 빠를 지 모르겠다.)

또 다른 방법은 전송과 동시에 해시를 시도하는 것입니다. 이렇게하면 전체 시간이 줄어들고 전송이 완료 될 때까지 기다렸다가 MD5가 끝날 때까지 다시 대기해야하는 자극 요소를 확실히 줄일 수 있습니다. 나는 이것을 테스트하지 않았지만 다음과 같이 할 수 있어야합니다.

  • 소스 머신에서 :

    mkfifo myfifo
    티 myfifo < source_file | nc dest_host  port_number 및 md5sum myfifo
    
  • 대상 컴퓨터에서 :

    mkfifo myfifo
    nc -l -p port_number | 티 myfifo> dest_file 및 md5sum myfifo
    

물론 파일 크기를 확인하는 것은 삭제 된 바이트가 있는지 확인하는 좋은 방법입니다.


답변

큰 파일을 보내는 것은 고통입니다. 각 청크에 대해 해시를 생성하는 파일을 청크 한 다음 대상으로 보낸 다음 해시를 확인하고 청크를 결합하십시오.

개인 BitTorrent 네트워크를 설정할 수도 있습니다. 그러면 모든 것이 안전하게 도달 할 수 있습니다.