rsync 속도를 높이는 방법?


44

디렉토리를 외부 USB HDD에 동기화하기 위해 rsync를 실행하고 있습니다. 약 150 기가의 데이터입니다. 내가 추측 할 50000 + 파일.

현재 처음 동기화되고 있지만 파일을 1-5MB / s의 속도로 복사하고 있습니다. USB 2.0 인클로저의 경우 엄청나게 느립니다. 드라이브에서 다른 전송이 발생하지 않습니다.

내가 사용한 옵션은 다음과 같습니다.

rsync -avz --progress /mysourcefolder /mytargetfolder

Ubuntu Server 9.10을 실행 중입니다.


2
USB2 연결이 확실합니까? (비 동기화) 복사 또는 기타 쓰기 작업이 정상 속도로 실행됩니까? 그렇지 않은 경우 다른 USB 포트 / 케이블로 복사 / 기타 쓰기 작업을 시도 했습니까?
quack quixote

serverfault.com/questions/43014/… 도 참조하십시오. 사람들은 파이프로 연결된 두 개의 tar명령을 사용하거나을 제안 합니다 cpio.
Blaisorblade

답변:


38

첫 번째 동기화의 경우

cp -a  /mysourcefolder /mytargetfolder

rsync는 대상이 비어있을 때만 오버 헤드를 추가합니다.

또한 .. -z 옵션이 성능을 저하시킬 수 있으므로 느린 링크를 통해 데이터를 전송하지 않는 경우에는 사용하지 않아야합니다.


3
rsync는 원격 동기화를 위해 호출되기 때문에 로컬 연결 볼륨에 적합하지 않기 때문에 그렇게 불립니다 .
msanford

6
로컬 전송에도 사용할 수 있으며 훨씬 유연합니다. 첫 번째 동기화에 대해서만 과잉 일 수 있습니다.
Blaisorblade

1
rsync는 단방향 동기화이기도합니다. 서버 나 서버에서 백업하기에 매우 좋습니다. 그러나 로컬 TWO-Way 동기화를 이동식 드라이브에 동기화하려는 경우 csync csync.org/get-it 를 완전히 다른 프로젝트 인 csync2와 혼동하지 않도록 확인하십시오 .
바람 방랑자 제시 Jesse 's

3
rsync -avz --progress /mysourcefolder/ /mytargetfolder또는 내용을 미러링하는 대신 mysourcefolder내부 사본을 얻을 수 mytargetfolder있습니다
편집자

2
이 답변은 질문에 대답하지 않습니다. 문제는 rsync를 최적화하는 방법에 관한 것이지 cp 명령으로 바꾸지 마십시오.
oemb1905

38

동일한 네트워크에서 빠른 네트워크 또는 디스크 대 디스크에서 rsync를 사용하는 경우,

압축을 사용 하지 않음 -z

--inplace 사용

하드 드라이브 또는 네트워크의 성능까지 향상

압축은 많은 CPU를 사용합니다

인플레 이스를 사용 하지 않으면 하드 드라이브에서 많은 돈을 쓰게됩니다 (최종 파일을 만들기 전에 임시 파일을 사용함)

인터넷 (느린 네트워크)을 통한 압축에 적합합니다.

새로운 기능 : 대상에주의하십시오. NTFS "압축"이 활성화 된 경우 ... 대용량 파일의 속도가 크게 느려집니다 (200MB 이상이라고 함) rsync가 거의 중단 된 것 같습니다.


큰 파일에서 NTFS 압축 속도가 느림
Scott Kramer

맨 페이지에 '-인라인'에 관한 내용이 없습니다
Antoine

1
그것은 '--inplace'입니다
Scott Kramer

26

-W옵션을 사용하십시오 . 델타 / diff 비교를 비활성화합니다. 파일 시간 / 크기가 다른 경우 rsync는 전체 파일을 복사합니다.

또한 -z옵션을 제거하십시오 . 이것은 네트워크 트래픽을 압축 할 때만 유용합니다.

이제 rsync만큼 빨라야합니다 cp.


6
사소한 참고 : 저속 네트워크 트래픽 -z에만 유용 합니다. 네트워크가 충분히 빠르면 CPU에 의해 제한되므로 속도가 느려집니다.
WhyNotHugo

3
이 팁은 두 NAS 장치간에 파일을 전송하는 데 크게 도움이되었습니다.
djhworld

2
그러나 매뉴얼 페이지에 따르면 -W"소스 및 대상이 로컬 경로로 지정되어 있지만 배치 작성 옵션이 적용되지 않는 경우에만 기본값"입니다.
GuoLiang Oon

13

첫째,이 경우 파일 수는 중요한 요소가 될 것입니다. 각각 평균 ​​3MB입니다. OP의 경우 속도에 영향을 미치는 io 병목 현상이있을 수 있습니다. 더 여기 -그것은 꽤 마른 책이지만 표지 그림은 그만한 가치가 있습니다.

