나는 rsync 3.1.1을 사용하여 두 개의 디스크를 동기화 상태로 유지합니다. 그 중 하나는 네트워크에 있고 삼바 공유로 마운트됩니다 /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)이 걸린다는 것입니다.앞으로파일 이동을 시작하세요. 많은 작은 파일에 대한 파일 목록을 계산해야 하기 때문인 것 같습니다. 이 기간 동안 네트워크 활용도는 200~500KB/s로 낮았고 파일 전송 속도는 약 40MB/s였습니다.
일반적으로 rsync가 복사해야 할 항목을 찾는 데 약 15m가 소요되고 복사하는 데 5초가 소요되며 복사할 다른 파일을 5분 동안 계속 확인합니다. 전체적으로 5초짜리 파일 복사가 20분 동안 지속되었습니다!
폴더를 제외하는 것 외에 파일을 복사하는 데 시간이 오래 걸리지 않도록 할 수 있는 방법이 있나요? rsync가 모든 파일 목록을 처음부터 다시 빌드할 필요가 없도록 구현할 수 있는 "캐싱"이 있습니까?
답변1
귀하의 경우 rsync
두 개의 로컬 파일 트리 간에 복사 중이므로 대부분의 최적화(유명한 델타 알고리즘 포함)가 비활성화됩니다. 원격 서버에서 실행할 수 있다면 rsync
(그래서 네트워크에서 진정한 클라이언트-서버 시나리오를 얻을 수 있다면) 큰 관심을 얻게 될 것입니다.
그럼에도 불구하고 고려해야 할 다른 옵션은 다음과 같습니다.
복사할 때 오래된 파일을 삭제하는 것에 대해 걱정할 필요가 없습니다. 이를 통해 더 빠른 전송을 더 자주 수행하고 느린 정리를 하루에 한 번으로 다운그레이드할 수 있습니다.
cp -au /mnt/ROUTER_WD_2TB/. /mnt/BACKUP_HITACHI_2TB/
rsync
전송하기 전에 전체 파일 목록을 작성하지 않는 데 사용되는 기본 삭제 알고리즘의 변형 :rsync -haAXi --quiet --delete --delete-during /mnt/ROUTER_WD_2TB/ /mnt/BACKUP_HITACHI_2TB/
최상위 디렉터리를 별도의 작업으로 분할하고 병렬로 실행합니다. 디스크 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
이러한 제안 사항 중 어느 것도 도움이 되지 않으면 다른 제안 사항을 추가하여 결과를 확인 --verbose
하는 것이 좋습니다 . rsync
변경되지 않은 모든 파일이 삭제될 것으로 예상됩니다. 파일이 충분하다면 시간이 오래 걸릴 것입니다.