如果您曾經需要壓縮大量數據tar,你就會知道這有多痛苦。它通常進展得很慢,你發現自己在打控制鍵+C結束任務然後忘記它。不過,tar 還可以使用其他一些工具,它們是利用當今高度多執行緒 CPU 並加快 tar 歸檔速度的好方法。本文向您展示如何在 Linux 中壓縮檔案時使 tar 使用所有核心。
這裡討論的三個主要工具是pigz、pbzip2 和pxz。這些工具之間存在一些細微的差異,但差異在於 gzip、bzip2 和 xz 之間。按照相應的順序,壓縮等級會增加,這意味著使用 gzip 壓縮的檔案將大於使用 xz 壓縮的存檔,但 gzip 自然會比 xz 花費更少的時間。 bzip2 處於中間位置。
每個工具名稱開頭的「p」表示「並行」。多年來,並行化變得越來越重要——跨越所有 CPU 核心的程度。 AMD 的 Epyc 和 Threadripper 系列等 CPU 可以達到 64 核心和 128 個線程,了解哪些應用程式可以利用這些 CPU 非常重要。這些壓縮函數是主要候選函數。
要安裝這些工具,您只需轉到您的儲存庫即可。
sudo apt install pigz pbzip2 pxz # Debian/Ubuntu
sudo dnf install pigz pbzip2 pxz # Fedora
sudo pacman -Sy pigz pbzip2 pxz # Arch Linux
為了保持一致性,本文將重點放在 pxz。你可以看看這個pigz教程.
tar 的語法相當簡單。要僅壓縮目錄,您可以使用以下命令:
tar czf linux-5.10-rc3.tar.gz linux/
tar cjf linux-5.10-rc3.tar.bz2 linux/
tar cJf linux-5.10-rc3.tar.xz linux/第一個將使用 gzip,第二個將使用 bzip2,第三個將使用 xz。檔案名稱和目錄會根據您正在執行的操作而有所不同,但我將 Linux 核心從 GitHub 拉到我的“/home”目錄中,我將使用它。因此,我將繼續使用以下命令啟動該命令time在前面指揮,看看需要多長時間。您還可以看到 xz 被列為在此系統上佔用我的 CPU 的最高百分比,但它僅將一個核心固定為 100%。


而且,正如您所看到的,我的老化 i7-2600 花了很長時間來壓縮 Linux 5.10-rc3(大約 28 分鐘)。

這就是這些並行壓縮工具派上用場的地方。如果您正在壓縮一個大檔案並希望更快地完成它,我強烈推薦這些工具。
您可以告訴 tar 使用壓縮程序--use-compression-program選項,或者您可以使用更簡單的命令標誌-I。這些工具的語法範例如下:
tar -I pigz -cf linux-5.10-rc3.tar.gz linux/
tar -I pbzip2 -cf linux-5.10-rc3.tar.bz2 linux/
tar -I pxz -cf linux-5.10-rc3.tar.xz linux/讓我們測試一下,看看我的系統壓縮 Linux 核心並訪問 CPU 的所有八個線程需要多長時間。你可以看到我的htop讀數顯示由於 pxz,所有執行緒都固定在 100% 使用率。


您可以看到壓縮該檔案所需的時間大大減少(大約七分鐘!),而且這是在多任務處理的情況下。我有一個虛擬機器在後台運行,我現在正在瀏覽網頁。 Linux 核心硬體排程將為您提供個人物品所需的信息,因此,如果您離開了pxz命令來運行而無需在系統上運行任何其他東西,您也許可以更快地完成它。

使用 Pigz、pbzip2 和 pxz 調整壓縮級別
您也可以將壓縮等級傳遞給 pxz 以使檔案更小。這將需要更多的 RAM、CPU 和時間,但如果您確實需要獲取小文件,那麼這是值得的。以下是這兩個命令及其結果的並排比較。



壓縮並沒有那麼大,而且時間不一定值得,但如果每一兆位元組都很重要,那麼它仍然是一個不錯的選擇。
我希望您喜歡本指南,了解如何使用 tar 使用所有核心來壓縮檔案。請務必查看我們的其他一些 Linux 內容,例如如何建構一台適用於 Linux 的新 PC,掌握 Apt 並成為 Apt 大師, 和如何在 Raspberry Pi 上安裝 Arch Linux.






