답변:
rsync는 항상 체크섬을 사용하여 파일이 올바르게 전송되었는지 확인합니다. 대상 파일이 이미 존재하는 경우 수정 시간 및 크기가 소스 파일과 일치하면 rsync가 파일 업데이트를 건너 뛸 수 있지만 rsync에서 데이터를 전송해야한다고 결정 하면 전송 및 수신 rsync 프로세스간에 전송 된 데이터에 항상 체크섬이 사용됩니다. . 이는 수신 된 데이터가 네트워크를 통한 바이트 수준 비교의 과도한 오버 헤드없이 높은 확률로 전송 된 데이터와 동일한 지 확인합니다.
파일 데이터가 수신되면 rsync는 데이터를 파일에 기록하고 커널이 성공적인 쓰기를 표시하면 디스크 손상없이 데이터가 기록되었음을 신뢰합니다. rsync는 데이터를 다시 읽지 않으며 알려진 체크섬과 추가 검사로 비교합니다.
검증 자체는 프로토콜 30 이상 (3.0.0에서 처음 지원됨)의 경우 MD5를 사용 합니다 . 이전 프로토콜의 경우 사용 된 체크섬은 MD4 입니다.
보안 암호화 해시에는 오랫동안 사용되지 않는 것으로 간주되었지만 MD5 및 MD4는 파일 손상 검사에 적합합니다.
소스 : 매뉴얼 페이지와 rsync 소스 코드를 확인하여 확인하십시오.
-c
플래그 설명에서 : "rsync는 항상 파일이 전송 될 때 생성되는 전체 파일 체크섬을 확인하여 전송 된 각 파일이 수신 측에서 올바르게 재구성되었는지 확인하지만 전송 후 자동 확인은이 옵션의 전송 전 "이 파일을 업데이트해야합니까?"확인과 아무 관련이 없습니다.
rsync
로컬 파일 사본에 대한 복사 후 검증을 수행 하지 않습니다 . rsync
대용량 파일을 느린 (예 : USB) 드라이브에 복사 한 다음 같은 파일을 다음과 같이 복사 하여 사용하지 않는지 확인할 수 있습니다 cp
.
time rsync bigfile /mnt/usb/bigfile
time cp bigfile /mnt/usb/bigfile
두 명령 모두 동일한 시간이 걸리므로 rsync
느린 디스크에서 대상 파일을 다시 읽는 것이기 때문에 체크섬을 수행 할 수 없습니다.
man
페이지는 이것에 대해 불행히도 잘못된 것입니다. 또한 이것을 확인하지 strace
, 복사가 완료 -after rsync
문제에는 read()
대상 파일을 호출, 그래서 그것을 체크섬 할 수 없습니다. 하나 더 당신이 그것을 확인할 수 있습니다 iotop
: 당신은 rsync
읽기와 쓰기를 동시에 (소스에서 대상으로 복사)하는 것을 본 다음 종료됩니다. 무결성을 확인하는 경우 읽기 전용 단계가 있습니다.
rsync -c
강제로 확인 하려면 다시 실행 하십시오.
rsync
이미 존재하는 것을 복사하지 않도록 복사 하기 전에 체크섬을 비교합니다 (일부 경우). 체크섬 비교의 요점은 복사가 성공했는지 확인하는 것이 아닙니다. 이것이 파일 시스템 드라이버, 디스크 드라이버, 네트워크 드라이버 등 기본 인프라의 역할입니다 rsync
. 모든 rsync
오류가 없다고 확인하기 위해 호출 할 필요가 (그리고 않습니다!) 시스템의 반환 값을 확인하는 것입니다.
질문에 대한 신속하고 더러운 답변.
Q : rsync
두 로컬 드라이브간에 파일을 복사 할 때 비교할 수 있습니까? A : 복사 대상을 파악하기 위해 비교를 수행합니다.
Q : 확인을하는 경우 안전한 내기입니까? 또는 바이트 단위 비교를 수행하는 것이 더 낫습니까? A : 파일의 MD5 체크섬 뒤에있는 수학만큼 안전합니다. 간단한 실험을 통해 도구를 배우고 신뢰할 수 있습니다.
긴 대답 : rsync
파일 복사 후 파일 비교 (비트 단위 또는 체크섬) 를 원한다고 생각 합니다. 그 가치 데이터 무결성 중 몇 가지 중 하나 인 경우 다음이 유용 할 수 있습니다.
rsync -avh [source] [destination] && rsync -avhc [source] [destination]
rsync
파일 폴더는 처음 실행시 문제없이 완료되면 rsync
전체 파일의 해시를 사용하여 동일한 파일 이름 비교를 수행하는 동안 즉시 다시 실행 됩니다.이 테스트가 드라이브 미디어에서 파일을 실제로 다시 읽도록하려면이 테스트를 실행하기 전에 두 드라이브의 전원을 모두 끄고 다시 시작하는 것이 좋습니다. 내부 휘발성 캐시가 지워집니다.
Linux를 다시 시작하지 않으면 최소한 다음을 사용하여 캐시 ( * )를 삭제해야합니다 .
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
그런 다음 두 트리를 다시 읽고 체크섬을 비교하십시오.
rsync --dry-run --checksum --itemize-changes --archive SRC DEST
최신 rsync 체크섬은 128 비트 인 MD5를 사용합니다. 개별 파일에서 오류를 감지하는이 실패의 가능성은 천문학적으로 (논의 낮 여기 ),하지만 불가능하지.
--checksum
시험이 없어 질 때까지 귀찮게하지 마십시오 .