LinuxでXFSファイルシステムを利用するヒント

目次
XFSファイルシステム利用のメリット
XFSサポートカーネルのインストール例
 Scientific Linux 4.2 (i386)でcontributed kernelを使用する場合
 Scientific Linux 4.3(X86_64)等でカーネルをソースから再構築する場合
 CentOS 4.3 で centosplusのkernelを使用する場合
XFSサポートバイナリーのインストール方法
XFSファイルシステムの初期化とマウント
quotaの設定と利用

XFSファイルシステム利用のメリット

Linuxで比較的大きなファイル(1つあたり数百MBからGBクラスの大きさ)を多数扱う場合(実際にはGridFTPを使用した場合)、標準の ext3ファイルシステム では、ファイルアクセス時 にCPU利用率が異常に上がりハングしてしまう等の問題が発生する場合があります。この問題は XFSファイルシステムを使用すると解決しました。私たちは2005年春に米国の研究所から大量(270TB)の実験データをgridftpで転送中に、この ext3の致命的な問題に直面しましたが、この問題は XFSファイルシステムの使用で解決しました。また ext3では論理volumeを使うと最大8TBまでのファイルシステム構築でき、マウントできますが、それ以上のファイルシステムは作成できません。XFSは8TB以上のサイズのファイルシステムを論理volumeで作ることが出来ます。 XFSはSIGが開発した open sourceの64bit ジャーナリングフィアルシステムです。 簡単なベンチマークテストでは XFS は ext3 よりもread/write 性能が10-30%ほどすぐれ ているので、大規模ファイルシステムの構築の際は XFSの利用の考慮は検討に値すると思います。Linuxの標準 カーネルではkernel 2.4.21以降に XFSファルシステムは含まれていますが、XFSを利用するためにはXFSをサポートしているカーネル(stack sizeが4KBではだめで8KB必要)をインストールすることが必要です。
 ただし、システムクラッシュ時等のXFSの耐障害性については慎重な検討を要すると思われます。こちらでは同時ファイルアクセス数が数百の高負荷のi386アーキテクチャのマシン上でXFSファイルシステムが壊れてしまった経験があります。X86_64(同時ファイルアクセス数は数十程度)ではこれまで安定に動作しています。前者でXFSファイルシステムが壊れたのは,i386が原因なのか、kernel stackを大量に消費するXFSで、同時ファイルアクセス数が数百をこえて「PANIC with "kernel stack overflow."」が多発したのが原因か、のいずれかだとは思っていますが、業務利用を主眼とした、Scientific Linuxの元のベンダーの有償版のLinuxではファイルシステムはext2, ext3しかサポートされていない点は心に留めておく必要があると思います。

XFSの概要や特徴、すぐれた機能等については、以下にわかりやすい日本語での解説があります。
http://www.atmarkit.co.jp/flinux/rensai/fs07/fs07a.html

ページトップに戻る
Scientific Linux 4.2 (i386)でcontributed kernelを使用する場合

Sicentific Linux 4.2 (i386) のカーネルは XFS ファイルシステムをサポートしていませので、 XFSファイルシステムを使用するためにはXFSをサポートしているカーネルをインストールする必要があります。 SL4.2 i386のcontribuionにXFSをサポートしているカーネルがあるのでそれを使用するのが簡単です。
ftp://ftp.riken.jp/Linux/scientific/42/i386/contrib/RPMS/xfs/
にXFSをサポートしているカーネルがあるのでそれをインストールします。たとえば smp構成のCPUの場合は
ftp://ftp.riken.jp/Linux/scientific/42/i386/contrib/RPMS/xfs/kernel-smp-2.6.9-11.EL.XFS.i686.rpm
をダウンロードして rpm -ivh --force kernel-smp-2.6.9-11.EL.XFS.i686.rpm 等でインストールします。それ以外の場合でも自分のシステム構成対応した kernelをダウンロンードしてインストールします。そのカーネルを使用してたちあげると、XFSファイルシステム利用がサポートされます。

また、yum利用の場合、yum で kernel が自動更新しないように /etc/yum.conf中に
exclude=kernels kernel*
だとかを入れておきます。(動作検証中)

ページトップに戻る

Scientific Linux 4.2 (X86_64)等でカーネルをソースから再構築する場合

Scientific Linux 4.2 (X86_64)のようにXFSをサポートしているkernelのパッケッージがない場合は、オリジナルのKernelのソースコードからカーネルを再構築したものを使用することができます。、あるいはこの次のセクションにあるCentosplusのカーネル(rpmパッケージ)を使用することもできます。前者の場合はソースコードを公開している米国upstrem venderで加えられたカーネルの改良のメリットを享受することができませんが、後者の場合は享受することができます。

1) Linux kernel ソースは ftp://ftp.riken.jp/Linux/kernel/v2.6 等にあります。 現時点(2006.1.17)では linux-2.6.15.1.tar.gz が最新です。

2) /usr/src/ に上記ファイルをもってきて、展開します。あとは README の 通り configure します。 こちらの環境ではconfigure時に最低限、設定変更が必要な option は

