tar, gzip, rsync를 사용하여 스파 스 파일의 작업 속도를 높이려면 어떻게해야합니까? 사용 tar하여 네트워크를 통해 보내려면

스파 스 파일이 있습니다. ( du -h3G와 du -h --apparent-size100G를보고합니다.) 지금까지는 훌륭했습니다.

이제를 사용하여 파일을 압축하거나을 사용 tar하여 네트워크를 통해 보내려면 rsync3G만큼 많은 시간이 필요합니다. 이 도구는 모두 0을 읽는 것 같습니다.

나는 구멍이 어떻게 든 표시되어 있고이 도구가 어떻게 든 건너 뛸 수 있다고 생각 했습니까?

내 파일에 문제가 없을 가능성이 있습니까?

이에서 누락 된 기능입니다 tarrsync스파 스 파일을 찾을 수 없습니다로? tar매개 변수를 사용 --sparse했지만 속도가 빨라지지 않았습니다. rsync매개 변수 도 없습니다 --sparse.

스파 스 파일에서 이러한 도구의 속도를 높일 수있는 방법이 있습니까?



답변

bsdtar(적어도 libarchive3.1.2 부터 )는 FS_IOC_FIEMAP그것을 지원하는 파일 시스템 에서 ioctl을 사용하여 스파 스 섹션을 감지 할 수 있지만 (많은 다른 API도 지원하지만) 적어도 내 테스트에서는 이상하게도 tar자체 생성 파일 을 처리 할 수 ​​없습니다 (버그처럼 보입니다).

그러나 GNU tar를 사용 하여 추출하면 작동하지만 GNU tar는 bsdtar가 지원하는 일부 확장 속성을 처리 할 수 ​​없습니다.

그래서

bsdtar cf - sparse-files | (cd elsewhere && tar xpf -)

파일에 확장 된 속성이나 플래그가없는 한 작동합니다.

그것은 여전히으로 스파 스 완전히 (전용 제로) 파일이 작동하지 않습니다 FS_IOC_FIEMAPIOCTL 후 0 정도를 반환하고 그것과 같은 bsdtar제대로 그 처리하지 않습니다 (다른 버그?).

star( Schily tar )는 스파 스 파일을 감지하고 ( -sparse옵션 사용 ) 버그를 갖지 않는 bsdtar(하지만 많은 시스템에서 패키지화 되지 않은) 또 다른 오픈 소스 tar 구현입니다 .


답변

이 기사 에는 rsync최소한 다음과 같은 유용한 제안이 있습니다 .

문제

를 사용 rsync --sparse works하지만 불필요한 디스크 쓰기가 많이 발생합니다. 50GB 길이 (1GB 사용)에서 10 바이트를 변경하면 하나 또는 두 개의 블록 만 쓰게되므로 1GB가 쓰입니다. 이것은 느리고 디스크의 수명에 좋지 않습니다.

사용 rsync --inplace일을하지만, 비 – 스파 스 파일을 만듭니다.

–sparse와 –inplace를 동시에 사용할 수 없습니다 🙁 rsync에서는 허용되지 않습니다.

해결책

–inplace를 사용하여 기존 스파 스 파일을 업데이트하면 파일이 스파 스 상태로 유지되고 적은 수의 블록 만 작성됩니다. rsync –inplace가 스파 스가 아닌 파일을 만들 때만 가능합니다.

따라서 해결 방법은 파일이 아직 대상 시스템에없는 경우 소스 시스템의 모든 파일에 대해 대상 시스템에서 해당 길이의 빈 스파 스 파일을 작성하는 것입니다.

그런 다음 rsync –inplace는 의도 한대로 작동하여 스파 스 파일을 스파 스로 남겨두고 변경된 블록 만 디스크에 기록합니다.

따라서 올바르게 읽으면 먼저 대상에 빈 스파 스 파일을 만들고 싶습니다. 당신은 이것을 할 수 있습니다

truncate -s 3G filename

그런 다음 rsync --inplace파일을 복사하는 데 사용할 수 있습니다 . 한 번만 필요합니다.


같은 기사에서 Virtsync 를 사용 하는 것이 좋습니다.

가상 머신 디스크 이미지 및 데이터베이스와 같은 대용량 파일의 내용을 동기화하기위한 49 달러짜리 상용 Linux 명령 줄 도구.

이 유형의 상황에 맞게 작성된 것으로 보이므로 기꺼이 지불하려는 경우 이것이 최선의 해결책 일 수 있습니다.


답변