rsync로 단일 파일 전송 재개


52

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

나는 옵션을 사용하는 시도 --partial하거나 --inplace,하지만 함께 --progress, 내가 발견 rsync으로 --partial또는 --inplace실제로에서 시작하는 대신에 마지막으로 남아 있었는지에서의 시작. 수동으로 rsync일찍 중지 하고 수신 된 파일의 크기를 확인하면 내가 찾은 것을 확인했습니다.

그러나으로 --appendrsync는 마지막에 남은 것부터 시작합니다.

나는이에 본대로 혼란 스러워요 man 페이지 --partial , --inplace그리고 --append마지막으로 남아 있었는지에서 복사를 다시 시작 관련된 것으로 보인다. 누군가 차이점을 설명 할 수 있습니까? 왜 안 --partial또는 --inplace복사를 재개 사용할 수 있습니까? 복사를 재개 rsync하려면 --append옵션 과 함께 작동해야 합니까?

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

답변:


39

중단 된 사본을 재개하려면을 사용해야합니다 rsync --append. 맨 페이지의 설명에서 --append:

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

옵션 --inplacersync대상 파일 내용을 직접 덮어 쓰게합니다. 없이 --inplace , rsync것 :

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

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

1-3 단계에서 복사 / 업데이트 작업이 실패한 경우에 유의하십시오. 위, rsync임시 대상 파일을 삭제합니다. 이 --partial 옵션은이 동작을 비활성화하고 rsync부분적으로 전송 된 임시 파일을 대상 파일 시스템에 남겨 둡니다. 당신이 먼저 호출하지 않는 한 따라서, 하나의 파일 복사 작업을 다시 시작하는 것은 많은 것을 얻을하지 않습니다 rsync--partial--partial-dir(와 같은 효과가 --partial또한이 지시에서, rsync 특정 디렉토리에있는 모든 임시 파일을 만듭니다).


감사! 부분 파일이 rsync가 아닌 mv 또는 cp로 남겨진 경우 rsync --append가 파일 복사를 올바르게 다시 시작합니까?
Tim

1
요컨대 @ 팀은 --append만드는 rsync이 개 해당 파일은 다음 한 짧은이 하나 이상의 초기 부분에 동일, 다른 길이가있는 경우, 그 믿습니다. 따라서 큰 파일을 cp복사하고 복사 프로세스를 중단하면 파일 rsync --append의 나머지 부분 만 복사됩니다. ( 참고 : 경우 cp시스템 충돌에 의해 중단되고, 파일의 내용 및 메타 데이터가 실행이 경우, 파일이 손상, 즉, 동기화되지 않은 것을 작은 기회가있다. rsync다시 한 번 없이 --append 문제를 해결해야한다.)를
리카르도을 Murri

2
따라서 이것을 올바르게 이해하면 rsync에게 부분 파일확인하고 부분적으로 전송 된 파일로 전송을 다시 시작하도록 지시 할 방법이 없습니까?
Winny

1
@Winny, 매우 뒤늦게 : 로컬 사본의 경우 합리적인 방법이 없습니다. 네트워크 사본의 경우 --partialwithout 를 지정하면 이것이 기본 모드 --append입니다.
roaima

1
@Winny --append이며 --append-verify위험한 실패 사례가 있습니다. 수신자 파일의 크기가 같지만 데이터가 다른 경우. 대신 솔루션을--no-whole-file 제안합니다 .
Tom Hale

21

알고 있어야 --append의미 --inplace자체가 의미하는 --partial.

  • 그냥 사용 --partial하면 rsync부분 전송을 남기고 후속 시도에서 다시 시작해야합니다.

  • 사용 --append하면 rsync부분 파일을 남겨두고 다음에 다시 시작해야합니다. 전송 후 전송 rsync된 데이터의 체크섬 만 확인해야합니다.

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

  • 하나와 --append또는 --append-verify실패한 체크섬 확인이 파일을 완전히 다시 전송되도록한다 (사용 --inplace)

mv또는 cp작업 을 재개 할 수 있어야 rsync하지만 --append-verify안심할 수있는 옵션 을 사용할 수 있습니다 .

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

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

매뉴얼 페이지의 추가 정보


--append그리고 --append-verify위험한 실패하는 경우가 있습니다 수신기의 파일이 동일한 크기 또는 큰하지만 다른 데이터가있는 경우. 대신 솔루션을--no-whole-file 제안합니다 .
Tom Hale

@TomHale 문서는 파일을 건너 뛰려면 양쪽 끝에서 크기와 수정 시간이 정확히 같아야한다고 제안합니다. 이것이 그럴듯한 관심사라면 --checksum사용해야합니다. 명시 적으로 지정 된 것을 찾을 수 없지만 논리적으로 재개 가능한 옵션 중 하나는 호환되지 않아야 --no-whole-file하기 때문에 암시 --whole-file해야합니다.
TomG

--append-verify날짜가 다른 동일하거나 큰 크기의 파일 건너 뜁니다 ( 예기치 않은). 어쨌든 전체 파일 체크섬을 수행 할 것이기 때문에 --checksum 모든 파일에 대한 필요 rsync는 없지만 전송되는 파일에만 적용됩니다.
Tom Hale

--checksumrsync체크섬 파일에 전에 모든 변경된 파일은 크기에 관계없이 / 시간, 전송되도록하는 전송. --append-verify설명한 내용이 설명서 또는 제한적인 경험과 일치하지 않아 예기치 않은 동작의 원인이 있습니까?
TomG

--append-verify참조 --append: If a file needs to be transferred and its size on the receiver is the same or longer than the size on the sender, the file is skipped.파일 때문에 파일을 전송해야하더라도 --checksum여전히 건너 뛸 수 있습니다.
Tom Hale

6

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


네트워크 사본은 로컬 사본과 다르게 취급되며 여기서 문제가됩니다.
roaima

@roaima 그 출처가 무엇인지, 또는 차이점이 무엇인지 자세히 설명하는 문서가 있습니까? 나는 (거대한) 맨 페이지에서 찾지 못했습니다.
Jonas Schäfer

@JonasWielicki 매뉴얼 페이지는 --whole-file옵션 설명 에서 인용합니다 .
roaima

@roaima 대단히 감사합니다! 이것은 또한 적절한 해결 방법이 있음을 의미합니다 --no-W(실제로 작동하는!)
조나스 Schafer 씨에게

@JonasWielicki는 매우 비효율적이므로 기본적으로 비활성화되어 있습니다. --no-W로컬 파일의 설정이 무엇인지 정확히 이해 하지 않으면 실제로 사용하고 싶지 않습니다 . 참조 unix.stackexchange.com/a/181018/100397
roaima

2

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


로컬 복사본은 비교되지 않고 단순히 덮어 쓰거나 --append바이트 오프셋에서 계속됩니다.
roaima

1

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

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

--no-whole-file

이 중 하나를 결합 --inplace하거나 --partial나중에 전송을 재개 할 수 있습니다.

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

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

경고 : 크기가 같은 대상 파일 --append-verify건너 뛰 므로 사용에주의 하십시오.


네트워크 전송의 rsync경우 변경된 부분 (델타 전송) 만 전송하기 위해 전송 전에 소스 및 해당 대상 파일을 비교합니다. 로컬-로컬 복사에 대해 동일한 작업을 수행하도록 --no-whole-file지시 rsync합니다. 이 문서는 단일 파일의 부분 전송 재개에 영향을 줄 것이라고 제안하지 않습니다. rsync의도적으로 동일한 크기와 타임 스탬프를 가진 파일은 의도적으로 건너 뜁니다. 어느 쪽도하지 --append-verify않고 --no-whole-file그 동작을 변경해야하지만, --checksum작업을해야하거나 디스크 IO의 비용으로 마음의 평화를위한
TomG

--append-verify날짜가 다른 동일하거나 큰 크기의 파일 건너 뜁니다 ( 예기치 않은). 어쨌든 전체 파일 체크섬을 수행 할 것이기 때문에 --checksum 모든 파일에 대한 필요 rsync는 없지만 전송되는 파일에만 적용됩니다.
Tom Hale
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.