a) File Systems のところの XFS supportとその下の XFS関連のoptionを defaultの「無し」から 「build-in」 に設定します
b) /boot や / 等が ext3 の場合は File Systems のところの ext3 を moduler から build-in に変更します。(でないとboot時に ext3 がマ ウントできない)
c) System diskが SCSI diskや SATA場合は、Device drivers のところの SCSI driver supportと SCSI disk supportを moduler から build-in に変更します。(でないと boot時に SCSI/SATA diskが見えない)
d) system disk が software raid (ミラー)の時は Device Driver のところの Multi device driver support (RAID and LVM) を buid-in にして、Raid-1 (mirroring) も buid-inにする。(でないとboot時にミラー設定している /dev/md* がマウントできない)
e) 必要ならば Device Driver のところの
Fusion MPT device support ---> Fusion MPT ScsiHost drivers for SPI (NEW)
を buimd-in する。(例えば Sun Fire v40 の場合 LSI53C1030を使用しているので必要:以前のkernelのversionではdefaultでModulerだったのが最近はdefualtでは無しになっている)

等です。使用している Hardwareの構成によって さらに moluer や build-in に変更が必要なモジュールがある場合があります。あとは README の通り make, make install, make modules_install をします。rebootでこの kernelを選択し、正常起動することを確認した後、 /boot/grub/grub.conf 中の defaultを 0 に にすると boot時default でこのXFSファイルシステムをサポートする kernelが起動します。

また、yum利用の場合、yum で kernel が自動更新しないように /etc/yum.conf中に
exclude=kernels kernel*
だとかを入れておきます。(動作検証中)

ページトップに戻る

Centos 4.3 でcentosplusのカーネルを使用する場合

CentOS 4.3 の標準カーネルは XFS ファイルシステムをサポートしていませので、 XFSファイルシステムを使用するためにはXFSをサポートしているカーネルをインストールする必要があります。CentOSの場合は CentosplusにXFS,JFS,Reiserファイルシステムをサポートしているカーネルがあります。例えばi386の場合は
ftp://ftp.riken.jp/Linux/centos/4/centosplus/i386/RPMS
にXFS,JFS,Reiserをサポートしているカーネルがあるのでそれをインストールします。たとえば smp構成のCPUの場合は
ftp://ftp.riken.jp/Linux/centos/4/centosplus/i386/RPMS/kernel-smp-2.6.9-34.106.unsupported.i686.rpm
をダウンロードして rpm -ivh でインストールします。それ以外の場合でも自分のシステム構成対応した kernelをダウンロンードしてインストールします。そのカーネルを使用してたちあげると、XFSファイルシステム利用がサポートされます。

X86_64の場合は XFSファイルシステムをサポートしているカーネルは以下にありあります。
ftp://ftp.riken.jp/Linux/centos/4/centosplus/x86_64/RPMS

Scientific Linuxの場合でも、CentOSと元になっているパッケージのソースコードは同じなので、この Centosplusのカーネルを使用することができます。

また、yum利用の場合、yum で kernel が自動更新しないように /etc/yum.conf中に
exclude=kernels kernel*
だとかを入れておきます。(動作検証中)

ページトップに戻る

XFSサポートバイナリーのインストール方法

XFSのファイルシステムを初期設定したり、quotaを管理したりするためにXFSサポートバイナリーのインストールが必要です。i386やX86_64アーキテクチャのマシンの場合は

http://oss.sgi.com/projects/xfs/download.html からdownloadを経てあるいは ftp://ftp.riken.jp/Linux/xfs/cmd_rpms/RPMS/i386/ から

xfsprogs-2.7.10-1.i386.rpm
dmapi-2.2.3-1.i386.rpm
xfsdump-2.2.33-1.i386.rpm


をダウンロードしてrpm -ivh でインストールします。アップデートが頻繁に行われるので、ファイル名後半のバージョン番号は時間とともにかわっていきます。

ページトップに戻る
XFSファイルシステムの初期化とマウント

mkfs -t xfs /dev/<devname> あるいは mkfs.xfs /dev/<devname> で XFSファ イルシステムを作ります。既存のファイルシステムの上書き(初期化)をするときは後者で -f の optionをつけます。

ブート時に自動マウントをするためには例えば, /etc/fstab 中では 例えば以下のように記述します。
/dev/sde1  /mountpoint  xfs  defaults  1  2

次に説明のあるquotaを使用するときは以下のようにquotaのオプションを指定します。
/dev/sde1  /mountpoint  xfs  defaults,quota  1  2

ページトップに戻る
quotaの設定と使用

XFSファイルシステムで quota を使用するためには

1) Kernelに xfs quota のオプションが有効になっている。
2) ファイルシステムをマウントするときに quota のオプションをつけてマントする。

ことが必要です。 xfs_quota のコマンドを使用して quotaを設定することができます。 man xfs_quotaで使用方法がわかります。 quotaに関するコマンドの例は例えば以下の通りです。

mount -o uquota /dev/sde1/home /home
xfs_quota -x -c 'limit bsoft=500m bhard=550m username' /home
xfs_quota -x -c report /home


上の例の1行目は qutaオプションをつけてファイルシステムマウントする例、2行目は /home のファイルシステムに対して usernameのユーザにquotaを設定するコマンドの例、 3行目は /homeのファイルシステムの quota設定を表示する場合の例です。

ページトップに戻る


関連のリンク
Scientific Linux 4のインストールのヒント

(last updated 2006.4.19, first draft 2005.04.23)