1TB 파일이 올바르게 전송되었는지 어떻게 확인합니까?


25

장기 저장을 위해 하이퍼 바이저에서 보관 서버로 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 분이 걸립니다.
  • 이 경우 해시의 보안은 문제가되지 않습니다.

2
당신은 다른 검사를 시도 할 수 : en.wikipedia.org/wiki/Checksum를 . 나는 그들의 성능에 대해 모르겠다
tumchaaditya

실제 전송에는 시간이 얼마나 걸리고 md5sum에는 시간이 얼마나 걸립니까?
Keith Thompson

전송에는 일반적으로 3-4 시간이 걸리며 md5sum은 계산하는 데 약 40 분이 걸립니다.
tbenz9

답변:


18

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

섬기는 사람:

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

고객:

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

1
생각 : md5deep"청크"모드 ( md5deep.sourceforge.net/md5deep.html )가 유용 할 수 있습니다.
LawrenceC

@ultrasawblade-멋진 링크입니다. 다른 목적으로 확인해야합니다. 언급 해 주셔서 감사합니다!
nerdwaller

10

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 / 초에 이릅니다.


하나의 큰 RAID 배열에서 두 번째 큰 RAID 배열로 복사하고 있습니다.
tbenz9

@ tbenz9 나는 그것이 하나의 디스크라고 생각하지 않았다! 불행히도 적어도 컴파일 해야하는 해시에 대한 포인터를 추가했습니다 ...하지만 디스크 (또는 RAM)가 데이터를 제공 할 수있는 한 빨리 실행됩니다. (그리고 Mark Adler v. Adler32가 궁금하다면 Adler32의 제작자 인 것 같습니다)
derobert

@derobert, 작은 파일을 사용하여 테스트하는 대신 1TB와 같은 큰 파일로 테스트하지 않았습니까?
Pacerier

@derobert, 왜 shasum대신 사용 하지 않습니까?
Pacerier

@Pacerier는 OpenSSL 내장 벤치 마크의 결과물입니다. 더 긴 블록으로 의심 할 여지없이 조금 더 빠를 것이지만 순위는 변경되지 않을 것입니다 (테스트 한 모든 크기에서 일관됨). shasum은 OpenSSL보다 빠른 구현입니까? 솔직히 요즘에는 빠른 암호화 해시를 원한다면 BLAKE2를 사용합니다.
derobert

9

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

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


1
질문과 관련이 없지만 도움이되는 팁은 고양이 팁에 감사드립니다. 건배!
tbenz9

@ tbenz9 : 읽을 수있는 코드는 디버깅 및 유지 관리 및 변경이 더 쉽습니다. cat따라서 "무용지물 "이 반드시 나쁜 것은 아닙니다. 성능에 이득을 피함으로써이 없다면, 그것은 가정, 당신이 더 편안있어 무엇이든 함께 가야하는 것이 좋습니다 당신 이 코드의 메인테이너 될 것입니다.
iconoclast

1
@Keith

4

두 가지 옵션 :

용도 sha1sum

sha1sum foo.box

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


용도 rsync

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

rsync 매뉴얼 페이지에서

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


1
sha1sum에 대한 팁 덕분에 rsync는 전송하는 데 10 시간 이상이 걸립니다. 동일한 파일을 전송하고 nc 및 md5sum을 사용하여 약 4 시간 안에 md5sum을 실행할 수 있습니다. 4 시간을 더 줄이려고합니다.
tbenz9

3

과학은 발전하고 있습니다. 새로운 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

2

좋은 해시보다 더 잘 할 수는 없습니다. 다른 해시 / 체크섬 함수를 확인하여보다 빠른 것이 있는지 확인할 수 있습니다 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
    

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


2

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

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


BitTorrent 네트워크가 유익하지 않은 하나의 소스이자 하나의 목적지이기 때문에 이해합니다. 많은 곳에서 많은 목적지로 갈 때만 이점이 있습니까?
tbenz9

나는이 접근법 (입력 파일을 덩어리로 나누고, 개별적으로 보내고 다른 쪽에서 다시 어셈블하는)을 제안하는 것을 고려했으며 개선하지 않고도 성능을 중립으로 만드는 방법을 알 수 없었습니다. 여전히 동일한 양의 네트워크 전송 시간이 있지만 각 끝에 오버 헤드가 훨씬 많습니다. 이것은 본질적으로 파일을 소스 머신에서 소스 머신 으로 복사 한 다음 대상 머신으로 복사 한 다음 대상 머신에서 대상 머신으로 복사하는 것을 수반 합니다 . 큰 RAM 디스크를 사용하더라도 이것은 무료가 아닙니다.
Scott

1
이 방법의 유일한 장점은 전송 실패로부터의 빠른 복구를 포함하여 재시작 가능성입니다. OP는 얼마나 자주 실패를했는지 말하지 않았으며 이것이 자신이 최적화하기를 원한다는 것을 나타내지 않았습니다.
Scott

@ tben9 Bittorrent는 파일의 단일 전송을 위해 현재 선택된 도구입니다. 파일에 해시 정보가 있으면 최종 클라이언트가 다운로드 된 데이터를 확인하고 필요한 경우 수정할 수 있습니다. 여러 소스는 속도입니다. 따라서이 경우 BT를 사용하여 파일이 올바르게 전송되도록하는 것이 좋습니다.
Underverse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.