내 환경은 커널 3.19.0-28-generic 및 Btrfs v3.17이 포함된 Ubuntu 15.04입니다.
백업 스크립트에 사용하는 동일한 외부 USB 하드 디스크가 두 개 있습니다. 그 중 하나는 로 포맷 btrfs
되고 다른 하나는 ext4
. 소스 파일 시스템은 항상 ext4
. 명령 rsync
은 다음과 같습니다.
rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"
btrfs
방금 백업을 수행하는 데 시간이 걸린다는 것을 깨달았습니다.극도로오랜 시간: 에 동일한 복사를 수행하는 데 4분이 걸리는 것과 비교하면 1시간이 약간 더 걸립니다 ext4
.
디스크 오작동을 배제하기 위해 dd
Ubuntu와 함께 제공되는 "디스크 유틸리티"를 사용하여 몇 가지 벤치마크를 수행했지만 두 디스크 모두에서 동일한 성능을 얻었습니다. 느린 부분은 이전 백업에 대해 하드링크되는 것 같습니다. 조각 모음 및 스크러빙 후에도 다음 명령은 에서는 약 53분이 걸리지 btrfs
만 에서는 1분 밖에 걸리지 않습니다 ext4
.
cp -arl "$previousBackup" "$destDir"
인터넷에서 조사한 결과 btrfs
하드링크로 인해 의 성능이 저하된다는 힌트를 찾았지만 이를 예상하지는 않습니다.거대한차이점. 이 명령이 더 빠르지만 완료하는 데 여전히 30분 이상 걸린다는 것을 알았습니다.
cp -ar --reflink "$previousBackup" "$destDir"
이 동작에 대한 경험이 있고 이를 확인할 수 있는 사람이 있습니까? 이를 수정하는 간단한 방법이 있습니까(예: 다른 마운트 옵션) 아니면 가능한 한 많은 하드링크를 삭제하고 참조링크만 사용해야 합니까?
편집하다
나도 방금 알았어 심지어삭제 중의 디렉토리에는 btrfs
1시간 이상이 필요합니다. "트윈" 디스크에서는 동일한 작업이 즉각적으로 수행됩니다 ext4
. 여기에는 분명히 메타데이터에 문제가 있습니다.
답변1
당신은 당신이 하드 링크를 복사하고 있다고 말합니다.rsync
명령인데 -H
깃발은 어디에 있나요? 나는 당신의 명령에서 그것을 볼 수 없습니다 :
rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"
rsync
하드링크와 관련하여 내가 어떻게 작동하는지 이해하는 방법은 -H
플래그가 없으면 하드링크 대신 실제 데이터가 복사된다는 것입니다.rsync
매뉴얼 페이지:
-H, --하드 링크
이는 rsync에게 전송에서 하드 링크된 파일을 찾고 수신 측에서 해당 파일을 함께 연결하도록 지시합니다. 이 옵션이 없으면 전송 시 하드 링크된 파일이 별도의 파일인 것처럼 처리됩니다.
많은 유사한 파일을 하드링크하는 대신 반복해서 복사하는 절차를 수행하면 전송 시간이 느려질 것이라고 상상할 수 있습니다.
-z
또한 ( ) 플래그 사용 --compress
도 고려해 보세요.
-z, --압축
이 옵션을 사용하면 rsync는 파일 데이터가 대상 시스템으로 전송될 때 압축하여 전송되는 데이터의 양을 줄입니다. 이는 느린 연결에서 유용합니다.
예, 이는 동일한 시스템에서의 USB-USB 전송이므로 속도가 이미 최적화되었을 가능성이 높지만 -z
자연스러운 USB 데이터 전송 병목 현상을 극복하는 데 도움이 될 것입니다.
이러한 플래그와 기타 플래그를 설명하는 훌륭하고 간단한 튜토리얼여기에서 찾을 수 있습니다.