ProxmoxでZFSを選ぶ理由
ZFSはチェックサムによるデータ整合性保証、透過的圧縮、高速スナップショット、フレキシブルなRAID構成を1つのスタックで提供します。従来のボリューム管理+ファイルシステムの組み合わせをZFSに置き換えることで、運用が大幅に簡素化されます。
プールの作成
プールは仮想デバイス(vdev)の集合で構成します:
| vdevタイプ | 最小ディスク数 | 使用可能容量 | 説明 |
|---|---|---|---|
| ミラー | 2 | 50% | 2台のディスクにデータを二重化 |
| RAIDZ1 | 3 | 67% | シングルパリティ(1台故障耐性) |
| RAIDZ2 | 4 | 50% | ダブルパリティ(2台故障耐性) |
| RAIDZ3 | 5 | 40% | トリプルパリティ(3台故障耐性) |
| ストライプ | 1 | 100% | 冗長性なし(非推奨) |
ミラープールの作成例:
zpool create -o ashift=12 tank mirror /dev/sda /dev/sdb
ashift=12 は4Kセクタ対応の全ドライブで必須の設定です。アライメントを最適化し、パフォーマンス低下を防ぎます。
キャッシュとログデバイス
- SLOG — 同期書き込みを高速化(NFS、データベース)。小さなNVMeやOptaneが最適。読み取りには影響しません。
- L2ARC — 読み取りキャッシュをSSDに拡張。ARCのエビクションが多い場合に有効です。
zpool add tank log /dev/nvme0n1p1
zpool add tank cache /dev/nvme0n1p2
圧縮アルゴリズム
| アルゴリズム | 圧縮率 | CPU負荷 | 用途 |
|---|---|---|---|
| lz4 | ~2倍 | 非常に低い | 汎用(デフォルト) |
| zstd | ~2–5倍 | 低〜中 | アーカイブ、混合データ |
| gzip | ~3–6倍 | 高い | 最大圧縮が必要な場合 |
zfs set compression=lz4 tank/vmdata
zfs set compression=zstd tank/archive
ARCチューニング
ARCはデフォルトでシステムRAMの50%を使用します。ZFSカーネルパラメータで制限を設定可能です:
# /etc/modprobe.d/zfs.conf
options zfs zfs_arc_max=8589934592
options zfs zfs_arc_min=4294967296
atimeを無効にしてSSDの書き込み負荷を低減:
zfs set atime=off tank/vmdata
SSDのTRIM
SSDプールでは自動TRIMを有効にします:
zpool set autotrim=on tank
zpool trim tank
スナップショットとクローン
スナップショットは一瞬で作成され、変更ブロックのみを消費します:
zfs snapshot tank/vmdata@update前
zfs list -t snapshot
zfs rollback tank/vmdata@update前
zfs clone tank/vmdata@update前 tank/clone-test
Send/Recvによるレプリケーション
リモートバックアップにはZFS send/recvが標準的です:
zfs send tank/vmdata@update前 | ssh backup-server "zfs recv backup-pool/vmdata"
スクラブとモニタリング
定期的なスクラブでデータの整合性を確認:
zpool scrub tank
zpool status -v
smartctl -a /dev/sda
ディスク交換
故障ディスクを冗長vdev内で交換します:
zpool offline tank /dev/sda
zpool replace tank /dev/sda /dev/sdc
zpool online tank /dev/sdc
トラブルシューティング
- プールのインポートに失敗 →
zpool import -Dで復旧を試行 - デバイスがオフライン → ケーブル確認後
zpool online tank /dev/sda - パフォーマンス低下 →
zpool list -v tankで断片化を確認、SSDはTRIMを実行
