rsync 파일 목록의 계산 속도를 높이거나 피하십시오


12

rsync 3.1.1을 사용하여 두 개의 디스크를 동기화합니다. 그 중 하나는 네트워크에 있고에 Samba 공유로 마운트되어 /mnt/ROUTER_WD_2TB/있습니다. 네트워크 제한으로 인해 최대 30-40MB / s 속도의 소스입니다. 다른 대상은 로컬 (피크 110MB / s)로 마운트되어 있습니다 /mnt/BACKUP_HITACHI_2TB/.

다음 rsync 명령을 사용합니다.

rsync  -haAXi --quiet --append-verify --delete /mnt/ROUTER_WD_2TB/* /mnt/BACKUP_HITACHI_2TB/.

디스크에는 많은 파일이 있으며 대부분 파일이 작습니다.

문제는 rsync가 파일을 이동 하기 시작 하는 데 꽤 오랜 시간 (10-20m)이 걸린다는 것입니다 . 작은 수의 작은 파일에 대한 파일 목록을 계산해야하기 때문입니다. 이 기간 동안 newtwork 사용률은 200-500KB / s로 낮고 파일을 전송할 때 속도는 약 40MB / s입니다.

일반적으로 rsync는 약 15m가 걸리므로 복사해야 할 항목을 찾은 다음 5 초 동안 복사 한 다음 5 분 동안 복사 할 다른 파일을 계속 확인합니다. 대체로 5 초의 파일 사본이 20 분 동안 지속됩니다!

폴더를 제외하고 파일을 복사하기 전에이 오랜 시간을 피하기 위해 취할 수있는 조치가 있습니까? rsync가 모든 파일 목록을 처음부터 다시 만들 필요가 없도록 구현할 수있는 "캐시"는 무엇입니까?


1
이 스레드에서 해결책을 시도 했습니까? unix.stackexchange.com/questions/189878/…
UVV

@UVV 나는 그것을하지 않았습니다. 나는 그것을 할 수도 있지만 1) rsync는 이미 내 경우에 풀 코어를 사용하지 않는 것 같습니다 (= CPU 제한인지 또는 다른 위치에 있는지 확실하지 않습니다). 듀얼 코어 CPU에서는 2 배 개선 된 경우에도 여전히 개선의 여지가 많습니다.
AF7

그래, 이건 나 한테 미치겠 어, 왜 rsync가 이렇게 느려? "--size-only"rsync를 사용하더라도 증분 파일 목록을 작성하는 데 영원히 걸리는 것 같습니다. 왜? 파일 크기를 수동으로 확인하고 어떤 파일이 훨씬 빠르게 변경되었는지 확인할 수 있습니다! 너무 많은 시간을 낭비하고 있으며,이 멋진 기능들을 어떻게 끄나요? 편집 : 아, 괜찮아요, 우연히 'c'플래그를 설정했습니다. 체크섬이 없으면 매우 빠릅니다.
벤 파머

답변:


5

멀리로 rsync는 (가 유명합니다되는 그 델타 알고리즘 포함) 최적화의 대부분을 불가능하게하므로, 두 개의 로컬 파일 나무 사이에 복사하는 우려. 당신이 실행할 수있는 경우 rsync(당신이 당신의 네트워크를 통해 진정한 클라이언트 - 서버 시나리오를 얻을 수 있도록) 원격 서버에 당신은 견인의 상당한 양을 얻을 수 있습니다.

그럼에도 불구하고 여기에 고려해야 할 다른 옵션이 있습니다.

  1. 오래된 파일 삭제에 대한 걱정없이 복사. 이렇게하면 더 빠른 전송을 더 자주 수행하고 하루에 한 번만 느린 정리를 수행 할 수 있습니다.

    cp -au /mnt/ROUTER_WD_2TB/. /mnt/BACKUP_HITACHI_2TB/
    
  2. rsync전송하기 전에 전체 파일 목록을 작성하지 않도록 변형 된 기본 삭제 알고리즘을 사용하십시오 .

    rsync -haAXi --quiet --delete --delete-during /mnt/ROUTER_WD_2TB/ /mnt/BACKUP_HITACHI_2TB/
    
  3. 최상위 디렉토리를 별도의 작업으로 분할하고 병렬로 실행하십시오. 디스크 IO 바운드 인 경우 이것이 실제로 도움이되지 않으며 플래터를 회전시키는 경우 거의 확실하게 상황이 악화 될 수 있습니다.

    for d in /mnt/ROUTER_WD_2TB/*
    do
        rsync -haAXi --quiet --delete --delete-during "$d" /mnt/BACKUP_HITACHI_2TB/ >"/tmp/rsync.${d/*\/}.log" 2>&1 &
    done
    wait
    cat /tmp/rsync.*.log
    rm -f /tmp/rsync.*.log
    

이러한 제안 중 어느 것도 도움이되지 않는다면 다른 제안을 추가하여 그것이 무엇 --verbosersync하고 있는지 알아볼 가치가 있습니다 . 변경되지 않은 모든 파일을 방해하는 것으로 의심되며 파일이 충분하면 시간이 오래 걸립니다.


--delete --delete-during여전히 증분 파일 목록을 보냈지 만 나를 위해 그것을하지 않았지만 --delete --delete-before곧바로 building file list진행되었습니다. 내 생각 엔
mlissner

아니요, 거꾸로입니다. 두렵습니다. 을 사용하는 경우 파일 트리에서 두 단계 --delete-beforersync수행합니다. 하나는 삭제를위한 것이고 다른 하나는 복사를위한 것입니다.
roaima

감사. 이 경우 ... 증분 파일 목록을 작성하지 않는 방법은 무엇입니까?
mlissner

@ mlissner 그것은 여러 가지 요인에 달려 있습니다. 가장 큰 문제는 로컬에서 로컬로 복사하거나 로컬에서 원격 복사를 수행하는지 여부입니다.
roaima

로컬 디스크 중 하나는 USB 디스크이지만 로컬 로컬입니다.
mlissner

-2

-vv의 전체 로그를 보는 데 사용할 수 있습니다 rsync.


2
이것은 어떻게 질문에 대답 할 것인가, 즉 어떻게 이것이 속도를 향상시킬 것인가?
Kusalananda

로그를 볼 수 있습니다. rsync를 시작하는 데 시간이 오래 걸린 이유, rsync에서 건너 뛰어 시간을 단축 할 수있는 파일이있을 수 있습니다.
namaiiee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.