tarで全CPUコアを活用してアーカイブを高速圧縮する方法
大量のデータをtarで圧縮したことがある人なら、その遅さに悩まされた経験があるのではないでしょうか。処理がなかなか進まず、Ctrl+Cで中断して諦めてしまったこともあるかもしれません。しかし、tarが利用できる並列圧縮ツールを組み合わせれば、マルチコアCPUの性能を最大限に引き出し、アーカイブ作成を大幅に高速化できます。本記事では、LinuxでtarがすべてのCPUコアを使って圧縮を行うように設定する方法を解説します。
並列圧縮ツールの概要とインストール方法
ここで取り上げる主なツールは「pigz」「pbzip2」「pxz」の3つです。それぞれに細かな違いがありますが、本質的な違いはもとになっているgzip、bzip2、xzの違いにあります。この順で圧縮率が高くなり、gzipで圧縮したアーカイブはxzのものより大きくなりますが、その分xzよりも短時間で処理できます。bzip2はその中間に位置します。
各ツール名の先頭にある「p」は「parallel(並列)」を意味します。近年はAMDのEPYCやRyzen Threadripperのように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の基本的な構文はとてもシンプルです。ディレクトリを圧縮するだけであれば、次のようなコマンドを使用します。
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/
1行目はgzip、2行目はbzip2、3行目はxzを使用します。ファイル名やディレクトリ名は用途に応じて変わりますが、ここではGitHubから取得したLinuxカーネルを「/home」ディレクトリに置いて検証します。処理時間を測定するため、コマンドの先頭にtimeを付けて実行します。システムモニターを確認すると、xzが最も高いCPU使用率を示していますが、実際には1コアだけが100%で動作していることが分かります。
その結果、やや古めのi7-2600S環境では、Linux 5.10-rc3の圧縮に約28分もかかってしまいました。
ここで並列圧縮ツールの出番です。大きなファイルを少しでも速く圧縮したいなら、これらのツールを強くおすすめします。
tarと並列圧縮ツールを組み合わせる
tarに使用する圧縮プログラムを指定するには、--use-compression-programオプションを使う方法と、より簡潔な-Iフラグを使う方法の2つがあります。それぞれのツールにおける構文の例は以下の通りです。
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/
実際に試してみましょう。CPUの8スレッドすべてを活用してLinuxカーネルを圧縮すると、どれほどの時間短縮になるでしょうか。htopの表示を見ると、pxzによって全スレッドが100%で動作していることが確認できます。
その結果、圧縮にかかった時間は約7分と大幅に短縮されました。しかもこれは、バックグラウンドで仮想マシンを動かしながらWebブラウジングも同時に行っていた状態での記録です。他の作業をせずにpxzコマンド alone を実行すれば、さらに短時間で完了する可能性があります。Linuxカーネルのハードウェアスケジューラが適切にリソースを割り当ててくれるため、日常的な利用でも安心して使えます。
pigz・pbzip2・pxzで圧縮率を調整する
pxzには圧縮レベルを指定することで、ファイルサイズをさらに小さくすることも可能です。ただし、その分メモリやCPU、処理時間を多く消費します。どうしても小さなファイルが必要な場合には試す価値があるでしょう。以下は、通常の圧縮と高圧縮レベルを指定した場合の比較です。
圧縮率の向上幅はそれほど大きくなく、時間コストが見合わないケースもありますが、1MBでも削減したいという場面では有力な選択肢となります。
tarですべてのCPUコアを活用してアーカイブを圧縮する方法についてのガイドは以上です。あわせて、Aptの使い方をマスターする方法や、Raspberry PiへArch Linuxをインストールする手順など、その他のLinux関連記事もぜひチェックしてみてください。
-
MinikubeでノートPCにKubernetes環境を構築する方法【初心者向けステップバイステップガイド】
以前のチュートリアルではKubernetesの基礎について解説しました。今回は、シングルノードのKubernetesクラスターとして動作する「Minikube」を使って、ノートPC上にKubernetes環境を構築する方法を紹介します。Minikubeは仮想マシン内にすっきりと収まるため、ローカル環境でKubernetesを学ぶのに最適な選択肢です。 Kubernetes公式サイトにもMinikubeの導入手順が詳しく載っていますが、本記事ではその手順を実際のスクリーンショット付きで、より分かりやすく再現して解説します。 ステップ1:ハイパーバイザーをインストールする まず最初に、KVM、V
-
CinebenchでCPUをベンチマークする方法|R23の使い方と温度管理のコツ
Ryzen 7 5800Xや5900Xといった高性能な新型CPUを手に入れたなら、その実力をしっかり確かめてみたくなるはずです。新しいCPUのポテンシャルを最大限に引き出して確認する最良の方法がベンチマークテストです。ベンチマークツールは数多く存在しますが、PC愛好家の間で最も人気があるのが「Cinebench」です。 Cinebenchは、約10分という比較的短いテスト時間の中で、独自の画像レンダリング処理によってCPUの全コアに高負荷をかけます。これにより、PC内部の処理能力を正確に把握できます。合成的な計測が中心の他のベンチマークツールと比べ、「実使用環境」に近い、より信頼性の高いスコ