XFS

提供: ArchWiki
2022年3月12日 (土) 22:27時点におけるKgx (トーク | 投稿記録)による版 (→‎データの破損: 設定を翻訳して追加)
ナビゲーションに移動 検索に移動

関連記事

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

準備

XFS ユーザースペースユーティリティ xfsprogs パッケージを インストール して下さい。 XFS ファイルシステムを管理するために必要なツールが含まれています。

設定

デバイス に新しいファイルシステムを作成するには、次を使用します。

# mkfs.xfs device

一般に、デフォルトのオプションは一般的な使用に最適です。[1] [2]

サンプル出力:

meta-data=/dev/device            isize=256    agcount=4, agsize=3277258 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=13109032, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=6400, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
ヒント:
  • -L label オプションでファイルシステムにラベルを付けることができます。
  • 既存のファイルシステムを含むブロックデバイス上で mkfs.xfs を使用する場合、 ファイルシステムを上書きするために -f オプションを追加します。[3] 'この操作により、以前のファイルシステムに含まれていたデータは全て破壊されます'
ノート: XFS ファイルシステムの作成後、そのサイズを縮小することはできません。ただし、xfs_growfs コマンドを使用して拡大することはできます [4] 参照 #リサイズ

整合性

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

管理

リサイズ

ノート: 現在、XFS の縮小は 出来ません

XFS はパーティションが変更された後、オンラインでサイズを変更することができます。マウントポイントを最初のパラメータとして xfs_growfs を実行すれば、XFS ファイルシステムを最大サイズに拡大できます。

# xfs_growfs /path/to/mnt/point

オンラインメタデータチェック (スクラブ)

警告: このプログラムは 実験的 であり、その動作やインターフェースはいつでも変更できることを意味します。xfs_scrub(8) を参照してください。

xfs_scrub はカーネルに XFS ファイルシステム内の全てのメタデータオブジェクトをスクラブするように要求します。メタデータレコードは明らかに悪い値をスキャンされ、他のメタデータと相互参照されます。その目的は、ファイルシステム内の他のメタデータに対する個々のメタデータレコードの一貫性を調べることで、ファイルシステム全体の一貫性に対する妥当な信頼性を確立することです。破損したメタデータは、無傷の冗長なデータ構造が存在すれば、他のメタデータから再構築することができる。

xfs_scrub_all.timer有効化/起動 します、すべての XFS ファイルシステムのオンライン メタデータを定期的にチェックします。

ノート: 編集xfs_scrub_all.timer:タイマーは毎週日曜日の午前3時10分に実行され、失敗した場合は すぐにトリガー されます。最後の開始時間、つまりシステムの電源がオフになっているため。

トラブルシューティング

ルートファイルシステムクォータ

XFS quota マウントオプション (uquota, gquota, prjquota, etc) はファイルシステムの再マウントの際に失敗します。ルートファイルシステムでクォータを有効にするには、マウントオプションは initramfs に カーネルパラメータ として渡されなければなりません。rootflags= です。その後、ルート (/etc/fstab) ファイルシステムのマウントオプションの中にリストされてはいけません。

ノート: 標準的な Linux ディスククォータ と比べて XFS Quota にはいくつかの違いがあります。この記事 https://inai.de/linux/adm_quota は読む価値があるかもしれません。

xfs_scrub_all は、ユーザ "nobody" がマウントポイントにアクセスできない場合、失敗します

xfs_scrub_all を実行すると、マウントされた各 XFS ファイルシステムに対して xfs_scrub@.service が起動します。このサービスはユーザ nobody として実行されるので、nobody がディレクトリに移動できない場合、エラーで失敗します。

xfs_scrub@mountpoint.service: Changing to the requested working directory failed: Permission denied
xfs_scrub@mountpoint.service: Failed at step CHDIR spawning /usr/bin/xfs_scrub: Permission denied
xfs_scrub@mountpoint.service: Main process exited, code=exited, status=200/CHDIR

サービスの実行を許可するには、ユーザー nobody に実行権限があるようにマウントポイントの パーミッション を変更します。

参照