5년이 지난 지금이 문제rsync
원래 누군가가 다음을 수행할 수 있는 방법이 있는지 물었습니다 .
- 같은 시간, 같은 크기 ► 파일 건너뛰기(전송 없음, 체크섬 없음)
- 다양한 크기 ► 파일 전송(체크섬 없음)
- 다른 시간과 동일한 크기 ► 체크섬 수행 ► 체크섬이 다른 경우에만 전송
제 경우에는 여러 운영 체제에서 액세스할 수 있는 네트워크 공유가 있습니다(하나는 UTC를 사용하고 다른 하나는 RTC를 사용합니다. 두 OS 모두 관리자/루트 액세스 권한이 없으므로 변경할 수 없습니다). 하나의 운영 체제에서 파일을 수정하면 파일을 검색하는 운영 체제에 따라 "실제" 시간보다 몇 시간 앞/뒤가 되도록 시간이 변경됩니다. 파일을 수정하면 타임스탬프가 "잘못"됩니다.
답변1
한편으로는 관련 문제가 매우 혼란스럽습니다. 9mjb의 답변이 맞습니다.
반면에 네트워크 파일 시스템의 로컬 설치에서 rsync를 사용하는 경우 전체 파일을 다운로드하지 않으면 원격 파일을 체크섬할 수 없습니다! 따라서 여기서는 느린 영역으로 들어가게 됩니다. 사용 가능한 네트워크 대역폭이 디스크 속도보다 낮다고 가정합니다.
그러나 나는 또한 당신이 시간에 대해 설명하려는 것을 이해하지 못합니다. 이를 사용하면 -a
소스 시스템에서 정확한 시간을 전송해야 합니다. 이를 사용하지 않으면 -a
소스 파일 시스템의 원래 시간이 전송되지 않으므로 어쨌든 시간은 후속 전송과 정확히 일치하지 않습니다. 해당 동작을 원하지 않는 것처럼 들리지만 :-) -u
없이도 할 수 있습니다 -u
.
rsync
기본적으로 활성화되어 있습니다. (절충점은 "시간과 크기가 일치하면 파일이 다를 가능성이 너무 작아서 전송하지 않을 위험이 있습니다"입니다.)
[동기화]는 원본 파일과 대상에 있는 기존 파일의 차이만 전송하여 네트워크로 전송되는 데이터의 양을 줄이는 델타 전송 알고리즘으로 알려져 있습니다. Rsync는 백업 및 미러링에 널리 사용되며 일상적인 사용을 위한 향상된 복사 명령으로 사용됩니다.
Rsync는 크기나 마지막 수정 시간이 변경된 파일을 찾는 "빠른 확인" 알고리즘(기본값)을 사용하여 전송해야 하는 파일을 찾습니다.
이해해야 할 중요한 점은 rsync 델타 전송 알고리즘과 "빠른 확인"이 별개라는 것입니다.
당신이 원하지 않는 행동처럼 들립니다 --checksum
. --checksum
"빠른 확인" 섹션을 비활성화합니다. 이 경우,사용하지 마세요--checksum
.
-c, --체크섬
이는 rsync가 파일이 변경되었는지, 전송해야 하는지 확인하는 방식을 변경합니다. 이 옵션이 없으면 rsync는 "빠른 확인"(기본값)을 사용하여 보낸 사람과 받는 사람 사이의 각 파일 크기와 마지막 수정 시간이 일치하는지 확인합니다. 이 옵션은 각 파일의 128비트 체크섬을 일치하는 크기와 비교하도록 이 설정을 변경합니다. 체크섬을 생성한다는 것은 양 당사자가 전송 중인 파일의 모든 데이터를 읽는 데 많은 디스크 I/O를 소비한다는 것을 의미하므로(변경된 파일을 전송할 때 읽기가 수행되기 전) 작업 속도가 크게 느려질 수 있습니다.
발신자는 사용 가능한 파일 목록을 작성하기 위해 파일 시스템 검사를 수행할 때 체크섬을 생성합니다. 수신자는 변경된 파일을 검색하면서 체크섬을 생성하고 해당 발신자의 파일과 동일한 크기의 파일을 체크섬합니다. 전송을 위해 크기 또는 체크섬이 변경된 파일을 선택합니다.
rsync는 파일이 전송될 때 생성된 전체 파일 체크섬을 확인하여 전송된 각 파일이 수신 측에서 올바르게 재구성되었는지 항상 확인하지만 자동 전송 후 확인은 이 옵션과 관련이 없습니다. 전송 전 "이 파일을 업데이트해야 합니까?"
답변2
놀랍게도 내장된 rsync 옵션을 사용하면 이는 불가능해 보입니다!
이것은 효과가 있을 수 있습니다:
rsync -an --info=name src dest \
| rsync -an --info=name --checksum --files-from - src dest
설명하다:
첫 번째 rsync 명령은 기본 rsync 모드를 사용하여 시간과 크기를 확인합니다. 시간이나 크기가 다른 디렉터리나 파일 이름을 출력합니다. -n 플래그로 인해 파일이 전송되지 않습니다.
두 번째 rsync 명령은 첫 번째 rsync에서 시간이나 크기가 변경된 파일 목록을 가져온 다음 --checksum 매개변수를 사용하여 해당 파일에 대해 rsync를 다시 실행합니다.
두 번째 명령에는 시험 실행 모드를 나타내는 -n이 있으므로 파일 이름만 인쇄됩니다. 실제로 파일을 전송하려면 두 번째 명령에서 -n을 제거하십시오.