병렬 bzip2와 gzip을 기본적으로 사용하는 가장 좋은 방법은 무엇입니까?


41

많은 컴퓨터에 둘 이상의 코어가 있지만 Bzip2 및 gzip은 하나의 코어 만 사용합니다. 그러나 lbzip2, pbzip2 및 pigz와 같은 프로그램이 있으며 사용 가능한 모든 코어를 사용하고 bzip2 및 gzip과 호환됩니다.

그렇다면 기본적으로 이러한 프로그램을 사용하는 가장 좋은 방법은 무엇 tar cfa file.tar.bz2 directory입니까? 그래서 bzip2 대신 lbzip2 / pbzip2 를 사용합니까? 물론 나는 아무것도 깨고 싶지 않습니다.


2
모든 사람에게 호기심 : 병렬 gzip / bzip이 실제로 직렬보다 빠릅니까? 나는 hdd 기록 속도와 다른 구속 조건이 더 문제가된다고 생각한다.
— con-f-use

@ con-f-use 이론적으로 SSD가 없다면 아카이브의 전체 크기가 증가함에 따라 더 빠를 수 있습니다.
— Marco Ceppi

1
CPU가 16 개인 시스템에서 gzip에서 pigz로 전환하면 시간이 1.2TB로 단축되고 네트워크를 통해 전송되어 18 시간 백업 및 14 시간 테스트에서 4 시간 백업 및 2 시간 테스트로 결과를 테스트합니다. 잠재적 인 병목 현상, 디스크 속도, 네트워크 속도, 처리 능력이 많이 있지만이 경우에는 IO 바인딩보다 CPU 바인딩이 분명했습니다. 고급 시스템이므로 결과가 다를 수 있습니다. 중요하지는 않지만 RHEL6에 있습니다
— cs_alumnus

답변:


32

bzip2, bunzip2 및 bzcat을 lbzip2로, gzip, gunzip, gzcat 및 zcat을 pigz로 symlink 할 수 있습니다.

sudo apt-get install lbzip2 pigz
cd /usr/local/bin
ln -s /usr/bin/lbzip2 bzip2
ln -s /usr/bin/lbzip2 bunzip2
ln -s /usr/bin/lbzip2 bzcat
ln -s /usr/bin/pigz gzip
ln -s /usr/bin/pigz gunzip
ln -s /usr/bin/pigz gzcat
ln -s /usr/bin/pigz zcat

/usr/share/doc/lbzip2/README.gz가 /usr/share/doc/pbzip2/README.gz보다 "더욱"보기 때문에 pbzip2 대신 lbzip2를 선택했습니다. 또한 tar 매뉴얼 은 lbzip2에 대해 설명 합니다.

편집하다:

Precise Pangolin에 포함 된 pigz-2.1.6은 알 수없는 접미사 (예 : initramfs-*. img)가있는 파일의 압축 풀기를 거부합니다. 이것은 Quantal과 함께 제공되는 pigz-2.2.4에서 수정되었습니다. 따라서 Quantal까지 기다리 거나 Quantal 패키지를 수동으로 설치 하거나 gunzip / gzcat / zcat을 아직 연결하지 않을 수 있습니다.


7
이는 대부분의 사람들의 $ PATH에서 / usr / local / bin /이 / bin / 앞에 있기 때문에 효과적입니다. 무언가가 / bin / gunzip을 직접 호출하거나 누군가가 $ PATH에 / bin을 먼저 가지고 있으면 pigz를 사용하지 않습니다. 이 작업을 수행하려면 dpk-divert를 사용 하고 모든 바이너리에 대해 이와 같은 작업을 수행 할 수 sudo dpkg-divert --divert /bin/gunzip.orig --rename /bin/gunzip; sudo ln -s /usr/bin/pigz /bin/gunzip있지만 pigz가 모든 gzip 플래그와 100 % 호환되지 않을 가능성이 있으므로주의하십시오.
— Mark McKinstry

31

symlink 아이디어는 정말 좋습니다.
또 다른 작업 솔루션은 별칭입니다 tar.

alias tar='tar --use-compress-program=pbzip2'

또는 각각

alias tar='tar --use-compress-program=pigz'

다른 종류의 기본값을 만듭니다.


추가 혜택 : 원래 기능을 유지하려면 'partar'와 같은 별칭을 사용할 수 있습니다 (어떤 이유로 든). 슬프게도 'ptar'는 perl 구현에 의해 수행됩니다
— jena

13

심볼릭 링크 답변이 실제로 잘못되었습니다. 전체 시스템에서 기본 gzip (또는 bzip2)을 pigz (또는 pbzip2)로 바꿉니다. 병렬 구현은 단일 프로세스 버전과 매우 유사하지만 명령 줄 옵션의 미묘한 차이는 이러한 차이에 의존하는 핵심 시스템 프로세스를 손상시킬 수 있습니다.

"--use-compress-program"옵션이 훨씬 나은 선택입니다. 두 번째 옵션 (별명과 유사)은 GNU tar에서 지원하는 TAR_OPTIONS 환경 변수를 설정하는 것입니다.

$ export TAR_OPTIONS = "-use-compress-program = pbzip2"
$ tar czf myfile.tar.bz2 mysubdir /

6
나는 2011 년부터 심볼릭 링크를 사용하고 있으며 (편집에서 언급 한 경우를 제외하고) 파손을 보지 못했습니다. 그리고 그러한 미묘한 차이가 발견되지 않고보고되지 않으면, 우리는 비 병렬 버전으로 영원히 붙어있을 것입니다. TAR_OPTIONS = "-use-compress-program = pbzip2"를 사용하면 bzip2와 gzip을 구분할 수없는 것 같습니다.
— elmicha

이것은 나를 위해 작동하지 않았습니다.
— Derek Perkins

3

매력적인 옵션 중 하나는 기본적으로 다중 스레드를 사용하도록 tar를 다시 컴파일하는 것입니다. 이 stackoverflow 답변 에서 복사

교체를 통한 재 컴파일

소스에서 tar를 빌드하면 매개 변수를 사용하여 다시 컴파일 할 수 있습니다.

--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip

이러한 옵션으로 tar를 다시 컴파일 한 후 tar의 도움말 출력을 확인할 수 있습니다.

$ tar --help | grep "lbzip2\|plzip\|pigz"
  -j, --bzip2                filter the archive through lbzip2
      --lzip                 filter the archive through plzip
  -z, --gzip, --gunzip, --ungzip   filter the archive through pigz

-2

~ / .bash_aliases에서 사용하십시오.

alias gzip="pigz"
alias gunzip="unpigz"

1
이것은 쉘의 명령 행 에서 gzip(또는 gunzip) 프로그램을 직접 호출 할 때만 작동 합니다. 같은 다른 프로그램 tar은 그 영향을받지 않습니다.
— Christian Hudon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.