XFS

提供: ArchWiki
2017年10月3日 (火) 22:28時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

XFS は Silicon Graphics, Inc によって開発された高性能ジャーナリングファイルシステムです。XFS はアロケーショングループを使って設計されているため並列化された IO で特に性能を発揮します。このため複数のストレージデバイスを使用するときは IO スレッド, ファイルシステムの帯域, ファイルとファイルシステムのサイズ全てをスケーリングすることが可能です。

インストール

XFS パーティションを管理するためのツールは公式リポジトリにある xfsprogs パッケージに含まれており、このパッケージはデフォルトでインストールされています。

データの破損

何らかの理由でデータが破損してしまった場合、手動で修復がする必要があります。

XFS ファイルシステムの修復

まず XFS ファイルシステムをアンマウントしてください:

# umount /dev/sda3

アンマウントしたら、xfs_repair(8) ツールを実行します:

# xfs_repair -v /dev/sda3

整合性

xfsprogs 3.2.0 から新しいオンディスクフォーマット (v5) が導入され、Self-Describing Metadata という名前のメタデータチェックサム機構が入っています。CRC32 に基づいて、突然の停電などでメタデータが破損するのを保護します。xfsprogs 3.2.3 以降を使う場合デフォルトでチェックサムは有効です。mkfs.xfs の実行時に -m crc=0 スイッチを使うことで無効にすることもできます:

# mkfs.xfs -m crc=0 /dev/target_partition

XFS の v5 オンディスクフォーマットが実運用に耐えるほど安定になったのは Linux カーネル 3.15 からとされます。

ノート: BtrfsZFS とは異なり、CRC32 チェックサムはメタデータだけに適用され、実際のデータには使われません。

パフォーマンス

速度を最適化するには、XFS ファイルシステムを次のコマンドで作成します:

# mkfs.xfs /dev/target_partition

はい、とてもシンプルです。なぜなら "ブースト機能" は全てデフォルトで "オン" になっている からです。

警告: パフォーマンスを上げるためにバリアや atime などの無効化を施すとデータの破損が頻繁に起こるようになる可能性があります。

XFS wiki によれば、XFS を最大限活用したい場合は、デフォルトの CFQ I/O スケジューラーを (Deadline, Noop, BFQ などに) 変更したほうが良いようです (特に SSD を使っている場合)。

ストライプサイズと幅

ファイルシステムをストライプする RAID 上に作成する場合は mkfs.xfs コマンドでストライプサイズを指定することで著しい速度の向上が望めます。

How to calculate the correct sunit,swidth values for optimal performance を見て下さい。

バリアの無効化

/etc/fstab ファイルに nobarrier マウントオプションを追加してファイルシステムのバリアの使用を無効化することでパフォーマンスを上げることができます。

アクセス日時

/etc/fstab ファイルに noatime マウントオプションを追加することでファイルシステムのパフォーマンスが向上することがあります。XFS ファイルシステムではデフォルトの atime の扱い方は relatime になっており、noatime と比べてオーバーヘッドをかなり減らしつつも atime の値を正常に保ちます。現在 Linux の全てのファイルシステムが (2.6.30 あたりから) デフォルトで relatime を使うようになっていますが、XFS が relatime を使うようになったのは2006年からです。そのため、パフォーマンスを理由に XFS で noatime を使う必要はほとんどありません。

また、noatime には nodiratime が含まれているため、noatime を指定したら nodiratime を指定する必要はなくなります。

デフラグ

XFS はエクステントベースであり遅延アロケーションを利用しているため断片化の問題はなかなか発生しないようになっていますが、マウントされたアクティブな XFS ファイルシステム上のファイルをデフラグできる、ファイルシステムデフラグユーティリティ (xfs_fsr, XFS filesystem reorganizer の略) が用意されています。定期的に XFS の断片化を監視するのにも使えます。

xfs_fsr(8) はマウントされたファイルシステムの編成を改善します。再編成アルゴリズムによって一度に一つのファイルが操作され、コンパクトになる、つまりファイルのエクステント (ファイルデータの連続ブロック) のレイアウトが改善されます。

フラグメンテーションレベルの確認

ファイルシステムにどれくらい断片化が発生しているのか確認するには:

# xfs_db -c frag -r /dev/sda3

デフラグの実行

デフラグを開始するには、xfsprogs パッケージに含まれている xfs_fsr コマンドを使います:

# xfs_fsr /dev/sda3

使われていない inode の btree

Linux 3.16 から、XFS にはフリーの inode を追跡するための btree が追加されています。基本的には既存の inode の割り当ての btree と同じですが、追跡するのが使われていない inode という点が異なります。この btree の目的は inode を割り当てるときに inode の空きを検索するスピードを高速化させることです。何年何ヶ月も使い込んだファイルシステムでのパフォーマンスが向上します。この機能を使うことでファイルシステム全体の信頼性に影響が出たり、リカバリするときに障害になることはありません。

この機能では新しい v5 オンディスクフォーマットを使っており、Linux カーネル 3.15 から業務用で使えるほどに安定している状態になったと判定されています。既存のディスク上の構造を変えることはありませんが、inode の割り当ての btree と整合性があるようにする必要があります。そのため、古いカーネルでは、使われていない inode の btree 機能を有効にした場合、読み取り専用でしかファイルシステムをマウントできません。

xfsprogs 3.2.3 以降を使う場合この機能はデフォルトで有効です。古いカーネルとディスクを共有したい場合などには mkfs.xfs の実行時に -m finobt=0 スイッチを使いこの機能を無効にすることもできます。CRC も一緒に無効にしてください:

# mkfs.xfs -m crc=0,finobt=0 /dev/target_partition

または finobt=0 を省いても無効になります (finobt のデフォルト値は crc に依存しています):

# mkfs.xfs -m crc=0 /dev/target_partition

参照