FreeBSDデベロッパ Pawel Jakub Dawidek氏

FreeBSDではFreeBSD 5.0のころからGEOMフレームワークが導入されてきた。GEOMフレームワークを意識せずにFreeBSDを使っているユーザも多いわけだが、GEOMそのものは柔軟なストレージ活用の基盤として活用されている現状だ。一番わかりやすい例としてはUSBメモリやiPodを接続した場合に/dev/msdosfs/IPODのようなデバイスが生成されることだろう。これはデバイスファイルシステムによる動的なデバイスファイル生成に、GEOM glabel(8)の機能を使ったラベリングで使いやすいデバイスファイル名を用意しているもの。この機能はHAL/DBusと組み合わせてGnome/KDEがモダンデスクトップ機能を提供するために欠かせないものとなっている。これはGEOMを活用して作られた機能の一例だ。

FreeBSDのGEOMフレームワークはもともとFreeBSD committerのひとりであるPoul-Henning Kamp氏がDARPAスポンサーのもとで開発したもの。GEOMフレームワ-クの最初のコミットは2002年3月11日におこなわれている。最近はZFSを移植しているPawel Jakub Dawidek氏によって活発に開発が続けられている。

ダイナミックなストレージ追加やスナップショット機能はZFSの特徴だが、GEOMの機能を使うとUFSでも同じようなことが簡単に実現できる。ZFSと同様、高負荷時における稼働実績という面ではこれから経験を積み重ねていく必要はあるが、ひとつの選択肢としては魅力的だ。とくに簡単に新しい機能が簡単に実現できる点が高く評価できる。

GEOMの構成要素とその関係例のダイアグラム

UFSにおけるGEOM活用関係例のダイアグラム

GEOMはデバイスドライバからカーネルのアッパレイヤの間に位置するフレームワークで、クラスを追加することで新しい機能を簡単に追加できるという特徴がある。GEOMではミラーリングやストライピングのようにIOトランスフォームを提供するモジュールをclassと呼び、classのインスタンスをgeomと呼んでいる。/dev/da0といったストレージがprovider、geomとproviderの接続を担当するバックドアがconsumerだ。この用語を理解しておくとGEOMの仕組みがだいぶわかりやすくなる。

FreeBSD 7ではgjournal(8)など新しいGEOMクラスがいくつか追加されている。従来からあるクラスにはgconcat(8)、gstripe(8)、gmirror(8)、graid3(8)、ggatec(8)/ggated(8)、gshsec(8)、glabel(8)、geli(8)などがあり、これらクラスを使うとファイルシステムに対するブロックレベルでのジャーナリング機能の提供、デバイスの結合、ストライピングの実現、ミラーリングの実現、RAID3の制御、デバイスファイルをネットワーク経由で提供、共有秘密デバイスの制御、デバイスへのラベルつけ、ストレージコンテンツの暗号化などが実現できる。GEOMクラスにはほかにもgcache(8)、gmultipath(8)、gnop(8)、gpart(8)、gvinum(8)、gvirstor(8)などがある。

AsiaBSDCon 2008でGEOMについて発表したPawel Jakub Dawidek氏は、GEOMの仕組みを簡単に説明したあとで、実際にそれらクラスを使った機能の実演をしてみせた。2つのデバイスを結合して1つのデバイスファイルとして見えるようにしファイルシステム(UFS2)を構築したあとで、さらにもうひとつのデバイスを追加してgrowfs(8)でファイルシステムを拡張する実演はかなり印象的だ。UFSを使う場合でもZFSのようにダイナミックにストレージの拡張が可能だ。

GEOMデモンストレーションその1

GEOMデモンストレーションその2

GEOMはIOのパスに位置するフレームワークであり、ストレージ内容そのものについては操作を加えない。このためGEOMの機能を使ってデバイスを結合してもそこのコンテンツには変更が加えられないという点も特徴だ。そのほか暗号化する実演もおこなわれた。ggatec(8)/ggated(8)を使うとデバイスファイルをそのまま別のPCに飛ばすことができるなど、かなり柔軟な活用が可能になる。ZFSの発展とともに、GEOMの開発にも注目しておきたい。