tar는 데이터를 gzip으로 전달하기까지 오랜 시간이 걸립니다

tar는 데이터를 gzip으로 전달하기까지 오랜 시간이 걸립니다

내가 알고 싶은 것은 데이터를 gzip으로 전달하기 전에 tar가 무엇을 하고 있는지입니다. 이 단계를 건너뛰도록 할 수 있나요?

가상 컴퓨터 HDD 이미지의 복사본을 압축하기 위해 Synology NAS 상자(DSM 6.2.1-23824 업데이트 1, tar 버전 1.28 실행)에서 실행할 스크립트를 작성하고 있습니다. 소스 파일은 btrfs 파일 시스템에 스파스 파일로 저장됩니다. 나는 약간의 압축, 바람직하게는 희소성을 유지하고 속도를 최대화하는 것을 찾고 있습니다.

한 번에 하나의 파일만 작업하고 있지만 처음에 tar를 사용하는 이유는 해당 --sparse플래그를 사용하기 위한 것입니다. gzip은 파일을 희소 파일로 압축을 풀 수 없기 때문입니다. 내가 실행하려는 중심 명령은 다음과 같습니다.

GZIP=-1 nice -n 19 tar --keep-old-files --sparse -czf $destDir/$vmFolder/$file.tar.gz $file  2>>$log

하지만 하드디스크 이미지의 크기(2GB~120GB)로 인해tar가 시작되고 미친 듯이 소스 코드를 가능한 한 빨리 읽는 데 몇 분이 걸리지만 gzip은 아무 것도 작동하지 않습니다.. 이 프로세스가 지속되는 시간은 소스 파일의 크기에 비례합니다.

내가 문제를 해결하려고 노력한 것 :

  • gzip만 사용하면 출력이 즉시 시작되지만 희소 정보가 손실됩니다.
  • 아래와 같이 파이프를 사용하면 동일한 작업을 수행합니다.

    nice -n 19 tar --keep-old-files --sparse -cf - $file | nice -n 19 gzip --fast > $destDir/$vmFolder/$file.tar.gz 2>>$log
    

물론 NAS 상자에는 Intel Atom D2700만 있지만 tar 작업은 CPU를 많이 사용해서는 안 됩니다. gzip은 CPU를 많이 사용하며 이는 특히 구형 Atom CPU의 경우 제한 요소가 될 수 있다는 점을 이해합니다. 사용 lz4하고 싶었지만 lzopSynology OS에는 gzip, 7z 및 xz만 있는 것 같습니다.

스크립트의 일부로 내가 사용하고 싶은 만큼 많은 명령을 병렬로 실행할 수 있습니다.이 세마포어 스크립트단일 스레드 gzip을 사용하더라도 CPU의 모든 코어를 활용하는 템플릿입니다.

편집하다:옵션 없이 스크립트를 테스트했지만 --sparse계속 사용하면 tar이 문제가 없으며 데이터가 즉시 gzip으로 흐릅니다.

관련 정보