Featured image of post Proxmox VEのZFSストレージ:プール構築から最適化まで Featured image of post Proxmox VEのZFSストレージ:プール構築から最適化まで

Proxmox VEのZFSストレージ:プール構築から最適化まで

Proxmox VEにおけるZFSストレージの詳細ガイド。プール作成、vdev構成、圧縮、ARCチューニング、スナップショット、send/recvレプリケーションを解説。

ProxmoxでZFSを選ぶ理由

ZFSはチェックサムによるデータ整合性保証、透過的圧縮、高速スナップショット、フレキシブルなRAID構成を1つのスタックで提供します。従来のボリューム管理+ファイルシステムの組み合わせをZFSに置き換えることで、運用が大幅に簡素化されます。

プールの作成

プールは仮想デバイス(vdev)の集合で構成します:

vdevタイプ最小ディスク数使用可能容量説明
ミラー250%2台のディスクにデータを二重化
RAIDZ1367%シングルパリティ(1台故障耐性)
RAIDZ2450%ダブルパリティ(2台故障耐性)
RAIDZ3540%トリプルパリティ(3台故障耐性)
ストライプ1100%冗長性なし(非推奨)

ミラープールの作成例:

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を実行