rsync를 사용하여 빈 디렉토리에 복사합니까? 속도를 높이는 방법은 다음과 같습니다.

  1. 아니요 -z-OP와 마찬가지로 -z를 사용하지 마십시오.
  2. 비 압축 속도가 빨라질 수 있습니다. 이것은 가장 큰 영향을 줄 수 있습니다 ... 테스트는 13,000 개의 파일, 총 크기 200MB 및 rsync 3.1.3을 사용했습니다. 동일한 내장 SSD 드라이브의 다른 파티션에 동기화했습니다. --no-compress를 사용하면 18MBps를 얻지 못하면 15MBps를 얻습니다. 그런데 cp는 16MBps를 얻습니다. 그것은 평균 파일 크기가 훨씬 작습니다. 또한 --no-compress에 대한 문서를 찾을 수 없습니다. 나는 stackexchange.com 의이 게시물에서 그것에 대해 배웠습니다.
  3. 파일 전체복사 하려면 -W-차이점을 비교하지 않으려면 항상이 파일을 사용하십시오. rsync의 요점은 차이점을 비교하고 변경 사항 만 업데이트하는 것입니다.
  4. 스파 스 파일을 잘 처리하는 -S- 스파 스 파일 이 없으면 아프지 않습니다.
  5. --exclude-from 또는 필요없는 파일을 제외하는 것과 비슷한 시간은 시간을 줄이지 만 전송 속도는 증가시키지 않습니다.
  6. 그것은이다 가능한 이 같은 출력을 파일로 보내는 경우 rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.err오류 메시지를 참조> 첫 번째> 기본적으로 당신이 일반적으로 볼 수있는 모든 물건과 함께 파일을 인쇄하고, 2 -.
  7. 마지막으로, 전송의 다른 부분에 대해 여러 rsync 인스턴스를 실행하는 것이 큰 도움이 될 수 있습니다.

내 명령은 다음과 같습니다.

rsync -avAXEWSlHh /source /destination --no-compress --info=progress2 --dry-run

모두 잘 보이면 "--dry-run"을 삭제하고 놓아 두겠습니다. A, X 및 E는 -a에 포함되지 않는 확장 된 속성 및 권한을 다루고, l은 소프트 링크, H는 하드 링크, h는 사람이 읽을 수있는 것입니다.

USB 드라이브 나 같은 드라이브 또는 네트워크를 통해 이미 동기화 된 디렉토리를 업데이트하려면 전송 속도를 최대화하기 위해 서로 다른 rsync 명령이 필요합니다.

보너스 - 여기 rsync 맨 페이지 가 있으며 하드 드라이브 속도를 테스트하려면 bonnie ++ 가 좋은 옵션이며 네트워크 속도에는 iperf를 사용해보십시오 .


* 게시물은 거의 10 년이되었지만 검색 엔진이 마음에 들며 계속보고 있습니다. 좋은 질문입니다. "rsync 속도를 높이는 방법"에 대한 최고의 대답이 "cp 대신 사용"이라고 생각하지 않습니다.


1
항목 7)과 관련하여 "blockdev --setra 8192 / dev / sdX"를 사용하여 미리 읽기 버퍼를 확장하여 기존 HDD를 소스로 사용하여 성능을 훨씬 향상시킬 수 있습니다. 그래서 저는 헤드 탐색을 줄이려고합니다.
user2480144

2

파일의 크기 분포를 말하지 않습니다. 작은 파일이 많으면 도구가 새 파일을 열고 OS에서 디렉토리 항목 및 기타 메타 데이터 (예 : 파일 시스템 저널)를 유지함에 따라 소스 및 대상 드라이브 모두에서 헤드 이동 대기 시간을 늘림으로써 전체 전송 속도가 줄어 듭니다. ext3 / ext4 및 NTFS와 같은 메타 데이터 저널링은 기본적으로 전송 중에 최신 상태를 유지합니다. 간단한 대량 전송이 발생하는 경우 파일 복사 프로세스는 더 큰 개체에 대해서만 "보폭"으로 진행됩니다.


0

당신은 확실히 rclone 을 시도 하고 싶습니다 . 이건 미친 짓이야

$ tree / usr [...] 26105 디렉토리, 293208 파일

$ sudo rclone sync / usr / home / fred / temp -P -L-전송 64

전송 : 17.929G / 17.929GBytes, 100 %, 165.692MBytes / s, ETA 0s 오류 : 75 (재 시도가 도움이 될 수 있음) 검사 : 691078/691078, 100 % 전송 : 345539/345539, 100 % 경과 시간 : 1m50.8s

LITEONIT LCS-256 (256GB) SSD와의 로컬 사본입니다.

첫 번째 실행에서 --ignore-checksum을 추가하여 더 빠르게 만들 수 있습니다.


0

기피

  • -z/ --compress: 압축은 네트워크가 아니라 RAM을 통해 전송되므로 CPU 만로드합니다.
  • --append-verify: 중단 된 전송을 재개합니다. 좋은 생각처럼 들리지만 위험한 경우가 있습니다. 소스와 크기가 같거나 큰 대상 파일은 무시됩니다. 또한 마지막에 전체 파일을 체크섬 --no-whole-file하므로 위험한 실패 사례를 추가하는 동안 속도가 크게 향상되지 않습니다 .

사용하다

  • -S/ --sparse: null 시퀀스를 희소 블록으로 변환
  • --partial또는 다음 -P중 하나입니다 --partial --progress. 나중에 다시 시작하기 위해 부분적으로 전송 된 파일을 저장하십시오. 참고 : 파일 이름은 임시 이름이 아니므로 전체 사본이 완료 될 때까지 대상을 사용할 것으로 예상되지 않도록하십시오.
  • --no-whole-file다시 보내야하는 것은 델타 전송을 사용합니다. 부분적으로 전송 된 파일의 절반을 읽는 것이 다시 쓰는 것보다 훨씬 빠릅니다.
  • --inplace 파일 복사를 피하기 위해 (그러나 전체 전송이 완료 될 때까지 대상을 읽는 것이없는 경우에만)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.