Paralel bzip2 ve gzip'i varsayılan olarak kullanmanın en iyi yolu nedir?


41

Bir çok bilgisayarda birden fazla çekirdek olmasına rağmen, Bzip2 ve gzip yalnızca bir çekirdek kullanır. Ancak, mevcut tüm çekirdeği kullanan ve bzip2 ve gzip ile uyumlu olma vaadi veren lbzip2, pbzip2 ve pigz gibi programlar var.

Peki bu programları varsayılan olarak kullanmanın en iyi yolu nedir, bu yüzden tar cfa file.tar.bz2 directorybzip2 yerine lbzip2 / pbzip2 kullanıyor? Tabii ki hiçbir şeyi kırmak istemiyorum.


2
Meraktan herkese: Paralel gzip / bzip seriden çok daha hızlı mı? HDD yazma hızının ve diğer kısıtlamaların daha büyük bir sorun olduğunu hayal ediyorum.
con-f-use

@ con-f-use Teorik olarak SSD'niz yoksa, arşivin toplam boyutu arttıkça daha hızlı olabilir.
Marco Ceppi

1
16 cpus'lu bir sistemde, gzip'ten pigz'e geçiş süresi katran 1.2TB'ye düşürdü ve onu ağ üzerinden aktarın ve sonucu 18 saatlik yedekleme ve 14 saatlik testten 4 saatlik yedekleme ve 2 saatlik teste kadar test edin. Pek çok potansiyel darboğaz, disk hızı, ağ hızı, işlem gücü var ancak bu durumda bu işlem kesinlikle IO'ya bağlı olduğundan daha fazla cpuya bağlıydı. Bu yüksek teknoloji ürünü bir sistemdir, sonuçlarınız değişebilir. Önemli değil, ama bu RHEL6'daydı
cs_alumnus 27:15

Yanıtlar:


32

Bzip2, bunzip2 ve bzcat ile lbzip2 arasındaki bağlantıyı, ve gzip, gunzip, gzcat ve zcat'i pigz'e bağlayabilirsiniz:

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

Pbzip2 yerine lbzip2'yi seçtim çünkü /usr/share/doc/lbzip2/README.gz, /usr/share/doc/lbzip2/README.gz, /usr/share/doc/pbzip2/README.gz öğesinden daha "güzel" görünüyor. Ayrıca, tar kılavuzu lbzip2 hakkında konuşuyor .

Düzenle:

Precise Pangolin'e dahil edilen pigz-2.1.6, bilinmeyen eklere sahip dosyaları açmayı reddediyor (örneğin, initramfs - *. img). Bu, Quantal ile birlikte verilen pigz-2.2.4'te sabitlenmiştir. Bu yüzden, Quantal'a kadar beklemek, Quantal paketini elle kurmak veya henüz gunzip / gzcat / zcat ile bağlantı kurmak istemeyebilirsiniz.


7
Bu iyi çalışır çünkü / usr / local / bin / çoğu insanın $ PATH içinde / bin / 'den önce gelir. Bir şey doğrudan / bin / gunzip'i çağırırsa veya birisi $ PATH'sinde / bin'sini ilk alırsa, pigz kullanmazlar. Bu işi onlar için de yapabilmek için dpk-divert'i kullanabilir ve tüm ikili dosyalar için bunun gibi bir şey yapabilirsiniz, sudo dpkg-divert --divert /bin/gunzip.orig --rename /bin/gunzip; sudo ln -s /usr/bin/pigz /bin/gunzipancak pigz'in tüm gzip bayraklarıyla% 100 uyumlu olma olasılığı vardır, bu yüzden dikkatli olun.
Mark McKinstry,

31

Sembolik bağlantı fikri gerçekten iyi.
Başka bir çalışma çözümü takma addır tar:

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

veya sırasıyla

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

Başka bir tür varsayılan oluşturur.


fayda ekledi: Eğer (nedense) orijinal işlevselliğini korumak isterseniz 'partar' gibi takma kullanabilirsiniz .. ne yazık ki 'ptar' perl uygulaması tarafından alınır
jena

13

Sembolik bağlantı cevabı gerçekten yanlıştır. Tüm sistem için varsayılan gzip (veya bzip2) kodunu pigz (veya pbzip2) ile değiştirir. Paralel uygulamalar tek işlem versiyonlarına oldukça benzer olsa da, komut satırı seçeneklerinde göze çarpan farklılıklar, bu farklılıklara bağlı olan çekirdek sistem işlemlerini bozabilir.

"--Use-compress-program" seçeneği çok daha iyi bir seçimdir. İkinci seçenek (takma isim gibi) GNU tar tarafından desteklenen TAR_OPTIONS ortam değişkenini ayarlamaktır:

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

6
2011'den beri sembolik işaretleri kullanıyorum ve herhangi bir kırılma görmedim (düzenlemede belirtilen durum dışında). Ve eğer böyle ince farklar bulunmaz ve rapor edilmezse, sonsuza dek paralel olmayan versiyonlarla sıkışıp kalacağız. TAR_OPTIONS = "- use-compress-program = pbzip2" kullanıyorsanız, bzip2 ile gzip arasındaki farkı ayırt edemezsiniz.
elmicha

Bu benim için işe yaramadı.
Derek Perkins

3

Etkileyici seçeneklerden biri, varsayılan olarak çoklu iş parçacığı kullanmak için katranı yeniden derlemektir. Bu stackoverflow yanıtından kopyalandı

Değiştirme ile yeniden derleme

Tar kaynaklardan derlerseniz, parametreleri tekrar derleyebilirsiniz

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

Tar ile bu seçenekleri tekrar derledikten sonra, tar yardımının çıktısını kontrol edebilirsiniz:

$ 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 adresinizde kullanın:

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

1
Bu sadece gzip(veya gunzip) programını doğrudan kabuğun komut satırından çağırırken çalışır . Diğer programlar (benzeri tar) bundan etkilenmeyecektir.
Christian Hudon 28:15
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.