目次


共通テーマ: アドバンスト・ファイルシステム・インプリメンター・ガイド 第10回

XFSの配備

Comments

今回は、みなさんのシステムにXFSを導入する方法を紹介します。まず、SGIにXFS Projectというページがありますので (稿末の参考文献参照)、それに目を通しておいてください。ダウンロード・リンクをたどっていくと、パッチとかツール、さらにはRed HatのXFS対応のカーネルがダウンロードできることがわかります。

でも、待ってください。確かに、これらの動作確認済みの公式バージョンを使用してXFSをインストールできるのですが、このやり方はお薦めできません。この記事の執筆時点でのXFSの公式な最新バージョンは1.0.2で、それは、はるか昔の2001年11月にリリースされたものでした。その後、XFSには数々の改良が加えられており、これらの改良を享受するには、XFS CVSツリーの最新のソースを利用するのが一番です。Gentoo Linuxの開発者やユーザーからのフィードバックから判断すると、CVSのXFSを使用してきた人々のほうが、少し古くなった公式バージョンを使おうとした人々よりもXFSについてプラスの経験をしています。

CVSの使い方

これまでCVSを使ったことのない方は、私のチュートリアル、CVS for the developer or amateurがためになるかもしれません (参考文献参照)。ただ「とりあえず組み込んでみて」試してみたいということであれば、それでもかまいません。とにかく、何らかのCVSパッケージをシステムにインストールして、cvs コマンドが使えるようにしてください。

本稿で示すCVSの手順は、SGIのサイトにも示されています (参考文献参照)。cvs 経由でソースを入手したら、最新のXFS対応カーネルのソースや最新のXFSツールが入った新しいディレクトリー・ツリーができているはずです。XFS CVSからソースを入手するには、まず、CVSROOT 環境変数に、ソースの入手先であるリポジトリーを設定します。bashのプロンプトで次のようにタイプ入力します。

$ export CVSROOT=':pserver:cvs@oss.sgi.com:/cvs'

次に、ディレクトリーを、新しいXFSディレクトリー・ツリーを作成したい場所に変更し、次のようにタイプ入力します。

$ cvs login

パスワードの入力を求められたら、cvs とタイプします。これで、パブリックのCVSリポジトリーにログインできました。最新のXFSのソースを入手するには、次のようにタイプします。

$ cvs -z3 checkout linux-2.4-xfs

すると、チェックアウト処理が始まります。入手しようとしているファイルには、Linuxの全ソース・ツリーが含まれていますので、少し時間がかかるかもしれません。しばらくすると、cvs checkout コマンドが完了し、現在の作業ディレクトリーに新しいlinux-2.4-xfs のディレクトリー・ツリーができているはずです。後で、新しいソース・ツリーを更新する必要がでてきた場合、linux-2.4-xfs ディレクトリーに入り、次のようにタイプします。

$ cvs -z3q update -dP

ツリーの使い方

新しいlinux-2.4-xfs ディレクトリーには、重要なディレクトリーが2つあります。1つはlinux で、XFS対応カーネルのソース・ツリーが入っています。もう1つはcmd で、いろいろなXFSユーザー空間プログラムのソースが入っています。カーネルのソースを利用するには、linux ディレクトリーを/usr/src にコピーするか、あるいは単にその場で新しいカーネルをコンパイルします。

以下は、このカーネルを実際に稼働させるまでの手順です。linux ディレクトリーに入り、好みのエディターにMakefile を読み込みます。ファイルの先頭の数行は、以下のような内容になっているはずです。

VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 17
EXTRAVERSION = -xfs

これらの行は、2.4.17-xfs という公式名でカーネルをビルドしたいということをMakefile に伝えています。人によっては、公式のuname -a のカーネル名に-xfsを付けないカーネルにしたいと思う人もいます。そういう方は、最後の行を以下のように変えてください。

EXTRAVERSION =

次は、カーネルの構成です。XFSを有効にするには、make menuconfig とタイプして、File systemsのセクションに進んでください。少しスクロール・ダウンすると、次のようなオプションがあります。

< > SGI XFS filesystem support

これを有効にします (カーネルに直接組み込む形でコンパイルすることが推奨されます)。y とキーインすると、以下のような3つのサブオプションが出てきます。

[ ]   Enable XFS Realtime support  
[ ]   Enable XFS Quota 
< >   Enable XFS DMAPI

XFS Realtimeオプションは、XFSでのリアルタイムのサブボリュームのサポートを有効にします。これは、リアルタイム・アプリケーション向けに、ストレージ領域の動作が想定した性能を示すように設定するオプションです。XFS Quotaオプションは、名前から察しがついたと思いますが、ディスクの使用を特定のユーザーやグループごとに制限できるようにするものです。XFS DMAPIオプションを選択すると、ストレージ管理アプリケーション用の特殊なAPIが有効にされます。現在のところ、製品版のLinuxツールでDMAPIを利用しているものはありません (SistinaのLVMやSGI XFSユーティリティー自体を含めて) が、現在SGIとIBMがDMAPI対応アプリケーションを開発中です。

SGI XFS filesystem supportを選択し、カーネルの残りの部分を適当に設定したら、make dep && make bzImage && make modules && make modules_install を実行し、カーネルをインストールして、リブートしていけばよいわけです。

ツール類のインストール

XFS対応のカーネルが稼働するようになると、いろいろなXFSツールのインストールが可能になります。XFSの素晴らしい点の1つに、ひととおりのサポート・ツールやユーティリティーが網羅されていることが挙げられます。linux-2.4-xfs/cmd ディレクトリーに入って、bashのプロンプトでrootユーザーとして以下のようなシェル・スクリプトをタイプします。

# for x in attr acl xfsprogs dmapi xfsdump
do
cd $x
autoconf
/configure --prefix=/usr
make
make install
cd ..
done

最後のdone の行をタイプ入力すると、特別なビルド・スクリプトが実行を開始し、いろいろなXFSツールがインストールされていきます。このとき、以下のようにすれば、以前のmake install コマンドではインストールされなかった開発者関係のファイルだけを何個かインストールすることもできます。

# for x in attr dmapi xfsprogs
do
cd $x
make install-dev
cd ..
done

ファイルシステムの作成とマウント

この最後のスクリプトが完了すると、XFS関係のいろいろなプログラムが正しくインストールされ、利用できるようになっているはずです。これで、最適な動作になるように微調整されたテスト用XFSファイルシステムを作成する準備ができました。

でも、以前のReiserFSファイルシステムの上からXFSファイルシステムを作成しようという場合には、ちょっとした仕掛けを用意しておく必要があります。bashのプロンプトから以下のコマンドを実行することで、ReiserFSファイルシステムを格納するために使用されていたブロック・デバイスの先頭部分を「ゼロ・クリア」しておきます。ここは、新しいXFSファイルシステムが格納される場所で、格納する際に初期化される部分です。

# dd if=/dev/zero of=/dev/hdc9

これは、ReiserFSのメタデータが残っていた場合にそれを消し去っておくために必要な手順で、こうしておかないと、mount が混乱をきたし、新しいXFSファイルシステムを、誤って欠陥のあるReiserFSファイルシステムとしてマウントする可能性があります。dd を約10秒だけ実行し、10秒たったらcontrol-Cでコマンドをアボートすればよいでしょう。これで、それまで存在していたReiserFSのメタデータのクリティカルな部分はゼロ・クリアされ、mount のファイルシステム・タイプの自動検出コードが混乱をきたすことがなくなります。

いよいよ、新しいファイルシステムの作成に入ります。そのためには、以下のようにmkfs.xfs を使う手もあります。

# mkfs.xfs /dev/hdc9

上のコマンドでもかまわないのですが、新しいXFSファイルシステムに最大限の性能を発揮させるために、mkfs.xfs にオプションをいくつか指定するとよいかもしれません。

そうしたオプションの1つ目は-l size=32m です。これは、メタデータ・ジャーナルに32 MBという充分なサイズをもたせたいことをmkfs.xfs に伝えるものです。こうすると、ファイルシステムの使用頻度が激しい場合でもメタデータ・ジャーナルが「満杯になり」にくくなるため、性能が向上します。

2つ目のオプションは、作成されるアロケーション・グループの数を最小限に抑えるようmkfs.xfs に指示することで、新しいファイルシステムの性能の向上を図ろうというものです。普通mkfs.xfs は、アロケーション・グループの数を自動的に選択しますが、私の経験では、ほとんどの汎用的なLinuxワークステーションやサーバーに対応させるために、通常、いくぶん多めに選択するようです。以前、この連載の第9回で触れたように、複数のアロケーション・グループを利用することで、XFSは複数のメタデータを並行して処理できるようになります。これは、ハイエンド・サーバーには都合がよいのですが、アロケーション・グループをたくさんとりすぎると、オーバーヘッドも少し重くなります。ですから、ファイルシステムで使用するアロケーション・グループの数をmkfs.xfs に自動的に選択させずに、-d agcount=x オプションを指定して、ある一定の数を指定します。x には、たとえば4、6、8のような小さな数を指定します。アロケーション・グループは、ターゲット・ブロック・デバイスの容量4 GBごとに最低1個設ける必要があります。以上2つの細工をひとまとめにして次のようなコマンドを実行することで、「最適な」XFSファイルシステムを作成します。

