고쳐 쓰다:다시 읽어보니 좋은 질문은 아닌 것 같습니다. 내 생각엔 이런 걸 물어봐야 할 것 같아얼마나 신뢰할 수 있나요 rsync -aP --dry-run /origin /dest
?. 물론 가장 신뢰할 수 있는 방법이 데이터 무결성을 확인하는 가장 빠른 방법은 아닙니다.
대답은 rsync가 이러한 옵션(및 일부 실패 시나리오)으로 수행하는 작업을 부드럽게 설명하고 diff의 수행 내용에 대한 정보를 제공하므로 질문을 그대로 두겠습니다.
문제는 340GB 폴더를 복사했는데 복사가 성공했는지 확인하고 싶습니다. rsync -aP /origin /dest
하나의 ext4 파티션에서 다른 파티션으로 복사합니다 .
diff -r /origin /dest
나는 비교 소스와 대상 디렉토리를 사용하는 것이 매우 (매우) 오랜 시간이 걸린다는 것을 알고 있습니다 . 그런 다음 디렉토리를 비교하는 데 사용할 수 있다고 생각했습니다 rsync -aP --dry-run /origin /dest
. 그런 다음 시간이 걸렸습니다.5 초(!). (나는 time
그것을 측정하기 위해 명령 전에 이것을 사용합니다.)
rsync -aP
이후 로"델타 파일 목록 보내기"메시지만 표시되고 다른 것은 아무것도 표시되지 않습니다(다른 파일이나 복사되지 않은 파일이 나열됨). 이것이 두 디렉터리가 동일한지 확인하는 가장 빠르고 안정적인 방법이라는 결론을 내렸습니다. (옵션을 사용하는 한 rsync -a
파일과 디렉터리도 소유자, 권한, 수정 시간 등이 동일합니다... -P
의미합니다 --progress
.)
내가 맞나요? rsync -aP --dry-run /origin /dest
디렉터리가 동일한지 확인하는 가장 빠르고 안정적인 방법은 무엇입니까?
답변1
diff를 사용하면 항상 파일 내용을 읽어 내용 간의 차이점을 찾습니다.
기본적으로 rsync는 파일 이름, 수정 시간 및 파일 크기가 둘 사이에 동일한 경우 파일 내용을 읽지 않습니다. 동일하면 파일 내용이 동일하다고 가정하고 읽지 않습니다. 이렇게 하면 이미 동일한(또는 거의 동일한) 디렉터리에서 속도가 훨씬 빨라집니다.
대부분의 경우 이 동작은 문제가 되지 않습니다. 동기화 전후에 파일이 동일한 수정 시간을 갖기 위해 동일한 1초 창 내에서 변경되는 경우는 매우 드물기 때문입니다.그리고동일한 파일 크기를 유지하십시오. 그런 일이 발생하더라도 큰 영향을 미치는 경우는 거의 없습니다.
--ignore-times
명령줄 옵션을 사용하여 rsync가 수정 시간(또는 크기)에 관계없이 항상 파일 내용을 읽도록 할 수 있습니다.
답변2
속도와 신뢰성은 종종 반대되는 요구 사항입니다. diff
(또는 cmp
)은 파일을 조금씩 비교하여 가장 많은 정보를 제공합니다.믿을 수 있는답변. ( diff -q
파일이 동일한지 알고 싶을 때 사용하세요.)
속도를 높이려면 파일 읽기를 완전히 건너뛰고 타임스탬프에 의존하거나 데이터 전송을 건너뛰어야 합니다. 이는 디스크 I/O가 속도 제한 요소일 수 있는 시스템에서는 큰 문제가 아닐 수 있습니다.
파일이 다른 시스템에 있고 유사한 시스템이 있거나 md5sum
유사한 시스템이 있는 경우 다음과 같이 할 수 있습니다.
cd /somewhere ; find . -type f | xargs -d '\n' md5sum > /tmp/checksums
양쪽 끝을 모두 확인한 다음 출력 파일을 비교합니다. 이렇게 하면 전체 데이터가 아닌 해시 값만 전송하면 됩니다. (또는 sha512sum
더 강력한 검사를 원하는 경우) rsync -c
분명히 또한MD5는 내부적으로 사용됩니다..
타임스탬프를 확인하는 것과 전체 데이터를 읽는 것 사이의 선택은 오류의 원인이 무엇인지에 따라 달라집니다. 메타데이터를 확인하면 모든 항목이 복사되기 전에 복사 프로세스가 종료되었는지 알 수 있지만 복사된 실제 데이터는 확인하지 않습니다. 자동 데이터 손상을 감지하기 위해 데이터는전적으로전체 읽기가 필요하며 전체 데이터 또는 체크섬만 비교됩니다. rsync를 사용하면 rsync -i -c
체크섬이 일치하지 않는 파일 목록이 출력되어 다시 복사됩니다.