DragonFly BSD 2.2で実用段階になったHAMMER FSを試す

 かつてLinuxと並んで、フリーのPC-UNIXの代表であったFreeBSDやNetBSDといったBSD系のUNIXは、Linuxの急速な進化/普及と比較すると我が道を着実に歩いているといった感じだ。今回紹介する、DragonFly BSDは、FreeBSD 4(4.8-STABLE)をベースに2003年からMatthew Dillon氏が中心となって開発されているBSD系のオープンソースUNIXシステムである。

 その最新版は2009年2月17日にリリースされたバージョン2.2。今回のバージョンアップでは、同じくMatthew Dillon氏が開発し次世代ファイルシステムとして注目を集めているHAMMERファイルシステムが製品化段階(production-ready)となった。後ほど説明するが、HAMMERはスナップショットなどの高度な機能を備える現代的なファイルシステムで、他OSのユーザー/開発者からの関心も高い。

インストール

dfly01_thumb.png
図1:ブートメニュー

 DragonFly BSD 2.2のインストールメディアは、CD、USB、DVDイメージとして用意されている。DVDイメージが完全版としての位置づけでGUI環境を含んでいる。なお、いずれもライブ版として使用可能だ。インストールメディアでシステムを起動すると、図1のようなメニューが表示される。

 ここでデフォルトの「1」を選択すると、ライブ版として起動しログインプロンプトが表示されるので、「root」(パスワードなし)でログインすればよい。なお、DVD版の場合にはstartxコマンドを実行すると、X Window Systemが立ち上がる。ウィンドウマネージャにはシンプルで軽量な、fluxboxが使用される(図2)。

dfly02_thumb.png
図2:ライブ版(DVD)のデスクトップ

 ハードディスクにインストールするには、ユーザ名「installer」でログインするか、Xを起動している場合には左上のトンボのアイコンをクリックする。すると、CUIのインストーラが起動するので、その指示にしたがって進めればよい(図3)。なお、HAMMERファイルシステムを使用するには、「Select file system」画面で「Use HAMMER」を選択する。

dfly03_thumb.png
図3:インストーラ

パッケージシステムはpkgsrc

 DragonFly BSDの標準パッケージシステムは、かつてはFreeBSDのportsシステムを採用していた。現在では、NetBSDから移植されたより強力なpkgsrcが標準となっている。このpkgsrcは、インターネットからのソースの取得、コンフィグ、コンパイル、インストールといった流れを自動で行うシステムだ。現在7,300を超える数のパッケージが用意されている。たとえば、ncftpをインストールするには、あらかじめCVSサーバから最新のコレクションをダウンロードした上で次のように実行する。

# cd /usr/pkgsrc/net/ncftp3/
# bmake install clean

 これが、DragonFly BSDにおけるソフトウエア・インストールの基本だ。もちろん依存関係は自動的に解決され、必要なパッケージがあればそれらもインストールされる。この方法は、柔軟なオプション指定が可能な反面、GNOMEのような大規模なソフトウエアはコンパイルに時間がかかる。

 そのため、あらかじめコンパイル済みのバイナリパッケージ(tarボールの圧縮ファイル)をイントールすることも可能になっている。それには、pkg_addコマンドの引数にバイナリパッケージのパスを指定して実行すればよい。なお、pkg_addコマンドのラッパープログラムとして、インターネット上のサイトからダウンロード/インストールを行うpkg_raddコマンドも用意されている。たとえば、Ktermのバイナリパッケージをインストールするには次のように実行する。

# pkg_radd kterm-6.2.0nb11

HAMMERファイルシステム

 バージョン2.2の目玉は、なんといっても完成度が増したHAMMERファイルシステムだろう。マルチボリュームに対応し、最大ストレージ容量は1エクサバイト(2^60バイト)、クラッシュからの迅速なリカバリー機能や、過去のファイルシステムに簡単にアクセス可能なスナップショット機能、高速なミラーリング機能などが搭載されている。そのライバルとも言えるSun MicrosystemsのZFSは現在FreeBSDやMac OS X、Linuxにも移植されているがライセンス上の問題を抱えている(そのためLinuxのカーネルツリーに統合できない)のに対して、HAMMERはそうした問題がない点も重要な選択肢とみられている。

 インストール時にデフォルトのファイルシステムとして「HAMMER」を選択した場合、ルートパーティション全体がHAMMERファイルシステムになる。dfコマンドなどで確認すると、HAMMERの疑似ファイルシステム(Pseudo File Systems:PFS)が、/varや/homeといったパーティションに分割されてマウントされていることが確認できる。

$ df -h
Filesystem                        Size   Used  Avail Capacity  Mounted on
ROOT                               56G   1.8G    54G     3%    /
/pfs/@@0xffffffffffffffff:00001    56G   1.8G    54G     3%    /var
/pfs/@@0xffffffffffffffff:00002    56G   1.8G    54G     3%    /tmp
/pfs/@@0xffffffffffffffff:00003    56G   1.8G    54G     3%    /usr
/pfs/@@0xffffffffffffffff:00004    56G   1.8G    54G     3%    /home
/pfs/@@0xffffffffffffffff:00005    56G   1.8G    54G     3%    /usr/obj
/pfs/@@0xffffffffffffffff:00006    56G   1.8G    54G     3%    /var/crash
/pfs/@@0xffffffffffffffff:00007    56G   1.8G    54G     3%    /var/tmp
procfs                            4.0K   4.0K     0B   100%    /proc

 初期設定では、指定した周期でコマンドを実行するPeriodicによって、一日一回スナップショットが作成され、各仮想ファイルシステムの「snapshots/snap-日付-番号」ディレクトリから、その時点でのファイルシステムにアクセス可能になっている。

$ ls -l /home/snapshots/snap-20090227-1252/o2  ←スナップショットにアクセス
total 0
drwxrwxr-x  1 o2  o2  0 Feb 27 04:31 japs
-rw-r--r--  1 o2  o2  9 Feb 27 12:22 readme

 また、undoコマンドを使用することによって、消去したファイル復活させたり、現在のファイルとの差分をdiff形式で表示したりすることもできる。

$ undo -d /home/o2/readme  ←unified diff形式で差分を表示
diff -u /home/o2/readme@@0x0000000000000000 /home/o2/readme (to 01-Jan-1970 00:00:00)
--- /home/o2/readme@@0x0000000000000000	2009-02-27 12:22:25 +0000
+++ /home/o2/readme	2009-02-28 08:18:25 +0000
@@ -1 +1,3 @@
-sample
…省略…

 このようにHAMMERフィルシステムは大変魅力的だが、残念ながらDragonFly BSD 2.2はデフォルトのままでは日本語の扱いに難がある。そこで次回は、DragonFly BSDで日本語環境を構築する方法を紹介する予定だ。