玩式草子─ソフトウェアとたわむれる日々

第26回 64ビット化への遠い道程[その4]

この記事を読むのに必要な時間:およそ 3 分

9月も下旬になってくると,日中の日射しはまだまだ厳しいものの,朝晩は肌寒いくらいの気温になってきました。夜もずいぶん長くなり,CPUの発熱を気にする必要もなく,じっくりと大規模なソフトウェアのビルドに取り組める季節になりました。

ふと気づくと,去年の晩秋に開始したPlamo Linuxの64ビット化の作業も,そろそろ1年近くかかっていることになります。さすがにこれ以上ずるずると開発版のまま続けていくのもマズいので,そろそろ一段落を付けるための作業に取りかかりました。

64ビット版Plamoの現状

本連載でも何度か紹介したように,Plamo Linuxの次のバージョンでは,メジャー番号を5.0に更新して,x86とx86_64の2つのアーキテクチャに対応する予定ですが,現状ではx86_64版の開発を先行して進めており,まず64ビット用のx86_64版をリリースしてから,32ビット用のx86版に注力する,という流れになりそうです。以下では,このPlamo-5.0のx86_64版(Plamo64)の現状について,前回紹介した後に追加された機能を中心に紹介してみることにします。

BtrFS対応

Linux用の次世代ファイルシステムとして期待の高い,BtrFSに対応しました。

図1 インストーラのBtrFS対応

図1 インストーラのBtrFS対応

BtrFSはLinux用に新しく開発されたファイルシステムで,二分木(B-tree)構造を積極的に採用した斬新な設計になっています。

二分木構造を採用したLinux用のファイルシステムとしては,カーネル2.4の時代に広く利用されていたReiserFSがあります。ReiserFSは,そのパフォーマンスのよさから,一時はLinux用のデフォルトファイルシステムの地位をExt2/3 FSと争う勢いでしたが,中心的な開発者だったHans Reiser氏の奇矯な言動が災いして,新しいコードがなかなかカーネルのソースコードへ採用されず,次第にユーザが少なくなり,開発が停滞してしまいました。

後にHans Reiser氏は,妻を殺害したとして逮捕,起訴され,殺害を認めて懲役15年の判決を受けています。

BtrFSの中心的な開発者であるChris Mason氏は,現在はOracleに所属していますが,かってSuSEに所属していた際にReiserFSの開発にも参加していました。彼は,ReiserFSから二分木構造のファイルシステムに関するさまざまなアイデアを得,さらにそれを業務環境で使う規模にまで拡張できるようにBtrFSを設計したそうです。

BtrFSには,Sun Microsystems社がSolaris用に開発し,後にOSSとして公開したZFSのアイデアもあちこちに採用されているようです。

BtrFSの特色のひとつは,ファイルシステム内にサブボリュームと呼ばれる管理単位を作り,このサブボリューム単位でスナップショットが瞬時に取れることです。

サブボリュームは,ファイルシステム上ではディレクトリのように見えますが,専用のコマンドbtrfs subvolume snapshot ..を使えば,その内容を瞬時に別のサブボリュームにコピーすることが可能です。

BtrFSではCOW(Copy On Write)と言う仕組みを採用して,データブロックの書き変えを実際にデータが書き込まれるまで遅延させることが可能になっています。BtrFSのスナップショットはこのCOWの機能を使って実現されており,スナップショットを作成した時点ではファイルの中身(データブロック)はコピーせず,実際にファイルの中身が変更された時点で,変更された内容を新しいデータブロックに書き込んで,元のファイルとスナップショットが異なるようになっています。

こういう仕組みにすることで,BtrFSではスナップショットを任意の個数作ることができ,スナップショットの中身を書き替えることも可能になっています。

BtrFSでは,この「サブボリューム」という概念が全面的に採用されており,マウント時に"subvol=..."というオプションを指定することで,サブボリュームを1つのパーティションのようにマウントすることもできます。

従来は,1つのHDD上に安定版の環境と開発版の環境を同居させるような場合,それぞれの環境ごとにあらかじめ適切な容量のパーティションを切って,パーティションごとにファイルシステムを分離してやる必要がありました。一方,BtrFSのサブボリューム機能を使えば,1つの大きなファイルシステム上に必要な数だけサブボリュームを作って,サブボリュームごとに異なる環境をインストールすることが可能になります。

HDD上にあらかじめパーティションを用意する場合,事前の見積りが甘くて,あるパーティションでは容量が足りないのに,別のパーティションでは余っている,といったことがよく起きます。一方,BtrFSでサブボリュームをパーティションのように使えば,サブボリューム全体でファイルシステムの容量内に収まればよくなるので,サブボリュームごとの容量の過不足を心配する必要が無くなります。

BtrFSのこの機能を利用するためには,インストール時にあらかじめサブボリュームを作り,そのサブボリュームをルートファイルシステムとしてマウントしてやる必要があります。そのため,Plamo64ではインストーラを修正して,BtrFSを選んだ場合は,常にサブボリュームを作った上でマウントすることにしました。

図2 ルートファイルシステム用サブボリュームの作成

図2 ルートファイルシステム用サブボリュームの作成

また,BtrFSではサブボリューム内に任意の数のサブボリュームを作ることも可能なので,/homeや/varのように内容がしばしば更新される部分を,インストール時にあらかじめサブボリュームとして用意しておけば,スナップショット機能を用いて,それらの部分ごとのバックアップを簡単に取ることができます。Plamo64では,そのようなニーズにも対応してみました。

図3 スナップショット作成用サブボリュームの作成

図3 スナップショット作成用サブボリュームの作成

BtrFSはこのように便利なファイルシステムではあるものの,現時点ではliloやgrub2といったブートローダが対応しきれていないので,BtrFSをルートファイルシステムにする場合は,カーネルの置き場所である/bootはBtrFS以外のファイルシステムを用意する必要があります。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入