2008.01.27 ZFSメンテナンスの日々 #6 ZFS なんてオマケです! ZFS なんてオマケです!自分にはそれがわからんかったのです!! ということで 2008 年のキーワードは ZPOOL(爆)。ていうか設計・開発 した人がメモリアロケータをイメージしたと言っていた意味が, やっと 理解できました。以下, 私の脳内の中身をぶちまけると… 「ブロック単位で開放できるストレージ」「スパースなストレージ」が ZPOOL の本質であったと。 考えてみればストレージしかりボリュームマネージャーしかり, 使って ない領域なんてのはファイルシステムは知ってても, それらがほんとに 使ってないのか, なんてストレージレベル(HDD なんてそこまでインテ リじゃないので)ではわからんなぁと。 ファイルシステムでスパース(疎な領域)の管理ができるわけですが, ZPOOL はストレージ(あるいはボリュームマネージャー)にスパースを導 入したわけです。あるいは使い終ったので開放。と。この発想は確かに メモリプールの考え方ですなぁ。。返却先が OS じゃなくて ZPOOL な わけですが:-)。 それに比べたら, トランザクションやチェックサム, 圧縮なんて「これ (アロケーション)やるならこれもあったら便利だね」くらいの存在だし, ZVOL, iSCSI なんて zpool の外部インターフェースにすぎないし, ZFS なんて ZPOOL の 1 アプリにすぎないわけです。 ZFS の必要性から ZPOOL ができたのではなく, ZPOOL を活用できるフ ァイルシステム(ZPOOL に返却できる)が ZFS なのです。ZPOOL が活用 できるなら ZFS である必要はない。と。 スパースなストレージについては FreeBSD なら gvirstor(4) あたりで やってるし, そこら中探せば見付かると思う。要は実際の HDD の容量 よりも多く領域を見せられる技術なわけで, そのあたりの管理が行える のがボリュームマネージャーなわけだから。しかし, ブロック単位で開 放が可能かと言われると, なんとも言えない。そもそも使ってた領域を 返すなんてインターフェースがあるのか??から議論しないといけないわ けで, 今までなかったのだから作るしかない。と。 実は FreeBSD の kernel 内 I/O オペレーション(bio)の仕組みに BIO_DELETE というコマンドがある。これは例えば ata disk ドライバ (atadisk - ad(4))だと ATA の CFA Erase Sectors コマンドを発行す るわけだが「削除」が目的であり「開放」するわけではない。 ZFS の場合は開放しちゃおう。と。もちろん BIO_DELETE を開放と解釈 してくれるストレージが必要なわけで, ata disk 相手にしても開放し てくれないのは上述の通りである。そのあたりストレージ領域を「使っ てる」「使ってない」を管理してくれるのが画期的であったりする。も ちろんそういうのが存在しないわけじゃないけど, 売り方ぢゅーよーと いうことで。やっぱ手元で使えるってのはいいよね。 もちろんストレージ単位で返却できるものはある。この場合ブロックや セクターといった単位で返却できるのが大きな違いなわけである。 とりあえずこの結論(?)に達したのは, ZFS Boot に挑戦してみたところ ZFS 対応 loader の奇妙な挙動が UFS の発想にはなかったので気が付 いたという。 1. import された ZPOOL が無いと起動できない。 2. export されてると loader まで呼ばれるが起動できない。 (もっともこの挙動は simokawa さんパッチによるものだが, dfr 氏 の作業では export されてると loader すら立ち上がらない) 3. 今そこにある ZPOOL を認識できないとは何事か:-)。 4. 「はっ!! そうかloader が ZPOOL を探す仕組みがあれば ZPOOL の 実体なんて関係ない」ということに気が付く。 5. iSCSI があるぢゃないか。iSCSI 上の ZPOOL をマウントできるなら 手元にある必要は無いね。 6. 提供元の iSCSI も ZPOOL で組めばいいやん。とうことで親子関係 に気が付く。 +---------------+ +---------------+ +---------------+ | ZPOOL | | ZPOOL | | ZPOOL | +---------------+-+---------------+-+---------------+ | ZPOOL | +---------------------------------------------------+ まぁ実際には ZPOOL のインターフェースを外出しもしてなければ, 受けられるわけじゃないので, ZVOL, iSCSI というインターフェー スを通じてのアクセスなわけですが。。。 +---------------+ +---------------+ +---------------+ | ZPOOL | | ZPOOL | | ZPOOL | +----+-----+----+ +----+-----+----+ +----+-----+----+ |iSCSI| |iSCSI| |iSCSI| +----+ZVOL-+----+-+----+ZVOL-+----+-+----+ZVOL-+----+ | ZPOOL | +---------------------------------------------------+ 7. ZPOOL 上に ZPOOL 組めたら, これって今流行りの仮想化!? ブレー ドサーバーで SAN とか言ってる世界と同じ話ぢゃん。しかも, ス トレージの I/O 帯域や使用量をを均等に…とかハイエンドの特徴 全部持ってるぢゃん(iSCSI ってのは置いておくとして:-)。しかも 他の ZPOOL で使ってない領域回収して, 他の ZPOOL に転用できる し。。 8. さらに, loader がちょーかしこければ, 自分の ZPOOL を検索して きて…なんてのもできる。Host UUID なんての導入して import 時 マーキングしてるのでナニかと思ったら, UUID をキーに ZPOOL を探して強制 import しちゃえば, それまで ZPOOL 使ってたマシ ンの代わりに引き継いで…とか, 妄想は広がるどこまでも:-)。 というわけで脳内イメージをだだもれしてみる今日この頃であった。 さて。ZFS Boot については後日御期待!まぁ http://lists.freebsd.org/pipermail/freebsd-current/2008-January/082547.html こんな程度には動いてますよ。ということで。 Written by 重村法克