폴더를 압축하지만 특정 파일 형식을 압축하지 않고 gz 파일에 포함합니다.

폴더를 압축하지만 특정 파일 형식을 압축하지 않고 gz 파일에 포함합니다.

폴더를 압축하고 백업을 저장하기 위해 pigz와 함께 tar를 사용하고 있습니다. 이 폴더의 크기는 ~250GB 이상입니다. 이 폴더에는 다양한 하위 폴더에 있는 수많은 텍스트 및 로그 파일, ISO 및 zip 파일을 포함한 다양한 콘텐츠가 있습니다. 이 폴더를 완전히 압축하는 데는 약 1시간(경우에 따라 그 이상)이 소요됩니다. 현재 저는 이것을 스크립트에 사용하고 있습니다.

tar -cf - <data_folder> | pigz -1 > <output_file>.tar.$

ISO 및 zip 파일의 압축을 제외하여 압축 시간을 줄이고 싶습니다. 나는 그것들(ISO와 zip 파일)이 gzip 파일에 그대로(압축되지 않은) 포함되기를 원합니다.

내 질문은 이것입니다:유형에 따라 파일을 선택적으로 압축하고 gzip 출력에 압축되지 않은 파일을 계속 포함할 수 있습니까? 이것을 시험해 보는 방법?

답변1

아니요, 그럴 수 없습니다. 적어도 직접적으로는 아닙니다.

tar어떤 압축도 하지 않습니다. 단지 (가상) 파일 시스템의 일부를 읽고 그로부터 하나의 응집력 있는 스트림을 생성합니다. 이 스트림은 종종 압축 도구/라이브러리(예: gzip/libz)로 전달됩니다. 압축 부분은 개별 파일을 보거나 알지도 못합니다. 에 의해 생성된 스트림을 압축합니다 tar. 따라서 현재 접근 방식에 선택적 압축을 추가할 수 없습니다.

당신이 할 수 있는 일은 모든 파일을 개별적으로 압축한 다음 tar 아카이브에 추가하여 tar 아카이브를 점진적으로 구축하는 것입니다. 이렇게 하면 압축되지 않은 ISO 이미지를 아카이브에 추가하도록 선택할 수 있습니다. 그러나 tar 아카이브 자체는 압축되지 않습니다. 따라서 압축을 푼 후에는 적절한 경우 각 파일을 개별적으로 압축을 풀어야 합니다.

isos 및 zip 파일을 압축하면 실제로 얼마나 많은 시간이 낭비됩니까? 스트림 처리를 보면 tar | pigz > <file>그렇게 많은 시간을 낭비하지는 않을 것 같습니다. 디스크에 블록이 기록되고, 다음 블록이 압축되고, 스트림이 구축됩니다. 그것은 동시에 일어나고 있습니다.

어쩌면 전략을 최적화할 수도 있습니다.

모든 iso 및 zip 파일을 전용 디렉토리에 넣은 다음 세 단계로 아카이브를 구축할 수 있습니다. 나머지는 tar&압축하고, iso 디렉토리를 추가하고, zip 디렉토리를 추가합니다. 결과 아카이브에는 여전히 외부 아카이브의 압축을 풀고 내부 아카이브의 압축을 풀고 압축을 푸는 긴 추출 절차가 필요합니다. 그러나 이는 모든 개별 파일의 압축을 푸는 것보다 더 실현 가능합니다.

아니면 명령을 조정합니다. 파일 시스템의 tar 아카이브여야 합니까, 아니면 dd전체 파티션을 백업하는 데 사용할 수 있습니까? 전체 파티션을 백업하면 디스크에서 지속적으로 읽을 수 있다는 장점이 있으며 이는 파일 시스템으로 작업하는 것보다 더 빠를 수 있습니다. pigziso 및 zip 파일이 문제인 경우 더 큰 덩어리로 작업하도록 조정할 수 있다고 확신합니다 . 그러면 속도가 빨라질 것입니다. 또한 mbuffer결과를 디스크에 쓰기 전에 버퍼링(예: )을 추가하여 미디어 액세스를 더욱 최적화할 수도 있습니다.

관련 정보