우선, 질문의 "재개"부분과 관련하여, 송신단 --partial
이 완전히 전송 된 것처럼 사라지는 경우 수신 측에 부분적으로 전송 된 파일을 유지하도록 지시합니다.
파일을 전송하는 동안 파일은 대상 폴더 (예 :) .TheFileYouAreSending.lRWzDC
또는 --partial-dir
스위치 를 설정 한 경우 특별히 선택된 폴더에 숨겨진 파일로 임시 저장됩니다 . 전송이 실패하고 --partial
설정되지 않은 경우이 숨겨진 파일은이 암호 이름 아래의 대상 폴더에 남아 있지만 --partial
설정되어 있으면 파일은 파일 이름 TheFileYouAreSending
이더라도 실제 대상 파일 이름 (이 경우 )으로 이름이 변경됩니다. 완료되지 않았습니다. 요점은 나중에 중 하나를 다시 rsync를 실행하여 전송을 완료 할 수 있다는 것입니다 --append
또는 --append-verify
.
그래서, --partial
하지 않는 자체가 실패하거나 취소 전송을 다시 시작합니다. 다시 시작하려면 다음 실행에서 위에서 언급 한 플래그 중 하나를 사용해야합니다. 따라서 대상에 괜찮은 것처럼 보이지만 실제로는 불완전한 파일이 대상에 포함되지 않도록하려면을 사용하지 않아야합니다 --partial
. 반대로, 대상 디렉토리에 숨겨진 실패한 파일을 남기지 않고 나중에 전송을 완료 할 수 있다는 것을 알고 싶다면 --partial
도움이 될 것입니다.
--append
위에서 언급 한 스위치 와 관련 하여 실제 "재개"스위치이며 사용 여부에 관계없이 사용할 수 있습니다 --partial
. 실제로를 사용 --append
하면 임시 파일이 만들어지지 않습니다. 파일은 대상에 직접 기록됩니다. 이와 관련하여 전송에 실패한 --append
경우와 동일한 결과를 제공 --partial
하지만 숨겨진 임시 파일을 작성하지는 않습니다.
요약하자면, 큰 파일을 이동하고 rsync
중지 된 정확한 지점에서 취소되거나 실패한 rsync 작업을 재개하는 옵션을 원할 경우 다음 시도 에서 --append
또는 --append-verify
스위치 를 사용해야합니다 .
@Alex가 아래에서 지적한 것처럼 버전 3.0.0 rsync
에는 이제 새로운 옵션 인 옵션이 있으므로 해당 스위치가 존재하기 전에 --append-verify
작동 --append
합니다. 의 동작을 원할 수도 --append-verify
있으므로로 버전을 확인하십시오 rsync --version
. Mac을 사용 중이고 rsync
from을 사용하지 않는 경우 homebrew
(적어도 El Capitan을 포함하여) 이전 버전을 사용하고 --append
대신 을 사용해야 --append-verify
합니다. 그들이 왜 행동을 지키지 않았고 --append
대신 새로 온 사람을 지명 했는지 --append-no-verify
는 약간 당혹 스럽습니다. 어느 쪽이든, --append
에 rsync
버전 3과 동일하기 전에 --append-verify
새로운 버전.
--append-verify
위험하지는 않습니다 : 항상 양쪽 끝의 데이터를 읽고 비교할뿐만 아니라 데이터가 동일하다고 가정하지 않습니다. 이것은 체크섬을 사용하여 수행하므로 네트워크에서는 쉽지만 실제로 대상에 추가하여 전송을 재개하려면 와이어의 양쪽 끝에서 공유 된 양의 데이터를 읽어야합니다.
두 번째로, "rsync가 소스와 대상 간의 차이를 찾을 수 있으므로 차이점을 복사 할 수 있다고 들었습니다."
맞습니다. 델타 전송이라고하지만 다른 것입니다. 이를 활성화하려면 -c
, 또는 --checksum
스위치 를 추가하십시오 . 이 스위치가 사용되면 rsync는 와이어의 양쪽 끝에있는 파일을 검사합니다. 이 작업은 청크 단위로 수행되며, 양쪽 끝의 체크섬을 비교하고 서로 다르면 파일의 다른 부분 만 전송합니다. 그러나 @Jonathan이 아래에서 지적한 것처럼 파일의 양 끝이 같은 크기 일 때만 비교가 이루어집니다. 크기가 다르면 rsync가 전체 파일을 업로드하여 동일한 이름으로 대상을 덮어 씁니다.
이를 위해서는 처음에 양쪽 끝에서 약간의 계산이 필요하지만, 예를 들어 작은 크기의 변경이 포함 된 대용량 파일 고정 크기 파일을 자주 백업하는 경우 네트워크로드를 줄이는 데 매우 효율적일 수 있습니다. 기억해야 할 예로는 가상 머신 또는 iSCSI 대상에 사용되는 가상 하드 드라이브 이미지 파일이 있습니다.
--checksum
대상 시스템에 완전히 새로운 파일 배치를 전송하는 데 사용하는 경우 rsync는 전송하기 전에 소스 시스템에서 체크섬을 계산합니다. 왜 모르겠어요 :)
간단히 말해 :
당신은 종종 그냥 작업을 취소하고 나중에 다시 시작하는 옵션을 선택하고 싶다 "A와 B에서 물건을 이동"을 rsync를 사용하는 경우 하지 않는 사용 --checksum
하지만, 않습니다 사용합니다 --append-verify
.
rsync를 사용하여 데이터를 자주 백업하는 경우 --append-verify
지속적으로 크기가 커지지 만 한 번 작성된 후에는 거의 수정되지 않는 대용량 파일을 보내는 습관이 없다면 큰 도움이되지 않을 것입니다. 당신은 스토리지에 백업하는 경우 보너스 팁으로, 같은 스냅 숏을 지원 btrfs
하거나 zfs
, 가산, --inplace
스위치하면 변경된 파일이 다시 생성되지 않고 오히려 변경된 블록이 오래된 사람을 통해 직접 기록되기 때문에 당신은 스냅 샷 크기를 줄이는 데 도움이됩니다. 이 스위치는 약간의 변경 만있을 때 대상에서 파일의 복사본을 생성하여 rsync를 피하려는 경우에도 유용합니다.
를 사용 --append-verify
하면 rsync는 항상 같은 크기의 모든 파일에서와 같이 동작합니다. 수정 또는 다른 타임 스탬프가 다르면 해당 파일을 자세히 조사하지 않고 소스로 대상을 덮어 씁니다. --checksum
이름과 크기가 같은 모든 파일 쌍의 내용 (체크섬)을 비교합니다.
업데이트 2015-09-01 @Alex가 작성한 점을 반영하도록 변경되었습니다 (감사합니다!)
2017-07-14 업데이트 됨 @Jonathan의 의견 을 반영하여 변경되었습니다 (감사합니다!)