FedoraでBtrfs透過圧縮を使ってSSDを最適化:1円もかけずにストレージを「拡張」する方法

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

なぜBtrfs透過圧縮(Transparent Compression)に注目すべきなのか?

Fedoraをメインの開発機として2年以上使っていますが、パッケージの更新速度には非常に満足しています。しかし、永遠の課題はSSD(通常256GBや512GB)がすぐに一杯になってしまうことです。node_modulesを含むプロジェクトがいくつかあり、ログファイルが肥大化し、Dockerイメージのビルドが重なれば、ストレージはすぐに赤信号になります。

そこで登場するのがBtrfs透過圧縮(Transparent Compression)です。これはスマートなフィルターのようなものだと考えてください。データを書き込むたびに、システムがメモリチップに送る前に自動的に圧縮し、必要なときには瞬時に展開します。このプロセス全体がファイルシステム層で行われるため、ソフトウェア側はそれを意識する必要はなく、コードを一行も変更する必要もありません。

最大のメリットは容量の節約で、プログラミングデータの場合、通常30%から50%ほど削減できます。さらに興味深いことに、I/Oパフォーマンスの向上にも寄与します。CPUに負荷がかかるため逆説的に聞こえるかもしれませんが、実際には現代のCPUの処理速度に比べ、SSDの書き込み速度ははるかに遅いのが一般的です。ファイルを圧縮することで、CPUがドライブに送り出すデータ量が減り、結果として書き込みが速くなるだけでなく、TBW(Total Bytes Written)が抑えられ、SSDの寿命を延ばすことにも繋がります。

ZstdかLZOか:最適なアルゴリズムは?

Btrfsはいくつかの圧縮アルゴリズムをサポートしていますが、実際に検討すべきなのは以下の2つだけです:

  • LZO: 非常に高速でリソース消費も少ないですが、圧縮率は低めです。古いマシンや旧世代의CPU向けの選択肢です。
  • ZSTD (Zstandard): Facebookが開発した現代的な標準規格です。速度と圧縮率のバランスが完璧で、Fedoraコミュニティでも推奨されているデフォルトの選択肢です。

第10世代以降のIntel CoreプロセッサやAMD Ryzenを搭載したラップトップであれば、zstdの使用をお勧めします。日常的な利用には圧縮レベル1または3が理想的で、大規模なプロジェクトのコンパイル中でも動作が重くなることはありません。

Fedoraでの詳細な設定手順

Fedoraはバージョン33からBtrfsを採用していますが、圧縮機能が最適に設定されていないことがよくあります。以下の3つの簡単なステップでシステム設定を微調整しましょう。

ステップ1:マウント状態の確認

まず、現在のパーティションがどのようなオプションで実行されているかを確認します:

mount | grep btrfs

結果にcompress=zstd:1のような記述が含まれていない場合、新しいデータに対して圧縮機能が有効になっていないことを意味します。

ステップ2:/etc/fstabファイルの編集

これは起動時にドライブをマウントするための管理ファイルです。編集にはroot権限が必要です:

sudo nano /etc/fstab

rootパーティション(/)と/homeのマウント行を探します。オプション列にcompress-force=zstd:3パラメータを追加します。構造は以下のようになります:

# 修正前:
UUID=xxx-yyy / btrfs subvol=root,defaults 0 0

# 修正後:
UUID=xxx-yyy / btrfs subvol=root,defaults,compress-force=zstd:3 0 0

補足: 通常のcompressではなくcompress-forceを使用しています。デフォルトでは、Btrfsはファイルが「圧縮しにくい」と判断すると圧縮を停止します。forceオプションを使うことで、システムにすべてのファイルを強制的に圧縮させ、テキストファイル、ソースコード、ログに対して最大限の最適化を図ります。

ステップ3:変更の適用

再起動の必要はありません。remountコマンドを実行するだけで、システムが新しい設定を認識します:

sudo mount -o remount,compress-force=zstd:3 / 
sudo mount -o remount,compress-force=zstd:3 /home

既存データの全圧縮

fstabの修正は、今後作成される新しいファイルにのみ適用される点に注意してください。ストレージを占有している既存のデータを圧縮するには、defragmentコマンドを実行する必要があります:

# rootパーティション全体を再圧縮
sudo btrfs filesystem defragment -r -v -czstd / 

# homeディレクトリを再圧縮
sudo btrfs filesystem defragment -r -v -czstd /home

このプロセスは、すべてのファイルを読み込み、圧縮された状態でディスクに書き込み直します。コードやログファイルの量によりますが、数分から30分ほどかかります。

結果の確認:何GB節約できたか?

df -hコマンドでは、圧縮後の実際の使用量は表示されません。専用ツールであるcompsizeをインストールする必要があります:

sudo <a href="https://itfromzero.com/ja/fedora-vi-ja/fedora%e3%81%a7dnf5%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%8c%e7%88%86%e9%80%9f%e3%80%8d%e3%82%92%e4%bd%93%e9%a8%93%ef%bc%9ac%e3%81%a7%e6%9b%b8%e3%81%8b%e3%82%8c%e3%81%9f%e8%b6%85%e9%ab%98.html">dnf</a> install compsize

/var/logディレクトリやプロジェクトフォルダを確認してみましょう:

sudo compsize -x /var/log

私のマシンでの実際の出力例は以下の通りです:

Processed 1528 files, 212530 regular nodes
Data to compress:       1.2GB
Data actually stored:   180MB
Compression ratio:      15%

Compression ratio: 15%という行は、データが元の容量の15%しか占めていないことを意味します。驚きの結果ではないでしょうか?

実践的なアドバイス

長期間使用してみて、いくつかのアドバイスがあります:

  1. データベースについて: PostgreSQLやMySQLを重く使用している場合は、頻繁な書き込みによる遅延(ラグ)を避けるため、それらのデータディレクトリの圧縮を無効にすることを検討してください。
  2. メディアファイル: .jpg、.mp4、.zipなどの形式はすでに圧縮されています。動画ファイルなどを含むフォルダでは、Btrfsの恩恵はあまり得られません。
  3. スイートスポット: Zstdのレベル3が最適な選択です。レベルを10〜15まで上げてもCPUの温度が上がるだけで、節約できる容量はそれほど増えません。

透過圧縮の有効化は、私がFedoraをインストールした後に最初に行う設定です。これにより、256GBのラップトップが400GBのドライブであるかのように快適に使えています。ぜひ試してみてください!

Share: