Thursday, July 10, 2014

tar搭配多核心壓縮軟體

正常來說, tar的壓縮可以在tar指令裡面就寫, 例如加z表示要做gzip壓縮, 加j做bzip2壓縮:
tar czf output.tar.gz *.nc
tar cjf output.tar.bz2 *.nc
但是這樣的話, 是tar幫你去call zlib / libbzip2, 只有用單核心在做壓縮.
明明現在的機器都有多核心了...

其實Linux上面有多核心的壓縮軟體.
gzip的多核心版叫pigz:
(http://zlib.net/pigz/)
bzip2的多核心版則是叫pbzip2:
(http://compression.ca/pbzip2)

這樣的話, 搭配tar使用時, tar就只做打包的動作, 而把壓縮交給pigz / pbzip2去做.
像這樣:
tar cf - *.nc | pigz -c > output.tar.gz
tar cf - *.nc | pbzip2 -c > output.tar.bz2

tar指令裡的 - 符號, 代表把output丟到 stdout去, 然後我們再用pipe把tar的stdout, 轉給後面的壓縮軟體.
相同的, pigz / pbzip2的-c參數表示把輸出送到stdout, 這次是用redirect把輸出寫進檔案.
pigz跟pbzip2都各自還有參數可以調整壓縮比跟使用的核心數量.
在Redhat / CentOS / Fedora的話, 只要安裝EPEL套件庫, 就可以直接用yum安裝pigz / pbzip2.

No comments: