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.