ZFS in Open Source

ZFSというファイルシステムがある。 元々Sun時代にSolarisに載せるためのファイルシステムとして開発されていて、
  • 柔軟にボリュームが切れる
    • 固定サイズにも可変サイズにもできる
  • ボリュームごとに好きなだけ簡単にスナップショットがとれる
    • Copy-on-writeだから軽量
    • 専用のスナップショット出力吐きコマンドがある
      • たとえばSSH経由で(差分のみの)コピーも…!
  • 重複排除、暗号化が使える(後のバージョン)
  • さらに、ボリュームマネージャも含んでいる
    • ミラーリング、ストライピング、RAID(RAID-Z)などがコマンド一発で(!)できる
    • 特殊なハードウェア不要
という、非常に先進的なファイルシステム(+論理ボリュームマネージャ)。
多くの人がSolaris以外でも使いたい!と思ったようで、様々にポートがされているのだけれど、以前と大きく状況が変わっているようなのでまとめる。

そのまえに:ZFSのバージョン

ZFS自体は今も活発に開発されており、機能追加がされている。そのため、ZFSにはバージョンがある(!)。
(他のファイルシステムはないよね。EXT2, EXT3, EXT4は別物のようなものだし。)
既に述べたとおり、ZFSは、論理ボリュームマネージャとファイルシステムの両方を含んでおり、
  • ZFS Pool (zpool) -- 論理ボリュームマネージャ
  • ZFS Filesystem (zfs) -- ファイルシステム
のそれぞれにバージョンがついている。
英語版ウィキペディアの記載を見るとはやいのだけれど、
ZFS Poolのバージョンが重要で、
  • 5 -- 圧縮に対応
  • 21 -- 重複排除に対応
  • 28 -- Multiple virtual device replacements (?)
  • 30 -- 暗号化に対応
ここらへんが、外から見た機能面で重要なところか。

各OSへのポート状況

  • ZFS-FUSE
    • 一番昔からあるやつ。
      ライセンス上の都合でLinuxのカーネルに取り込めなかったので、FUSEとして開発。
      (FUSEなので)動作が遅い。あと、古いzpool(バージョン23)まで対応していない。
  • KQ Infotech's ZFS on Linux
    • Linuxへの移植その1。死んだ。
    • Linuxへの移植その2。LLNL(米国の国立研究所)で開発が進む。
      カーネルモジュールとして動作するので、高速に動作。Linuxで使うならこれが標準。
    • Macへの移植その2。いち企業により管理されていたが、Oracleに買収され開発中止。死んだ。
    • Macへの移植その3。Macで使うにはこれが標準?
  • FreeBSDネイティブ
    • FreeBSDにはカーネルに取り込まれている。
経緯を交えてもう少し詳しく言うと、
  1. Sun により ZFS の開発が始まる
  2. OpenSolaris としてZFSのソースも公開される
  3. Linux への移植版(ZFS on Linux)が開発開始
  4. Sun が Oracle により買収される
  5. OpenSolaris の開発中止
  6. OpenSolaris の後継開発プロジェクト Illumos が開始
  7. さまざまなZFS移植プロジェクトを統合して OpenZFS が発足
という感じ。
ぱっと見た感じでは、すでに開発が進んでた ZFS on Linux の存在が大きい感じかな?
  • ZFSでは機能追加のたびにバージョン番号が増えている(あたりまえ)
  • オープンソース的な開発では、様々な開発者が独立に機能を追加していくので、このバージョニングが不便
  • そこで、
    • 絶対に使われないであろう、1000(ないし5000)というバージョンを割り当て、
    • 対応機能一覧をフラグ付けする(feature flag)
という話らしい
ただし、バージョン5000とつけられたZFSボリュームは、他のOSで開けないので、
開けるようにするためには、ZFSプール作成時にバージョン28を指定するべきとのこと。
基本的には、OpenZFS では ZFS pool version 28 までの機能に対応と認識しておけばよいもよう。
(これ以降は、Oracleで閉じた開発をされているので。)

結論

  • Linux では、ZFS on Linux を使うべき。(それ以外の選択肢はほぼない…FUSE版を除いて。)
    • Ubuntuでは、PPAが使える。とても便利。
  • Mac では、OpenZFS on Mac を使うべき。
    • 追伸: OpenZFS on Mac 1.2.7 以降で作成したZFSボリュームは、他のOSと互換性があるようになったらしい。
  • FreeBSD では、ネイティブで利用できる(!)