병렬 파일 아카이버 (tar와 같은)가 있습니까?


39

파일의 병렬 아카이브를 위해 무언가가 있습니까?

Tar는 훌륭하지만 테이프 아카이브를 사용하지 않으며, smp가 있기 때문에 아카이브가 bzip2와 같은 압축으로 빠르게 발생하는 것이 더 중요합니다.


7
tar는 단순한 테이프 그 이상입니다. 이름은 원래 테이프에서 나왔지만 요즘에는 선택적으로 압축하여 디렉토리 구조 정보를 유지하면서 재배포를 위해 단일 파일에 항목을 넣고 싶을 때 주로 사용됩니다.
Kevin M

vbtechsupport.com/1614에서 벤치 마크 된 병렬 압축 도구는 꽤 있지만 아직 tar의 병렬 버전을 찾지 못했습니다
p4guru

핸들 (수락 포함)에서 제공하는 답변 없음 디렉토리는 , 지금까지 내가 말할 수있는 - 그들은 처리하지 파일을 . 나는 zip디렉토리를 처리 할 수있는 것으로 만 본다 : |
warren

1
사실, 우리가 일반적으로 수행하는 패키지입니다 디렉터리tar보관 한 후 (같은 파일 압축기를 사용하여 패키지를 압축 gzip, pigz등). 표준 입력 / 출력의 데이터 스트림에서 작업 할 수 있으므로 두 단계로 수행 할 수 있지만 한 단계로 수행 할 수도 있습니다. 결과는와 매우 유사 zip하지만 더 다양합니다.
gerlos

답변:


35

pbzip2를 찾고 있다고 생각합니다.

PBZIP2는 pthread를 사용하고 SMP 머신에서 거의 선형 속도 향상을 달성하는 bzip2 블록 정렬 파일 압축기의 병렬 구현입니다.

상기 봐 가지고 프로젝트 홈페이지를 또는 당신의 마음에 드는 패키지 저장소를 확인합니다.


1
또한 시도 할 수 pigzpxz병렬 구현을 gzip하고 xz. 와 같은 명령을 사용하여 압축하고를 사용하여 압축을 tar c dir | pigz -c > dir.tar.gz풀 수 있습니다 pigz -cd dir.tar.gz | tar xf -.
gerlos

3
오늘의 명령은 tar -cf dir.tar.gz -I pigz dirand tar -xf dir.tar.gz -I pigz입니다. 또한 xz스레드됩니다 : 사용 XZ_OPT=-T0 tar -cJf dir.tar.gz dirXZ_OPT=-T0 tar -xJf dir.tar.gz.
Rich

20

7zip-mmt플래그 가 주어지면 여러 스레드에서 실행될 수 있지만 7z- 아카이브로 압축 할 때만 압축 할 수 있지만 일반적으로 zip보다 느리므로 아카이브를 작성합니다. 다음과 같이하십시오 :

7z a -mmt foo.7z /opt/myhugefile.dat

7z는 압축률과 컴포지션 / 디 컴파일 시간, 랜덤 액세스와 더 나은 압축 등의 장단점을 효과적으로 제어 할 수있는 훌륭한 아카이버입니다. 그러나 tar만큼 메타 데이터를 거의 저장하지 않으므로 소유자 / 권한을 잃게됩니다.
Peter Cordes

이 옵션은 기본적으로 켜져있는 것처럼 보입니다. 적어도 성능이 향상되지 않았으며 두 경우 모두 7z 출력에 CPU 코어 수가 표시됩니다.
Andrey Starodubtsev

14

OP는 병렬 압축이 아닌 병렬 아카이브에 대해 질문했습니다.

소스 자료가 다른 디렉토리 / 파일이 다른 디스크에 있거나 파일이 압축 도구의 입력 속도를 초과하는 빠른 단일 디스크 인 파일 시스템에서 온 경우 실제로 여러 입력 스트림을 갖는 것이 유리할 수 있습니다 압축 레이어로 이동합니다.

의미있는 질문은 병렬 아카이브의 출력이 어떻게 생겼습니까? 더 이상 단일 파일 디스크립터 / stdout가 아니라 스레드 당 파일 디스크립터입니다.

지금까지의 예는 Postgresql의 병렬 덤프 모드로 pg_dump, 백업 할 테이블 세트를 통해 작업하는 스레드 (큐를 소비하는 여러 스레드가있는 작업 큐)와 함께 디렉토리로 덤프합니다.

주류에 해당하는 실제 병렬 아카이브는 확실하지 않습니다. ZFS에서 사용하기 위해 Solaris Tar에 대한 해킹이있었습니다 : http://www.maier-komor.de/mtwrite.html

여러 스레드를 성공적으로 실행하는 일부 전용 백업 도구가 있지만 작업 부하를 디렉터리별로 높은 수준으로 나누는 것보다 훨씬 많은 도구가 있습니다.


11
tar --use-compress-program=pigz  ....

pigz선호하는 병렬 압축 프로그램으로 교체 하십시오. 사용 이유 tar는 소유자, 그룹, 권한을 저장할 수 있기 때문입니다. 이 메타 데이터는 종종 유용합니다 (예 : 복잡한 시스템에서 디렉토리 트리 복원).


4
tar -c --use-compress-program = pigz -f myDirectory.tar.gz myDirectory /
markusN

1
tar에 대한 모든 옵션 AFAIK는 -I옵션 과 함께 정상적으로 사용할 수 있습니다 --use-compress-program. 따라서 as를 tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."사용하여 멀티 스레드 옵션에 적용 할 수 있습니다 . 이것이 가장 적합하고 가장 적합한 답변입니다 (IMHO). 감사합니다 @uDude! :)pigztar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo..."
ILMostro_7

10

pigz 는 gzip의 병렬 구현이지만 압축 해제가 아닌 압축에 여러 프로세서 만 사용할 수 있습니다.


2
몇 가지 실험을했고, pigz실제로 여러 스레드를 사용할 수있을 것 같다 또한 압축 해제 할 때. 의 출력을 비교하는 시도 time tar xf dir.tar.gz그리고 time pigz -cd dir.tar.gz | tar xf -(제 4 코어 CPU에 약간의 절반 이하 시간 소요).
gerlos

4
@gerlos time파이프 라인에서 사용 하면 첫 번째 명령 만 시간 지정됩니다. 로부터 pigz문서 :. "감압은 결과, pigz가 압축 해제에 단일 스레드 (메인 스레드)를 사용하여 적어도하지 그 목적을 위해 특별히 준비된 폐의 스트림없이, 병렬화 할 수 없지만 읽기 세 가지 다른 스레드를 만들 것이다, "필요한 경우 감압 속도를 높일 수있는 쓰기 및 계산을 확인하십시오."
augurar


8

tar파일을 정확하게 복제하고 디렉토리 트리와 원래 파일 속성을 보존하는 데 매우 유용한 아카이브 형식입니다. TAR은 모든 것이 보존되기 때문에 백업에 매우 좋습니다. 내가 사용하는 pbzip2내가 아주 좋은 결과를 시스템 백업에 사용하는 타르 아카이브를 압축 할 수 있습니다.

이 명령은 트릭을 수행해야합니다.

tar -cpS "infile" | pbzip2 > "outfile"

pbzip2 LzMA 압축 (pxz와 같은)은 큰 파일을 압축 / 압축 해제 할 때 TON의 RAM을 사용합니다 (8GB의 RAM으로 8 개의 스레드를 실행하려고 시도했으며 pxz는 디스크로 스왑을 시작했습니다).



0

압축이 고려되는 한, xz버전 5.2는 -T옵션을 통한 병렬 압축을 지원하기 때문 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.