FedoraでのVDO設定:100GBのディスクに500GBのデータを「詰め込む」方法

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

午前2時のディスクフルという悪夢

火曜日の午前2時ちょうど、私の電話が鳴り続けました。監視システムのアラートです。顧客のデータベースクラスターのバックアップ用ディスクが98%に達していました。現在のログ生成速度では、あと30分もすれば書き込みプロセスが完全に停止してしまいます。眠気眼で、私は2つの選択肢を迫られました。1つは追加のクラウドストレージを購入すること(高価で承認を待つのに時間がかかる)、もう1つは既存のデータをどうにかして「圧縮」する方法を見つけることでした。

長年FedoraをメインOSとして使っており、そのシステムツールには信頼を置いていました。セキュリティ規定によりログの削除は不可能です。gzipで圧縮すると、後のデータアクセスが非常に遅くなってしまいます。最終的に、私はVDO(Virtual Data Optimizer)を選びました。これはFedora/RHELエコシステムにおける秘密兵器のようなツールで、ブロックレベルで非常にスマートなデータ処理を可能にします。

VDO vs Btrfs vs ZFS:ストレージ最適化にどれを選ぶべきか?

コマンドを入力する前に、3つの一般的な選択肢を検討しました。それぞれに強みがありますが、安定性が求められるプロダクション環境に常に適しているわけではありません。

  • Btrfs: Fedoraのデフォルトであり、圧縮機能は良好です。しかし、重複排除(deduplication)はまだブロックレベルで自動実行されません。定期的にスキャンツールを実行する必要があり、少々面倒です。
  • ZFS: ストレージ界の巨人です。圧縮と重複排除は非常に優れていますが、Linux上でのカーネルライセンスの問題があります。Fedoraがカーネルをアップデートするたびに、ZFSモジュールが壊れないか冷や冷やすることになります。
  • VDO: ファイルシステムの下のレイヤーとして動作します。データが書き込まれる際(インライン)に即座に圧縮と重複排除を行います。ブロックレベルで動作するため、その上でXFSやExt4を自由に使用でき、競合の心配もありません。

節約の代償

VDOは無料の魔法の杖ではありません。実際に導入してみて、注意すべき2つのポイントに気づきました:

  • RAMの消費: VDOはインデックス管理のために、物理容量1TBあたり約1GBのRAMを必要とします。もしサーバーの全サービスで2GBのRAMしかない場合は、VDOは避けたほうが賢明です。
  • レイテンシ(遅延): 書き込み前に重複を確認するためにハッシュ計算を行う必要があるため、純粋なディスクと比較して書き込み速度が約10〜15%低下します。

なぜVDOはサーバーログの「救世主」なのか?

バックアップデータには、ログの数行が異なるだけの全く同じファイルが大量に含まれていることがよくあります。VDOを使用すれば、10GBのデータベースのスナップショットが10個ある場合、100GB消費する代わりに、実際には12〜15GB程度の消費で済む可能性があります。これにより、物理的な100GBのハードディスクを、安全に最大500GBの仮想空間に変えることができるのです。

Fedora ServerでのVDO導入手順

以下の手順は、稼働中のサーバーで直接実施したものです。ディスク構造を変更する前には、必ず重要なデータのバックアップを取っておくことを忘れないでください。

ステップ1:パッケージのインストール

Fedoraの最小構成版では、VDOツールが省略されていることがよくあります。以下のコマンドでインストールしてください:

sudo dnf install vdo kmod-kvdo -y

インストール後、システム起動時にサービスが自動的に開始されるように設定する必要があります:

sudo systemctl enable --now vdo

ステップ2:ディスクの準備

ここでは、/dev/sdbに空きディスクがあることを想定します。OSが入っているドライブを誤ってフォーマットしないよう、lsblkコマンドでディスク名を確認してください。

lsblk

ステップ3:仮想ボリュームの作成

vdo_storageという名前のVDOデバイスを作成します。物理ディスクは50GBしかありませんが、仮想容量を200GB(4:1の比率)に設定します。

sudo vdo create --name=vdo_storage \
               --device=/dev/sdb \
               --vdoLogicalSize=200G

ステップ4:ファイルシステムの設定

これで、新しいデバイスが/dev/mapper/vdo_storageに作成されました。Fedoraで大きなファイルの管理に優れているXFSを使用します。

sudo mkfs.xfs -K /dev/mapper/vdo_storage

-Kフラグはdiscardコマンドをスキップし、大容量ディスクのフォーマット時の待ち時間を短縮します。

ステップ5:自動マウントの設定

再起動後もディスクが自動的にマウントされるように、/etc/fstabに以下の行を追加します。注意:起動時のエラー(ハング)を防ぐために、x-systemd.requires=vdo.serviceパラメータは必須です。

/dev/mapper/vdo_storage /mnt/vdo_data xfs defaults,x-systemd.requires=vdo.service 0 0

実際の結果を確認する

20GBの重複するログを流し込んだ後でも、df -hコマンドは20GB使用中と表示します。しかし、専用ツールで確認すると:

sudo vdostats --human-readable

物理ディスク上で実際に占有されている容量は、わずか4.2GBでした。ストレージスペースを約80%節約できたことになります!

VDOを使用する際の3つの教訓

  1. 欲張らないこと: 仮想容量を大きく設定しすぎないでください(10:1など)。物理ディスクがいっぱいなのに仮想容量が空いていると表示されている場合、システムは非常に厄介なI/Oエラーを吐き出します。
  2. dfコマンドを忘れること: 実際の物理容量がどれくらい残っているかを知るには、常にvdostatsを使用してください。この状況ではdf -hは参考程度にしかなりません。
  3. バックアップは常に最優先: VDOはディスク容量を節約するだけで、物理的な故障からデータを守るものではありません。常に外部へのバックアッププランを用意しておきましょう。

VDOは、ハードウェアをすぐにアップグレードすることなくストレージの問題を解決するための素晴らしいソリューションです。大量のログやバックアップを扱うサービスを運用しているなら、ぜひ今すぐ試してその違いを実感してください。

Share: