rsync가 로컬 파일에 델타 전송을 사용하지 않는 이유는 무엇입니까?


25

공간 예약이 설정된 토런트 클라이언트가 현재 다운로드하는 큰 ISO 이미지가 있습니다. 즉, (4 Mib)의 일부 청크가 다운로드로 인해 끊임없이 변경되는 동안 파일 크기가 변경되지 않습니다.

90 % 다운로드시 초기 rsync를 수행하여 나중에 시간을 절약합니다.

$ rsync -Ph DVD.iso / media / another-hdd /
증분 파일 목록 전송

DVD.iso
       2.60G 100 % 40.23MB / s 0:01:01 (xfer # 1, tocheck = 0 / 1)

송신 2.60G 바이트 수신 73 바이트 34.59M 바이트 / 초
총 크기는 2.60G이며 속도는 1.00입니다.

그런 다음 파일이 완전히 다운로드되면 다시 동기화합니다.

total size is 2.60G   speedup is 1.00

Speedup = 1은 델타 전송이 사용되지 않았지만 파일의 90 %가 변경되지 않았지만 대상 디렉토리가 다른 FS에 있고 복사하는 데 몇 분이 소요됨을 나타냅니다. 왜 전송 속도를 높이려고하지 않습니까?! rsync델타 전송을 강제 로 사용하려면 어떻게 해야합니까?


6
당신이하고있는 일은 말이되지 않습니다. rsync의 목적은 로컬이 아닌 네트워크를 통한 파일 전송 속도를 높이는 것입니다. 차이점을 찾으려면 소스와 대상을 모두 읽어야합니다. 차이점을 찾기 위해 대상을 로컬로 읽는 데 걸리는 시간에는 일반 사본을 사용할 수도 있습니다. 파일을 복사하는 대신 처음에 대상으로 파일을 다운로드하십시오.
— psusi

1
로컬에서 작업하면 해시를 계산하는 것보다 복사하는 것이 더 빠르기 때문에 delta-xfer를 사용하지 않습니까? 그렇다면 — 답변 게시 plz :)
— kolypto

9
특정 상황에서 로컬 디스크에 쓰는 것보다 읽기 속도가 빠를 수 있습니다. 또한 SSD의 마모를 줄일 수 있습니다. 이것은 확실히 유효한 질문이며 그 대답은 나에게 매우 가치가 있습니다.
— HRJ

2
위의 HRJ의 의견과는 별도로 @psusi는 대상 파일이 리 링크 된 경우도 고려합니다 (예 : btrfs 또는 ocfs2). 동기화 중에 쓰기를 최소화하면 전체 공간 사용량에 막대한 차이가 생길 수 있습니다.

답변:


20

맨 페이지 에 따르면 psusi가 옳습니다.

-W, --whole-file : 소스와 대상 시스템 사이의 대역폭이 디스크 대역폭보다 높을 때 (특히 "디스크"가 실제로 네트워크 파일 시스템 인 경우)이 옵션을 사용하면 전송 속도가 더 빠를 수 있습니다. 소스 및 대상이 로컬 경로로 지정되어 있지만 배치 작성 옵션이 적용되지 않는 경우에만 기본값입니다.


10
오 감사합니다! 나는이 줄을 잘못 썼다 :) 델타-no-W
— 트래 저

1
내 시스템 -no-W에서는 긴 옵션 만 작동하지 않습니다 -no-whole-file. 이 스위치가 필요한 이유는 백업을 설정하고 수정 시간이 같지 않은 큰 파일 (예 : 이미지)이있을 때입니다. 로컬 파일 시스템에서 델타 전송을 사용하여 이러한 파일을 동기화하는 것이 훨씬 빠르며 속도는 163.26입니다.
— 바람 방랑자 제시 Jesse

6
@JessetheWindWanderer, 긴 옵션은 --no-whole-file( --처음 에는 이중 을 유의하십시오 )입니다.
— Eddie C.

감사합니다 Eddie C. 나는 우리의 방법을 이해할 수 있다면 내 의견을 편집 할 것입니다 :-(
— 바람 방랑자 Jesse

17

이 질문에 대한 직접적인 대답은 다음과 같습니다.

--no-W로컬 또는 원격에 상관없이 플래그를 사용하여 델타 압축을 강제 실행 하십시오 .

업데이트 : 이야기가 더있는 것 같습니다. delta compressionrsync의 수신 및 전송 프로세스 사이에서만 활성화 되는 것으로 보입니다. 파일을 파일 시스템으로 출력 할 때 rsync델타 압축이 켜져 있어도 전체 파일을 쓸 수 있습니다.

"Wakan Tanka 's 조사"를 참조 하십시오 .


2
--no-W내 경우에는 항상 전체 파일을 전송하십시오. unix.stackexchange.com/questions/291156/…를
— Tanka

@WakanTanka 흥미 롭습니다! 내 답변을 업데이트했습니다.
— HRJ

3

기본적으로 rsync는 먼저 다양한 안전상의 이유로 대상 파일의 새 사본을 작성한 후 대체합니다. --inplace와 함께 지정하여이를 무시할 수 있습니다 --no-whole-file. 이것은 rsync에게 타겟 페이지의 내부 편집을하도록 지시하고, 매뉴얼 페이지에 문서화 된 다양한 위험 (일반적으로이 상황에서는 사소한)을 받아들입니다.


0

기본적으로 rsync대상에서 파일 사본을 작성한 다음 원본을 새 사본으로 원자 적으로 대체합니다. 이것은 안전상의 이유로 수행됩니다. 찾고 있는 것은 소스와 관련하여 변경된 대상 파일 부분 만 수정 하는 --inplace옵션 rsync입니다.

OP의 유스 케이스의 경우 사전 할당도 해제하여 희소 사본을 동기화 할 수 있으므로 훨씬 빠릅니다. 다운로드의 경우 VFAT와 같은 매우 오래된 파일 시스템을 사용하지 않는 한 조각화에 대해 걱정하지 마십시오. 특히 미디어 파일은 스토리지 미디어의 최대 성능으로 읽히지 않으므로 조각 모음을하는 것이 낭비입니다.

다운로드 디렉토리를 드물게 대상 볼륨에 복사하려면 다음 순서로 플래그 및 조작을 권장합니다.

rsync --ignore-existing -vxaHAXS /source /destination
rsync --inplace -vxaHAX /source /destination

첫 번째 패스는 새 파일을 대상에 드물게 복사합니다. 두 번째 패스는 기존 파일을 제자리에서 업데이트하고 변경 사항 만 복사합니다.

스파 스 및 인플레 이스 델타 복사를 수행하므로 추가 IO가 많이 발생하지 않으면 서 반복적으로 실행할 수 있습니다. 20 개의 토렌트가 동시에 실행 되더라도 대상에서 쓰기를 증폭하거나 소스 / 대상 볼륨을 스 래시하지 않습니다.


여기서 "엄청나게"라는게 무슨 소리 야? 내가 말할 수있는 한 실제로 단어의 의미를 반영하지는 않습니다.
— Julius

@Julius : 정확히 의미하는 바를 의미합니다. 스파 스 할당을 완벽하게 지원하는 파일을 복사하십시오. 예를 들어 40GB HDR 영화는 소스에서보다 더 많은 공간을 차지하지 않습니다. VirtualBox 디스크 이미지와 동일합니다. 명시된 바와 같이 OP는 사전 할당을 비활성화해야 작동합니다.
— 윌
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.