ZFS
提供: MacWiki
ZFS とは[編集]
ZFS は Sun Microsystems により開発された先進的なファイルシステムで、以下のような特徴を持ちます。
- Copy-on-write (COW) トランザクションモデルの導入
- COW とはデータコピーの際、当初はポインタを複製するだけで済まし、実際にデータブロックに変更が加えられた時点で初めて実データブロックの複製と書き換えをおこなう高速化技法。
- この戦略を用いることで、ZFS ではファイルシステムのスナップショット (コピー) を低コストに多数取得することができるようになっている。
- RAID-5 書き込みホール問題の解決
- 旧来の RAID-5 製品ではストライプ幅は固定であり、データの書き換えの際には RAID を構成する全ての物理デバイスに対し、リード・モディファイ・ライトの操作が必要となる。RAID-5 にはトランザクションが導入されていないので、データの書き換え時に停電など不慮の事故が起こると、データブロックとパリティブロックとの間に修復不可能な不整合が生じる危険性 (RAID-5 write hole) があった。
- 対して ZFS の RAID-Z では書き込むデータのサイズによってストライプ幅は可変となっており、デバイスへのアクセスを必要最小限に抑えることができる。また、データブロックの書き換えの際には既存ブロックを直接上書きするようなことはせず、必ず別の新しい領域にブロックを確保し、そこへデータを書き込んだのち、ブロックへのポインタをすげ替える手順を踏む。この操作はアトミックにおこなわれるので、不整合は起こらない。
- 256bit チェックサムによるデータの完全性確保
- データの読み出し時にはチェックサムによる検証がおこなわれる。サイレント破損が検知されると、パリティを使って自己修復 (self-healing) される。
- 仮想ストレージプール (zpools) による物理デバイスの隠蔽と、それに伴うストレージ管理の簡易化
- 管理に必要となるコマンドは zpool, zfs の二つだけ。
- ミラーリング、RAID-Z (RAID-5 よりも優れた方式) に対応。
- 物理デバイスのホットスタンバイに対応。
- パリティの二重化 (raidz2) に対応。
- 稼働中に物理デバイスを増設可能。
- 可変ブロックサイズ (〜128KB) によるランダム/シーケンシャルアクセスへの最適化が可能。
- アプリケーション透過のデータ圧縮に対応。
- 暗号化に関しては現在開発中。
- スナップショットを用いたファイルシステムのクローニングが容易におこなえる。
- 最新版では built-in deduplication に対応。
ZFS は現在 Solaris オペレーティングシステムで利用可能ですが、 そのソースコードはオープンソースとして公開されており、FreeBSD でも移植作業が進められています。
Mac OS X への移植も進められ、Mac OS X 10.5 Leopard では一定の動作をしていましたが、10.6 Snow Leopard では省かれてしまいました。おそらく Sun が Oracle に買収されたことで、ZFS の今後の見通しが付きにくくなったこと、動作させるのに必要なリソース量が大きいことなどを Apple が嫌ったためでしょう。
ZFS の欠点[編集]
現時点での欠点としては以下のような事柄が挙げられるでしょう。
- ストレージプールに一旦追加した物理デバイス (ホットスペアおよびミラーにアタッチした冗長分のデバイスを除く) は削除できない。
- ストレージプールの作り直しになる。
- 要求されるメモリサイズが比較的大きい。
- 最低 512MB 以上とされるが、実際には1GB 以上割り当てたほうがよい。
- 32bit OS での利用には少々無理がある。
- FreeBSD/i386 ではカーネル空間のデフォルトサイズは 1GB (KVA_PAGES=256) だが、メモリが不足するので安定動作しない。FreeBSD の ZFS 関連文書中では 2GB (KVA_PAGES=512) が推奨されているが、1.5GB (KVA_PAGES=384) 以上にすると今度はユーザ空間が不足するため、たとえば sbcl が動作しなくなる等の問題が生じてしまう。いずれにせよ 32bit アドレッシングでは足りない。
- コード中に 64 ビットデータが多く用いられており、32bit 環境ではオーバーヘッドが大きい。
- ストレージの残容量が不足すると性能が悪化する。
- ブロックの確保とメタデータの更新に手間取ることが原因であるらしい。
- 実装側の問題
- OS のブートローダが ZFS パーティションに対応していないことがある。
- Solaris は可。FreeBSD では 8.0-RELEASE より (BSD スライス、GPT 共に) サポート。ただしアレイの論理構造によっては対応しきれていない。
- ZFS 上のボリュームにスワップ領域を確保するとカーネルのフリーズを引き起こすことがある。
- FreeBSD 7.2 の ZFS version 6 にて確認。8.0 では解消されている模様。
- OS のブートローダが ZFS パーティションに対応していないことがある。
ZFSKnownProblems - FreeBSD Wiki も参考になります。
トリビア[編集]
- ZFS の名称は、元々「Zettabyte File System」に由来しますが、ZFS は 128bit ファイルシステムなので、実際にはさらに大きなストレージを扱えます。(2128 はおよそ 3.4 × 1038 ≫ 1 zetta)
- ちなみに、zetta は 10 の 21 乗の大きさです。(キロ(103)、メガ(106)、ギガ(109)、テラ(1012)、ペタ(1015)、エクサ(1018)と来て、次がゼタ。)
- ZFS における単一ファイルの最大サイズは 264 (およそ 18.4 × 1018) バイトです。
ZFS は user quota/group quota の機能を持ちませんが、ユーザー毎/グループ毎にファイルシステムを作成し、サイズの制限を加えることができます。この場合、従来の quota を使った管理よりもオーバーヘッドを低くできます。- ZFS version 15 にてサポートされた模様。
関連リンク[編集]
- Welcome to ZFS on OS X
- Solaris ZFS 管理ガイド - Sun Microsystems
- zfs(1M)
- zpool(1M)
- ZFS at OpenSolaris.org
- OpenSolaris Forums : discuss
- ZFS: The Last Word in File Systems
- データブロックのチェックサムを取る必要性は p.13 に。RAID-Z の仕組みは p.18 に。
- ZFS Administration Guide
- ZFS On-Disk Specification
- サン・マイクロシステムズ - Sun Fun Times - Solaris 10ファイルシステムZFS誕生エピソード『心を解き放て!』
- RAID-Z : Jeff Bonwick's Blog
- ZFS Best Practices Guide
- やっぱり Sun がスキ! - ZFS
- ZFS - FreeBSD Wiki
- Wikipedia:ZFS
- Z-410: How ZFS is slowly making its way to Mac OS X - Ars Technica