Linuxでの圧縮・解凍:形式の選択ミスでサーバーをフリーズさせないために

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

ファイル圧縮:単なる容量削減だけではない

サーバー管理の経験があれば、ログファイルの肥大化でディスク使用率が警告レベル(99%)になったり、サーバー間で数十GBのデータを転送する必要に迫られたりしたことがあるでしょう。そんな時、ファイル圧縮は空き容量の確保や転送時の帯域節約における唯一の救いとなります。

システム管理者になりたての頃、本番サーバーで100GB of バックアップフォルダをxzで圧縮したことがあります。その結果、CPU使用率は100%に跳ね上がり、SSH接続すらできないほどサーバーがラグくなりました。ツールの特性を理解していなかったせいで、復旧に午後いっぱいかかってしまいました。各形式(gzip、bzip2、xz、zstd)には、速度圧縮率の間にトレードオフがあります。

始める前に、2つの概念を明確に区別しておく必要があります:

  • Archiving(アーカイブ): tarを使用して複数のファイルを1つのファイルにまとめること。
  • Compression(圧縮): アルゴリズムを使用してそのファイルのサイズを小さくすること。

必要なツールのインストール

UbuntuやCentOSなどのほとんどのディストリビューションには、標準でtargzipがインストールされています。しかし、xzや(Facebook製の)zstdのような強力なツールは、追加でインストールが必要な場合があります。

# Ubuntu/Debianの場合
sudo apt update && sudo apt install tar gzip bzip2 xz-utils zstd -y

# RHEL/CentOS/AlmaLinuxの場合
sudo dnf install tar gzip bzip2 xz zstd -y

一般的な圧縮形式の詳細

1. tarコマンド – アーカイブの「背骨」

tar (Tape Archive) は最も基本的なツールです。本質的にはファイルを1つの塊にまとめるだけで、容量は削減されません。しかし、フラグを使用することで他の圧縮プログラムと組み合わせることができます。

# 圧縮せずにアーカイブ(.tarファイルを作成)
tar -cvf backup.tar /path/to/folder

# 解凍
tar -xvf backup.tar

覚えておくべきフラグ:-c (Create – 作成)、-x (Extract – 展開)、-v (Verbose – 進捗表示)、および -f (File – ファイル指定)。

2. Gzip (.tar.gz) – バランス重視の定番

これはいわば「国民的標準」の形式です。同僚にファイルを送る際や定期的なバックアップなど、素早く圧縮したい場合は -z フラグを使用します。

# gzipで高速圧縮
tar -czvf data.tar.gz /data

実例: 1GBのログファイルなら、わずか30秒ほどで約200MBまで圧縮できます。GzipはCPUリソースをほとんど消費しません。

3. XZ (.tar.xz) – 圧縮率の王者

ストレージ容量の節約が最優先事項である場合、xz(フラグ -J)が第一候補となります。ソースコードのパッケージングや長期保存用のバックアップによく使われます。

tar -cJvf data.tar.xz /data

注意: 低スペックなサーバーで xz を使用しないでください。先ほどの1GBのファイルを圧縮する場合、xz なら100MBまで小さくできるかもしれませんが、5分以上かかり、RAMを大量に消費します

4. Zstd (.tar.zstd) – 現代の期待の星

Zstandardは、私が今最も推奨するツールです。非常に柔軟で、圧縮レベルの調整が可能であり、マルチコアCPUにも対応しています。

# zstdで圧縮
tar --zstd -cvf data.tar.zst /data

zstd の最大の利点は、解凍速度が極めて速いことです。非圧縮ファイルを読み込むのとほぼ同等の速度で展開できます。

実際のパフォーマンス比較

以下は、私のシステム管理経験に基づく比較表です:

形式 速度 圧縮率 使用シーン
Gzip 高速 良好 (5:1) 日常のバックアップ、Webサーバー
XZ 非常に低速 最高 (10:1) 長期保存(アーカイブ)
Zstd 非常に高速 優秀 (7:1) ビッグデータ、データベース、リアルタイム処理

大容量ファイルの進捗を確認するコツ

tar コマンドはデフォルトで進捗バーを表示しません。数百GBのファイルを圧縮していると、いつ終わるのか分からず不安になります。そんな時は pv (Pipe Viewer) を使って解決しましょう。

# pvをインストールして進捗バー付きで圧縮
tar -cf - /path/to/data | pv -s $(du -sb /path/to/data | awk '{print $1}') | gzip > data.tar.gz

これで、画面上に転送速度(MB/s)と完了予定時刻がはっきりと表示されます。非常にプロフェッショナルな見た目になります!

結論:どれを選ぶべきか?

サーバーのリソース状況に応じて、各ツールにはそれぞれの強みがあります:

  • 速度重視、低スペックサーバー: gzip を選択。
  • 最大限の容量節約: xz が最強。
  • 最新サーバー、マルチコアCPU: 迷わず zstd を使用。

この記事が、圧縮形式の選択に迷った際の手助けになれば幸いです。本番環境で重い処理を実行する前に、必ずステージング環境でテストすることを忘れないでくださいね!

Share: