明日からでも使いたい次世代ファイルシステム

ノートPCでこそ使いたいZFS

2007/06/29

 アップルは次期バージョンのMac OS X、「Leopard」で、サン・マイクロシステムズが開発したファイルシステム「ZFS」を採用するという。現在、報道されているところによれば、デフォルトは従来のHFS+のままで、ZFSはオプションの形での利用ということになりそうだが、それにしてもビッグニュースだ。「サンってことはデータセンターで使う、サーバ向けのファイルシステムでしょ?」と思う人が多いだろう。確かに高可用性と高いメンテナンス性を実現する機能などはサーバ向けの印象を与える。しかし、ZFSはエンドユーザーにとっても、実に魅力的な機能を提供する。

ノートPCにこそZFS!

 ここでは主に、サン・マイクロシステムズでSolarisの開発に携わっているカーネル技術者、エリック・クスターツ(Eric Kustarz)氏のブログエントリ「ZFS on a laptop?」(ノートPCでZFSだって?)に沿って、ZFSを個人ユーザーが使うメリットを見てみよう。

 最大のメリットはバックアップの容易さだ。ZFSの「スナップショット」機能を用いれば、運用上も処理上も、きわめて手軽に日々のバックアップ作業が行える。クスターツ氏の示す例は、こんな感じだ。「Music」と「Pictures」の2つのディレクトリのある状態で、Picturesのスナップショットを取るには、「zfs snapshot pool/Pictures@today」とする。このスナップショットには、「pool/Pictures/.zfs/snapshot/today」というパス名でアクセスできる。

 さらに、このスナップショットはZFSのツールに含まれる「send/recv」というコマンドを使うことで、バックアップ/リストアを行うことができる。UNIX的にパイプを使えばネットワーク越しにバックアップ可能だ。例えば、「zfs send pool Pictures@today | ssh host2 zfs recv -d backup」としてやるだけで、host2側のbackupディレクトリに日々のスナップショットが送られる。

 スナップショットはディスク上では差分データとしてだけ存在している(つまりスナップショットを取った瞬間というのは、ディスクの消費量はゼロ)。このため日々のバックアップで差分だけ扱うことが可能で、10GBの動画ファイルを編集しているとしても、その10GBのうち変更があった部分だけがバックアップ対象データとなるという。

開発者にうれしいロールバック機能

 システム開発者や管理者であれば、あるディレクトリに関連ファイルを展開して作業するというのは、よくあることだ。アーカイブを展開し、makeファイルを編集し、パッチを当てるといった作業はよく発生する。パッチ当てでは、その作業順序が異なると、うまくいかなかったりするため、どうしても試行錯誤が必要となるが、そんなときにうれしいのが、スナップショットのロールバック機能だ。

 「ここから先は」と不安に感じたら、すぐに「zfs snapshot pool/home/ken/project1@point-a」としてスナップショットを取り、もし作業をやり直したいと思ったら「zfs rollback pool/home/ken/project1@point-a」とするだけでいい。ファイル群をまるまる複製する単純なスナップショットと異なり、こうした作業においてはディスク消費量は極めて少なく、生成も一瞬。

 もっとスゴイのは、スナップショットのクローン機能だ。生成されたスナップショットはリードオンリーだが、スナップショットから「zfs clone pool/home/ken/project1@point-a pool/home/ken/project1/test」とクローンを作成することで、ファイルの編集が可能になる。さらに、「昇進させる」という意味のpromoteコマンドを使えば、スナップショットの元になったディスク上のデータに対する差分という存在から、ディスク上にフルに書き出された正規のファイルに変換することもできる。

部分的な冗長化ブロック

 ノートPCでZFSを利用するメリットとしてバックアップに次いでクスターツ氏が挙げるのが「信頼性」だ。

 衝撃や熱、時間変化による磁気ディスクの物理的なエラーは避けられない。このときファイルシステムを管理するクリティカルなメタデータが失われて論理的整合性がとれなくなると、ディスク上のほとんどのデータは無事でもアクセスできないということが起こる。

 そこでZFSに導入されたのが“ditto blocks”(ディット・ブロック)だ(「ditto」というのは日本語で言えば「同じく」という表現に近い英語で、誰かが発した言葉に同意するときに使われる)。ファイルシステムのメタデータはディスクの物理的に離れた2つの場所にあるブロックに書き込む。さらに、よりクリティカルな、システム全体が関わるようなデータについては3つの別々のブロックに書き込む。ディスク全体を冗長化するよりも経済的で、ディット・ブロックの開発に携わったサン・マイクロシステムズのBill氏はブログの中で、「ストレージは安いけど、“そこまで”安くない」と言っている。

 個人所有のノートPCであれば、ディスク全体の冗長化などコスト的にも技術的にも選択肢にない。OSやファイルシステムのメタデータが存在するブロックを冗長化しておく意味は大きいだろう。

 ディット・ブロックはシステム関連以外でも有効だ。コマンドラインからディレクトリ単位で任意に2重化または3重化を指定することができる。

 ZFSでは各ブロックごとに256ビットのチェックサムも持っており、どこかのブロックでエラーが検知された場合、自動的に冗長化されたブロックから正しいデータを取得するという機能もある。

いずれソフトウェアRAIDが生かされる日

 ノートPCでZFSを利用するメリットとしてクスターツ氏が次に挙げるのは、ZFSが備えるソフトウェアRAID機能だ。ノートPCではハードディスクは1台だから、何の恩恵も得られないが、フラッシュメモリの価格が今のペースで下がり続ければ、いずれ1台の磁気ディスクは、複数台のフラッシュメモリドライブに置き換えられるかもしれない、という。ZFSは標準でミラーリングと、RAID-5相当の機能を備えており、やはりコマンド1つでRAID構成が可能だ。

 将来は複数のフラッシュメモリドライブでRAID……、というのは、かなり強引な理由付けだが、もちろんデスクトップPCやサーバで使うときにはソフトウェアRAIDは、ZFSの大きな魅力の1つといってもいいものだ。

 ところで、ノートPCからは離れてしまうが、サーバの運用・管理で考えたときのZFSの最大の魅力は、「ストレージプール」という操作単位かもしれない。ZFSはハードディスクを、もはやドライブとか論理ドライブ、ボリューム、パーティションといった概念で扱わない。抽象的なストレージプール「zpool」だけが存在し、そこにディスクを足していく。そして、そのストレージプールに対して実際に使用するファイルシステムを作成していく。個々のファイルシステムにクオータ(容量制限)をかけることはできるが、基本的には他のファイルシステムと共有しているプールの容量が、それぞれのファイルシステムの上限容量ということになる。

 これにより、/usrの容量は余っているのに、/varが足りないというような事態がなくなる。足りなければプールにディスクを足していくだけで、既存のファイルシステムの使用可能容量は増える。しかも、プールに複数ドライブが含まれる場合には「ダイナミック・ストライピング」、いわゆるRAID-0による高速化の恩恵もある。

Solarisを離れて採用されたZFS

 このほかにもZFSは「次世代」と呼ぶにふさわしい先進的な機能を備えたファイルシステムだ。もともとSolaris向けとして開発してきたZFSを、2005年にオープンソースとして公開したとき、サン・マイクロシステムズのグレン・ワインバーグ副社長は、「そう遠くない将来のある時点において、(Solaris以外の)他のOSでZFSが採用されるようになっても、われわれは少しも驚かない」と言ったと伝えられている(リンク)。それはアップルによるMac OS Xへの採用で現実の話となるのがほぼ確実となった。

(@IT 西村賢)

情報をお寄せください:



@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)