「XFS」の版間の差分
(→整合性) |
|||
83行目: | 83行目: | ||
この機能では新しい v5 オンディスクフォーマットを使っており、Linux カーネル 3.15 から業務用で使えるほどに安定している状態になったと判定されています。既存のディスク上の構造を変えることはありませんが、inode の割り当ての btree と整合性があるようにする必要があります。そのため、古いカーネルでは、使われていない inode の btree 機能を有効にした場合、読み取り専用でしかファイルシステムをマウントできません。 |
この機能では新しい v5 オンディスクフォーマットを使っており、Linux カーネル 3.15 から業務用で使えるほどに安定している状態になったと判定されています。既存のディスク上の構造を変えることはありませんが、inode の割り当ての btree と整合性があるようにする必要があります。そのため、古いカーネルでは、使われていない inode の btree 機能を有効にした場合、読み取り専用でしかファイルシステムをマウントできません。 |
||
+ | xfsprogs 3.2.3 以降を使う場合この機能はデフォルトで有効です。古いカーネルとディスクを共有したい場合などには ''mkfs.xfs'' の実行時に {{ic|1=-m finobt=0}} スイッチを使いこの機能を無効にすることもできます。CRCも一緒に無効にする必要があることでしょう: |
||
− | XFS パーティションをフォーマットする際に ''finobt=1'' スイッチを使うことでこの機能を有効にできますが、''crc=1'' スイッチでメタデータのチェックサムを有効にする必要があります。したがって、使われていない inode の btree とメタデータチェックサムの両方を有効にするために以下のオプションが必要になります: |
||
− | # mkfs.xfs -m crc= |
+ | # mkfs.xfs -m crc=0,finobt=0 /dev/''target_partition'' |
+ | または短く({{ic|finobt}} のデフォルト値は {{ic|crc}} に依存しています) |
||
− | |||
+ | # mkfs.xfs -m crc=0 /dev/''target_partition'' |
||
− | 開発者によると、xfsprogs 3.3 リリースから、上記の ''-m crc=1,finobt=1'' オプションが mkfs のデフォルトオプションとなるそうです。 |
||
== 参照 == |
== 参照 == |
2015年12月18日 (金) 04:22時点における版
関連記事
XFS は Silicon Graphics, Inc によって開発された高性能ジャーナリングファイルシステムです。XFS はアロケーショングループを使って設計されているため並列化された IO で特に性能を発揮します。このため複数のストレージデバイスを使用するときは IO スレッド, ファイルシステムの帯域, ファイルとファイルシステムのサイズ全てをスケーリングすることが可能です。
目次
インストール
XFS パーティションを管理するためのツールは公式リポジトリにある xfsprogs パッケージに含まれており、このパッケージはデフォルトでインストールされています。
データの破損
何らかの理由でデータが破損してしまった場合、手動で修復がする必要があります。
XFS ファイルシステムの修復
まず XFS ファイルシステムをアンマウントしてください:
# umount /dev/sda3
アンマウントしたら、xfs_repair ツールを実行します:
# 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=1 /dev/target_partition
XFS の v5 オンディスクフォーマットが実運用に耐えるほど安定になったのは Linux カーネル 3.15 からとされます。
パフォーマンス
速度を最適化するには、XFS ファイルシステムを次のコマンドで作成します:
# mkfs.xfs /dev/target_partition
はい、とてもシンプルです。なぜなら "ブースト機能" は全てデフォルトで "オン" になっている からです。
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 はマウントされたファイルシステムの編成を改善します。再編成アルゴリズムによって一度に一つのファイルが操作され、コンパクトになる、つまりファイルのエクステント (ファイルデータの連続ブロック) のレイアウトが改善されます。
フラグメンテーションレベルの確認
ファイルシステムにどれくらい断片化が発生しているのか確認するには:
# 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
のデフォルト値は crc
に依存しています)
# mkfs.xfs -m crc=0 /dev/target_partition