it-swarm-ko.tech

rsync로 단일 파일 전송 재개

우분투에서는 rsync을 사용하여 하드 드라이브에서 이동식 드라이브로 큰 파일을 복사하려고합니다. 다른 이유로 인해 한 번의 작업으로 작업을 완료 할 수 없습니다. 따라서 rsync을 사용하여 마지막으로 중단 된 곳에서 파일 복사를 다시 시작하는 방법을 알아 내려고 노력 중입니다.

--partial 또는 --inplace 옵션을 사용하려고했지만 --progress와 함께 --partial 또는 --inplace는 실제로 지난 번에 남은 것이 아니라 처음부터 시작합니다. rsync을 (를) 수동으로 일찍 중지하고 수신 된 파일의 크기를 확인하면 내가 찾은 것을 확인했습니다.

그러나 --append를 사용하면 마지막 남은 것부터 rsync가 시작됩니다.

man page--partial, --inplace--append에서 보았을 때 혼란스러워 마지막으로 남은 것에서 복사를 다시 시작하는 것과 관련이 있습니다. . 누군가 차이점을 설명 할 수 있습니까? 복사 재개에 --partial 또는 --inplace가 작동하지 않는 이유는 무엇입니까? 복사를 다시 시작하기 위해 rsync--append 옵션과 함께 작동해야합니까?

또한 rsync가 아닌 mv 또는 cp에 부분 파일이 남아 있으면 rsync --append가 파일 복사를 올바르게 다시 시작합니까?

52
Tim

중단 된 복사본을 재개하려면 rsync --append을 사용해야합니다. --append에 대한 매뉴얼 페이지 설명에서 :

그러면 rsync가 파일 끝에 데이터를 추가하여 파일을 업데이트합니다. 수신 측에 이미 존재하는 데이터가 송신 측 파일의 시작과 동일하다고 가정합니다. [ ...] --inplace, [...]을 의미합니다.

옵션 --inplace은 대상 파일 내용을 rsync (이상)에 직접 작성합니다. without--inplace, rsync는 :

  1. 임시 이름으로 새 파일을 만들고
  2. 업데이트 된 컨텐츠를 복사
  3. 대상 파일과 바꾸고 마지막으로
  4. 대상 파일의 이전 사본을 삭제하십시오.

정상 작동 모드는 주로 대상 파일이 열려있는 응용 프로그램과 rsync 맨 페이지에 정식으로 나열되어있는 몇 가지 다른 문제와의 충돌을 방지합니다.

1-3 단계에서 복사/업데이트 작업이 실패한 경우에 유의하십시오. 위의 rsync는 임시 대상 파일을 삭제합니다. --partial 옵션은이 동작을 비활성화하고 rsync는 부분적으로 전송 된 임시 파일을 대상 파일 시스템에 남겨 둡니다. 따라서 --partial 또는 --partial-dir을 사용하여 첫 번째 rsync을 (를) 호출하지 않으면 단일 파일 복사 작업을 재개해도 크게 얻을 수 없습니다 (--partial과 동일 또한 rsync에 특정 디렉토리에 모든 임시 파일을 작성하도록 지시합니다.

39
Riccardo Murri

--append--inplace를 의미하며 자체는 --partial를 의미합니다.

  • --partial 만 사용하면 rsync이 (가) 부분 전송을 떠나 후속 시도에서 다시 시작해야합니다.

  • --append를 사용하면 rsync가 부분 파일을 남기고 다음에 다시 시작할 수 있습니다. 전송 후 rsync는 전송 된 데이터의 체크섬 만 확인해야합니다.

  • --append-verify는 이전 전송에서 전송 된 부분을 포함하여 체크섬 확인에 전체 파일을 포함합니다.

  • --append 또는 --append-verify를 사용하면 체크섬 확인에 실패하면 파일이 완전히 다시 전송됩니다 (--inplace 사용)

mv와 함께 cp 또는 rsync 작업을 재개 할 수 있어야하지만 마음의 안정을 위해 --append-verify 옵션을 사용할 수 있습니다.

--append를 사용하면 rsync는 크기가 수신자보다 크기가 짧은 파일 만 복사합니다. 발신자 (타임 스탬프에 관계없이)에 있거나 수신자에 없습니다. 이 옵션에 대한 설명서 :

파일을 전송해야하고 수신자의 파일 크기가 발신자의 크기와 같거나 길면 파일을 건너 뜁니다.

man page 에 대한 자세한 정보

21
TomG

David Schwartz가 맞습니다. --partial (또는 -P)가 원하는 것을합니다. 나는 네트워크를 통해 ~ 8g으로 중지 된 37G 파일에서 이것을 확인했습니다. rsync는 부분의 첫 부분을 빠르게 스캔하고 (-P 덕분에 진행 상황을 보여줌) 부분 파일의 끝으로 전송을 다시 시작했습니다.

6
Steve Byrne

옳은 일을 --partial는 당신이 원하는 것을합니다. 항상 복사해야하는 파일 데이터 청크 목록의 시작 부분에서 시작하기 때문에 처음부터 시작하는 것 같습니다. --append 옵션은 위험하며 어떤 이유로 데이터가 일치하지 않으면 파일이 손상됩니다.

2
David Schwartz

기본적으로 rsync--whole-file 로컬 디스크에서 로컬 디스크로 전송하는 경우. 이미있는 부품을 확인하지 않고 처음부터 중단 된 전송을 다시 시작합니다.

이를 비활성화하려면 다음을 사용하십시오.

--no-whole-file

이것을 --inplace 또는 --partial은 (는) 나중에 전송을 재개 할 수 있습니다.

rsync를 사용하여 복사하는 내 별칭은 다음과 같습니다.

rscp='rsync -ax --inplace --sparse --no-whole-file --protect-args'

경고 : --append-verify 그대로 skip 크기가 같거나 큰 대상 파일.

1
Tom Hale