rsync가 두 로컬 드라이브간에 복사 된 파일을 확인합니까?


65

한 로컬 드라이브에서 다른 로컬 드라이브로 많은 수의 파일을 새로 복사하고 싶습니다.

rsync가 파일을 네트워크를 통해 원격 컴퓨터로 보낼 때 파일의 체크섬 비교를 수행한다는 것을 읽었습니다.

  1. 두 개의 로컬 드라이브간에 파일을 복사 할 때 rsync가 비교합니까?

  2. 그것이 확인을하는 경우-안전한 내기입니까? 또는 바이트 단위 비교를 수행하는 것이 더 낫습니까?

답변:


77

rsync는 항상 체크섬을 사용하여 파일이 올바르게 전송되었는지 확인합니다. 대상 파일이 이미 존재하는 경우 수정 시간 및 크기가 소스 파일과 일치하면 rsync가 파일 업데이트를 건너 뛸 수 있지만 rsync에서 데이터를 전송해야한다고 결정 하면 전송 및 수신 rsync 프로세스간에 전송 된 데이터에 항상 체크섬이 사용됩니다. . 이는 수신 된 데이터가 네트워크를 통한 바이트 수준 비교의 과도한 오버 헤드없이 높은 확률로 전송 된 데이터와 동일한 지 확인합니다.

파일 데이터가 수신되면 rsync는 데이터를 파일에 기록하고 커널이 성공적인 쓰기를 표시하면 디스크 손상없이 데이터가 기록되었음을 신뢰합니다. rsync는 데이터를 다시 읽지 않으며 알려진 체크섬과 추가 검사로 비교합니다.

검증 자체는 프로토콜 30 이상 (3.0.0에서 처음 지원됨)의 경우 MD5를 사용 합니다 . 이전 프로토콜의 경우 사용 된 체크섬은 MD4 입니다.

보안 암호화 해시에는 오랫동안 사용되지 않는 것으로 간주되었지만 MD5 및 MD4는 파일 손상 검사에 적합합니다.

소스 : 매뉴얼 페이지와 rsync 소스 코드를 확인하여 확인하십시오.


3
나는 모든 사람의 거품을 터뜨리는 것을 싫어하지만 -c 플래그가 추가되면 rsync 만 합계 확인을 검사합니다!

27
@ clint 아니요, 정답입니다. 매뉴얼 페이지의 -c플래그 설명에서 : "rsync는 항상 파일이 전송 될 때 생성되는 전체 파일 체크섬을 확인하여 전송 된 각 파일이 수신 측에서 올바르게 재구성되었는지 확인하지만 전송 후 자동 확인은이 옵션의 전송 전 "이 파일을 업데이트해야합니까?"확인과 아무 관련이 없습니다.
Michael Mrozek

7
이 대답은 실제로 복사 후 파일을 확인하는지 명확하지 않습니다. 파일이 수신 될 때 체크섬이 계산되면 복사 후 체크섬이 아니므로 파일이 올바르게 작성되었는지 확신 할 수 없습니다. 그런 다음 추가 비교를 수행해야합니다.
Andre Miller

7
이 답변이 상세하게 작성되고 기술적으로 정확하며 동시에 독자를 오도하는 주제가 너무 많기 때문에 다운 투표. 문제는 답이 동안 무슨 일에 좋은 내용이수록되어 있다는 것입니다 전송 질문자 구체적으로 그는 대한 관심한다고하면서 로컬 복사본하지 네트워크 전송. 카일 존스는 누군가를 잘못 인도하고 싶지는 않지만이 답변 (IMHO)은 그렇게 확신합니다.
ndemou 2016 년

4
카일 난 당신이 대답 잘못 생각하지 않습니다. 나는 이미 "세부적으로 잘 작성되고 기술적으로 정확하다"고 언급 했지만 독자는 불필요하게 집중하고주의를 기울여야합니다. 다른 관련없는 검증 프로세스를 반복적으로 설명하는 117 단어 후에 답변 중반에 질문되는 디스크 데이터의 검증 부족을 다루는 이유는 무엇입니까? 이 토론에 관심을 가져 주셔서 감사합니다. 진심으로 감사합니다.
ndemou

40

rsync로컬 파일 사본에 대한 복사 후 검증을 수행 하지 않습니다 . rsync대용량 파일을 느린 (예 : USB) 드라이브에 복사 한 다음 같은 파일을 다음과 같이 복사 하여 사용하지 않는지 확인할 수 있습니다 cp.

time rsync bigfile /mnt/usb/bigfile

time cp bigfile /mnt/usb/bigfile

두 명령 모두 동일한 시간이 걸리므로 rsync느린 디스크에서 대상 파일을 다시 읽는 것이기 때문에 체크섬을 수행 할 수 없습니다.

man페이지는 이것에 대해 불행히도 잘못된 것입니다. 또한 이것을 확인하지 strace, 복사가 완료 -after rsync문제에는 read()대상 파일을 호출, 그래서 그것을 체크섬 할 수 없습니다. 하나 더 당신이 그것을 확인할 수 있습니다 iotop: 당신은 rsync읽기와 쓰기를 동시에 (소스에서 대상으로 복사)하는 것을 본 다음 종료됩니다. 무결성을 확인하는 경우 읽기 전용 단계가 있습니다.