# mkfs.xfs -d agcount=4 -l size=32m /dev/hdc9

これでファイルシステムが作成できましたので、次に、これをマウントします。その際、性能の向上につながるマウント・オプションをいくつか指定して、新しいファイルシステムの性能をとことん引き出すことにします。

# mount /dev/hdc9 /mnt -o noatime,nodiratime,osyncisdsync

最初の2つのオプションは、atime 更新をオフにするためのものです。これは、本当にまれにしか必要とされず、ファイルシステムの性能を低下させる以外ほとんど意味のない機能です。osyncisdsync オプションは、XFS sync/async動作を、ext3のそれと整合するように調整します。mkfs.xfsmount での調整のおかげで、新しいXFSファイルシステムは、そうした調整を行わなかった場合よりも、はるかに高い性能を示すようになります。

余得 (goodies)

XFSの素晴らしい点の1つに、余得がたくさん収められていることがあります。たとえば「アクセス制御リスト (ACL)」と呼ばれる特殊な機能もそうした余得の1つで、現在XFSファイルシステムではデフォルトで有効にされている機能です。アクセス制御リストは、ファイルに木目の細かい許可を定義するためのものです。たとえば、単にユーザーやグループなどに対するrwxアクセスを定義できるだけでなく、いくらでもユーザーやグループを追加できるようになり、それに対するrwxの許可を指定することもできるようになりました。

アクセス制御リストを詳しく説明することは、この記事の範囲を越えてしまいますので、ここではbestbitsのサイト (参考文献参照) にACLについての素晴らしい入門者向け解説があることだけを触れておきます。とくに "Why you may want Access Control Lists (ACLs)〔アクセス制御リスト (ACL) が必要な理由〕" のページがお薦めです。なお、このサイトの細かなテクニカル情報は、ほとんどext2、ext3でACLサポートを有効にする仕方についてのものです (XFSファイルシステムではACLを利用するために何か特別なことを行う必要はありません)。

XFSには、また、「拡張属性 (extended attributes)」と呼ばれるセンスの良い機能も組み込まれています。拡張属性は、ユーザー定義のデータをファイルシステム・オブジェクトに対応付けるためにあります。たとえば、mygraphic.png というグラフィック・ファイルがあったとすると、その画像の縮小版を収めたthumbnailという属性を付属することができます。このデータは、通常のファイルI/O処理で表示させることはできませんが、プログラムから特殊な拡張属性APIを使えばアクセスすることができます。ある意味では、拡張属性は、MacOSシステムの「リソース・フォーク」に似ていると言えます。

以下は、コマンド・ライン実行ファイルattr を使って拡張属性の扱い方を示した例です。たとえば、私のホーム・ディレクトリーにdescription 属性を付加したいとします。その場合、以下のようにタイプします。

$ attr -s description -V "Home of Daniel Robbins" /home/drobbins
Attribute "description" set to a 22 byte value for /home/drobbins:
Home of Daniel Robbins

ここで/home/drobbins に対応付けられた属性の一覧を確認するには、次のようにタイプします。

$ attr -l /home/drobbins
Attribute "description" has a 22 byte value for /home/drobbins/

description 属性の内容を確認するには、次のようにタイプします。

$ attr -q -g description /home/drobbins/
Home of Daniel Robbins

拡張属性は、使い方も簡単ですし、使うのが楽しくなる機能です。詳しいことについては、man attr とタイプして調べてください。XFSには、拡張属性を扱うためのCのAPIも組み込まれています。拡張属性に対するC++ のIOStreamインターフェースの使い方に興味のある方は、SourceForgeのlibferrisを調べてみるとよいでしょう (参考文献 参照)。

EA (拡張属性) やACLは本当に愉快な機能です。が、バックアップ・プログラムのほとんどは、EAやACLのデータを現在でも無視することに注意してください。例外は、XFSディストリビューションに含まれているxfsdump コマンドとxfsrestore コマンドです。これ以外のバックアップ・プログラムを使用している方は、いろいろなところで拡張属性やACLを使用する前に、少し研究してみてください。

このXFSファイルシステムへの駆け足の入門が読者のみなさんのためになったとすれば幸いです。それでは、また次回まで。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=228457
ArticleTitle=共通テーマ: アドバンスト・ファイルシステム・インプリメンター・ガイド 第10回
publish-date=04012002