작은 파일의 rsync 속도를 높이는 방법


15

다음 명령을 사용하여 한 서버에서 다른 서버로 수천 개의 작은 파일을 전송하려고합니다.

rsync -zr --delete /home/user/ user@10.1.1.1::backup

현재 전송 시간이 오래 걸립니다 (시간이 없습니다). 이것을 더 빨리 만드는 방법이 있습니까? 다른 도구를 사용해야합니까? rsync 프로토콜을 사용하는 대신 ssh를 통해 rsync를 사용해야합니까?


정말 수백입니까? 몇 천 이하로?
Zoredache

그것보다 조금 더 ... 475,576 총 9.3GB
국수

그것은 파일 시스템 수준에서 작동하는 거의 모든 도구를 사용하여 빨라질 것입니다. 당신이 프로파일 링을했다면 상당한 시간이 걸렸을 것입니다 stat().
Zoredache

-a그러나 -r?
kamae

답변:


13

병목 현상을 확인해야합니다. 재 동기화되지 않습니다. 네트워크 대역폭이 아닐 수도 있습니다. @Zoredache가 제안한 것처럼 모든 stat()통화에서 생성 된 막대한 수의 iops 일 가능성이 큽니다 . 모든 동기화 도구는 파일을 통계해야합니다. 동기화하는 동안 iostat확인을 실행 합니다.

그래서 질문이됩니다. 통계를 최적화하는 방법은 무엇입니까? 두 가지 쉬운 답변 :

  1. 더 빠른 디스크 서브 시스템을 확보하고 (필요한 경우 두 호스트 모두에서)
  2. 파일 시스템을 조정하십시오 (예 : ext3 마운트 noatime및 추가 dir_index).

우연히 디스크 iops가 한계가 아닌 경우 dir 트리를 여러 개의 개별 트리로 나누고 여러 rsync를 실행하는 실험을 할 수 있습니다.


1
고마워, 나는 dir_index를 조사하고 내가 어떻게 진행하는지 볼 것이다 (우리는 이미 noatime을 사용한다). 디스크 io가 병목 현상 인 것처럼 보이지만 RAID 5에서 이미 15k SAS 드라이브를 실행하고 있습니다. 다음 단계는 SSD이지만 호스팅 회사는 아직 해당 옵션을 제공하지 않습니다.
국수

5

압축은 작은 파일 (예 : 100 바이트 미만)에는 그다지 유용하지 않습니다. 작은 파일의 경우 압축 된 버전이 원본보다 더 클 수 있습니다. 플래그 rsync없이 명령을 시도하십시오 -z.

ssh보안에는 좋지만 전송 속도가 더 빠르지는 않습니다. 실제로 암호화 / 암호 해독이 필요하기 때문에 전송 속도가 느려집니다.

rsync전송할 데이터가 많기 때문에 처음 실행될 때 빠르지 않을 수 있습니다. 그러나이 명령을 정기적으로 실행하려는 경우 rsync변경되지 않은 파일을 전송하지 않는 것이 현명하기 때문에 후속 실행이 훨씬 빠를 수 있습니다 .


rsync클라이언트 만 사용하는 경우 에는 씬 뒤에 SSH를 사용합니다. rsync를 사용할 때 암호화를 비활성화하려면 방해가되지 않아야합니다. 참조 : stackoverflow.com/a/1821574/64911
mlissner

1

어떤 버전의 rsync를 사용하고 있습니까? 3.0.0 (양쪽 끝)보다 오래된 버전에는 증분 파일 목록 기능이 없으므로 대량 전송 속도가 빨라집니다.


두 서버 모두에서 rsync 3.0.5 사용
국수

1

-v --progressrsync 명령 줄에 추가

rsync는 2 단계로 수행됩니다.

  1. 크기와 mdate를 비교하기 위해 두 플랫폼에서 모든 파일을 심층 탐색
  2. 실제 양도

중첩 된 디렉토리에있는 수천 개의 작은 파일을 rsync하는 경우 rsync가 대부분의 시간을 하위 디렉토리로 이동하여 모든 파일을 찾는 것입니다.

탐색에 시간이 걸리지 않으면 새 파일 전송을 시작하는 모든 대기 시간이 추가되어 시간이 발생할 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.