ZFSの特徴まとめ

最近、触れることの多いZFSについて整理してみました。

ZFSとはUnix系OS(SolarisBSD等)で扱えるファイルシステムです。
ZFSは、多くのジャーナリングファイルシステム同様、データ書き込み時にトランザクション(実データと管理データを一連の処理として扱うこと)で整合性を保つ仕組みを備えています。

一般的にジャーナリングファイルシステムでは(データではなく)ファイルシステム全体の保護を目的としています。
ファイルシステム上でデータは、実際のデータ(実データ)と管理データ(ディスク上の位置、ACL等)に分けて保管されます。
(管理データはFIFOなので、書き出しの終わったジャーナルログは破棄されます)。

ジャーナリングファイルシステムではジャーナルログに書き込む内容を記録した後、管理データを書き込み、それを元に実データを書き込むことで(電源断等の)不慮の事態に対しての耐性を持たせています。
システムがクラッシュした場合でも、ジャーナルログが残っていれば再度データの書き込みが試行されます。
仮に管理データと実データで不整合が解消されない場合、壊れた部分を破棄します。
(データではなくファイルシステム全体の保護を目的としている所以ですね)。

加えて、ZFSの特徴は3つ挙げられると思います。

1つ目はチェックサムによるデータ喪失の予防です。
ZFSはチェックサム機能を搭載しており、ディスクの故障等によるデータの喪失を効果的に予防します。
そして、このチェックサムにも

  • ディスク上の異なる場所に配置する
  • チェックサム自体の破損も上位のチェックサムにより修復

という手厚い保護がされています。

2つ目iノードの制限がないこと。
iノードとは上記の管理データに当たります。
Linux系のファイルシステムを使っているとたまに遭遇するのがiノード問題です。
1ファイルに付き1ノード消費するので、小さいファイルが大量にあると枯渇します。
ディスクに空き容量が会ってもファイルが作れなくなってしまいます。
ZFSではiノードを使用しないため、枯渇問題が発生しません。

3つ目コピーオンライト方式の書き込みを方法を採用し高い高速性と安定性を誇る点です。
一言で言うと、コピーオンライトとは「データを書き込む必要が生じた時に初めてディスクに書き出す」という処理です。
例えば、データのコピーを実行してもすぐには処理せず、原本とコピーとで参照を共有します(原本と差異が発生した時点で分割します)。
これにより、高速性が実現され、原本の保証と作成データの独立性も保証されます。
(ZFSでは、データは完全にディスクに書き込まれるか、あるいはまったく書き込まれないかのいずれかとなります)。

そして、ZFS最大の特徴は、高い信頼性を備えたソフトウェアRAIDを構築できる点だと思います。
RAID-Zxは、常にデータのチェックサムを検証して完全性を確認し、また再構築が必要なブロックを特定して破損したブロックを即座に自己修復する機能を備えています。

  • シングルパリティ : RAID-Z (ディスク1台の故障から保護 ・・・ RAID5相当)
  • ダブルパリティ : RAID-Z2 (ディスク2台の故障から保護 ・・・ RAID6相当)
  • トリプルパリティ : RAID-Z3 (ディスク3台の故障から保護 ・・・ RAID7?相当)