1
"man 페이지는 불행히도 이것에 대해 오도합니다. strace로 이것을 확인했습니다."원격, 실행중인 rsync 프로세스 또는 로컬 프로세스를 strace 했습니까? ssh를 사용하는 경우에도 대상에 두 개의 실행이 있습니다.
user129070

8
로컬 또는 원격 복사본에 대한 복사 후 확인은 없습니다. rsync -c강제로 확인 하려면 다시 실행 하십시오.
psusi

들어오는 스트림에서 확인이 수행됩니다. 파일 시스템이 기록되었음을 확인한 경우 디스크에서 다시 읽을 필요는 없습니다.
OrangeDog

17

rsync이미 존재하는 것을 복사하지 않도록 복사 하기 전에 체크섬을 비교합니다 (일부 경우). 체크섬 비교의 요점은 복사가 성공했는지 확인하는 것이 아닙니다. 이것이 파일 시스템 드라이버, 디스크 드라이버, 네트워크 드라이버 등 기본 인프라의 역할입니다 rsync. 모든 rsync오류가 없다고 확인하기 위해 호출 할 필요가 (그리고 않습니다!) 시스템의 반환 값을 확인하는 것입니다.


1
이것은 받아 들여진 대답과 모순되는 것 같습니다 ...
djule5

2
@ djule5 어떤 방법으로? 허용 된 답변은 주로 rsync가 전송 된 파일을 확인하는 방법에 관한 것 같지만 질문과 대답은 로컬 사본 에 관한 것 입니다.
Gilles

3
좋아, 그 맥락에서 나는 그것이 더 합리적이라고 동의한다. 따라서 "체크섬 비교의 요점은 복사가 성공했는지 확인하는 것이 아니라"로컬 복사본 에만 해당됩니다 . 그리고 "체크섬은 항상 송신 및 수신 rsync와 프로세스 사이에 전송되는 데이터에 사용되는" 유일한 마찬가지입니다 전송 사본. 질문과 관련하여 오해의 소지가있는 답변을 찾았으며 귀하의 답변이 수락 된 답변이어야한다고 생각합니다 (2 센트).
djule5

나는 여전히이 대답이 약간 오도한다고 생각합니다. 예를 들어, 네트워크 드라이버는 특히 복사가 성공했는지 확인하지만, 체크섬 비교가 복사가 로컬에 대해서만 성공했는지 확인하지 않는다고 말하면 네트워크 드라이버가 작동하지 않습니다.
Ken

1
@Ken 나는 당신이 만들고자하는 요점을 이해하지 못한다. 뭔가 잘못 읽은 것 같아요 네트워크 드라이버가 네트워크 사본이있는 경우에만 작동합니다. Rsync 자체는 복사 여부를 결정하기 위해 복사 수행 하기 전에 체크섬 비교 수행합니다. Rsync는 복사 체크섬 비교를 수행하지 않습니다 (무의미한 것이기 때문에 방금 복사 한 내용을 알고 있음).
Gilles

4

질문에 대한 신속하고 더러운 답변.

Q : rsync두 로컬 드라이브간에 파일을 복사 할 때 비교할 수 있습니까? A : 복사 대상을 파악하기 위해 비교를 수행합니다.

Q : 확인을하는 경우 안전한 내기입니까? 또는 바이트 단위 비교를 수행하는 것이 더 낫습니까? A : 파일의 MD5 체크섬 뒤에있는 수학만큼 안전합니다. 간단한 실험을 통해 도구를 배우고 신뢰할 수 있습니다.

긴 대답 : rsync파일 복사 후 파일 비교 (비트 단위 또는 체크섬) 를 원한다고 생각 합니다. 그 가치 데이터 무결성 중 몇 가지 중 하나 인 경우 다음이 유용 할 수 있습니다.

rsync -avh [source] [destination] && rsync -avhc [source] [destination] 

위의 코드 rsync파일 폴더는 처음 실행시 문제없이 완료되면 rsync전체 파일의 해시를 사용하여 동일한 파일 이름 비교를 수행하는 동안 즉시 다시 실행 됩니다.


1

rsync를 사용하여 중복의 무결성 확인

이 테스트가 드라이브 미디어에서 파일을 실제로 다시 읽도록하려면이 테스트를 실행하기 전에 두 드라이브의 전원을 모두 끄고 다시 시작하는 것이 좋습니다. 내부 휘발성 캐시가 지워집니다.

Linux를 다시 시작하지 않으면 최소한 다음을 사용하여 캐시 ( * )를 삭제해야합니다 .

sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

그런 다음 두 트리를 다시 읽고 체크섬을 비교하십시오.

rsync --dry-run --checksum --itemize-changes --archive SRC DEST

최신 rsync 체크섬은 128 비트 인 MD5를 사용합니다. 개별 파일에서 오류를 감지하는이 실패의 가능성은 천문학적으로 (논의 낮 여기 ),하지만 불가능하지.



후행 슬래시를 얻는 것이 행운입니다.
nobar

좋은 소식은 없습니다.
nobar

--checksum시험이 없어 질 때까지 귀찮게하지 마십시오 .
nobar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.