「XFS」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎管理: 英語版から転載)
 
(同じ利用者による、間の19版が非表示)
49行目: 49行目:
 
# mkfs.xfs -m crc=0 /dev/''target_partition''
 
# mkfs.xfs -m crc=0 /dev/''target_partition''
   
{{Note|メタデータ CRC を無効にすると、以下の [[#Free inode btree]], [[#Reverse mapping btree]], [[#タイムスタンプ]] 機能、および "参照カウントbtree"(詳細は {{man|8|mkfs.xfs|OPTIONS}} 参照)も無効になります。}}
+
{{Note|メタデータ CRC を無効にすると、以下の [[#Free inode btree]], [[#Reverse mapping btree]], [[#タイムスタンプ]] 機能、および "reference count btrees"(詳細は {{man|8|mkfs.xfs|OPTIONS}} 参照)も無効になります。}}
   
 
XFS v5 オンディスクフォーマットは Linux Kernel 3.15 以降の実稼働ワークロードでは安定と見なされています。
 
XFS v5 オンディスクフォーマットは Linux Kernel 3.15 以降の実稼働ワークロードでは安定と見なされています。
57行目: 57行目:
 
=== Free inode btree ===
 
=== Free inode btree ===
   
Linux 3.16 から、XFS には空き inode を追跡する btree が追加されました。これは既存の inode 割り当て btree と同等ですが、free inode btree は少なくとも1つの空き inode を持つ inode チャンクを追跡することは例外です。目的は、inode 割り当てのための空き inode クラスタのルックアップを改善することです。古くなったファイルシステム、つまり、何百万ものファイルをファイルシステムに追加したり、ファイルシステムから削除したりして、何年も経過したファイルシステムでのパフォーマンスを向上させることができます。この機能を使用しても、ファイルシステム全体の信頼性レベルやリカバリ機能には影響がありません。
+
Linux 3.16 から、XFS には free inode を追跡する btree が追加されました。これは既存の inode 割り当て btree と同等ですが、free inode btree は少なくとも1つの free inode を持つ inode チャンクを追跡することは例外です。目的は、inode 割り当てのための free inode クラスタのルックアップを改善することです。古くなったファイルシステム、つまり、何百万ものファイルをファイルシステムに追加したり、ファイルシステムから削除したりして、何年も経過したファイルシステムでのパフォーマンスを向上させることができます。この機能を使用しても、ファイルシステム全体の信頼性レベルやリカバリ機能には影響がありません。
   
 
この機能は、Linux Kernel 3.15 以降の実運用ワークロードで安定したと考えられる新しい v5 オンディスク・フォーマットに依存しています。既存のディスク上の構造は変更されませんが、inode 割り当て btree との一貫性を維持する必要がある新しい構造が追加されます。このため、古いカーネルでは free inode btree 機能を持つ読み取り専用ファイルシステムのみをマウントすることができます。
 
この機能は、Linux Kernel 3.15 以降の実運用ワークロードで安定したと考えられる新しい v5 オンディスク・フォーマットに依存しています。既存のディスク上の構造は変更されませんが、inode 割り当て btree との一貫性を維持する必要がある新しい構造が追加されます。このため、古いカーネルでは free inode btree 機能を持つ読み取り専用ファイルシステムのみをマウントすることができます。
71行目: 71行目:
 
=== Reverse mapping btree ===
 
=== Reverse mapping btree ===
   
リバースマッピング btree は、そのコアで、ストレージスペース使用量のセカンダリインデックスであり、プライマリスペース使用量メタデータの冗長コピーを効果的に提供します。これにより、ファイルシステム操作にいくらかのオーバーヘッドが追加されますが、ファイルシステムに含まれるため、相互参照が非常に高速になります。破損したプライマリメタデータをセカンダリコピーから再構築できるため、オンラインでファイルシステムを修復するために不可欠な機能です [https://blogs.oracle.com/linux/xfs-online-filesystem-checking]
+
Reverse mapping btree は、そのコアで、ストレージスペース使用量のセカンダリインデックスであり、プライマリスペース使用量メタデータの冗長コピーを効果的に提供します。これにより、ファイルシステム操作にいくらかのオーバーヘッドが追加されますが、ファイルシステムに含まれるため、相互参照が非常に高速になります。破損したプライマリメタデータをセカンダリコピーから再構築できるため、オンラインでファイルシステムを修復するために不可欠な機能です [https://blogs.oracle.com/linux/xfs-online-filesystem-checking]
   
 
この機能は、Linux 4.16 の実験的ステータスを卒業し、本番環境に対応しています。ただし、オンラインファイルシステムのチェックと修復は(これまでのところ)この機能の唯一のユースケースであるため、少なくともオンラインチェックが本番環境に移行するまではオプトインのままです。
 
この機能は、Linux 4.16 の実験的ステータスを卒業し、本番環境に対応しています。ただし、オンラインファイルシステムのチェックと修復は(これまでのところ)この機能の唯一のユースケースであるため、少なくともオンラインチェックが本番環境に移行するまではオプトインのままです。
87行目: 87行目:
 
=== タイムスタンプ ===
 
=== タイムスタンプ ===
   
Linux 5.10 以降、XFS は、リファクタリングされたタイムスタンプおよび i ノードエンコーディング関数を使用して、タイムスタンプを 64ビットナノ秒カウンターとして処理し、ビットシフトして有効サイズを増やすことをサポートしています。これにより、XFS は [[Wikipedia:ja:2038年問題|2038年問題]] を回避して 2486 年まで実行できるようになります。''bigtime'' 有効にして新しい XFS ファルシテム作成すると、1901年12月から2038年1月までではなく、2486年7月まで。下位互換性を維持するために、ビッグタイムスタンプ機能は現在デフルトで有効っていせん[https://www.phoronix.com/scan.php?page=news_item&px=XFS-Linux -5.10]
+
Linux 5.10 以降、XFS は、リファクタリングされたタイムスタンプおよび inode encoding 関数を使用して、タイムスタンプを 64ビットナノ秒カウンターとして処理し、ビットシフトして有効サイズを増やすことをサポートしています。これにより、XFS は [[Wikipedia:ja:2038年問題|2038年問題]] を回避して 2486 年まで実行できるようになります。''bigtime'' 有効になると、タタンプの範囲 1901年12月 から 2038年1月 ではなく、1901年12月 から 2486年7月することができます。</q> この機能は、クータタイマーの有効期限を 1970年1月から 2106年2月 ではく、1970年1月 から 2486年 にすることもでき
   
  +
xfsprogs 5.15 以降、新しいファイルシステムではデフォルトでタイムスタンプが有効になっています。
この機能では、1970年1月から2106年2月ではなく、1970年1月から2486年7月までのクォータタイマーの有効期限も許可されます。
 
   
  +
==== アップグレード ====
この機能または将来を見据えた新しいファイルシステムを試すには、ファイルシステムの作成中に{{ic|1=-m bigtime=1}} パラメータを渡します。
 
   
  +
{{man|8|xfs_info}} を使用して、既存のファイルシステムで bigtime が有効になっているかどうかを確認します。
# mkfs.xfs -m bigtime=1 ''device''
 
   
  +
# xfs_info / | grep bigtime
xfsprogs 5.11 以降、これは {{man|8|xfs_admin}} を使用して既存の(マウントされていない)ファイルシステムでも有効にできます。
 
  +
... bigtime=0 ...
  +
  +
{{Pkg|xfsprogs}} で、5.11 以降では、既存の (マウントされていない) ファイルシステムを {{man|8|xfs_admin}} でアップグレードすることができます:
   
 
# xfs_admin -O bigtime=1 ''device''
 
# xfs_admin -O bigtime=1 ''device''
   
または {{man|8|xfs_repair}} を使用:
+
または {{man|8|xfs_repair}}:
   
 
# xfs_repair -c bigtime=1 ''device''
 
# xfs_repair -c bigtime=1 ''device''
  +
  +
ついでに {{ic|inobtcount}} も有効にしておくとよいでしょう (これも新しいデフォルトです)
   
 
==パフォーマンス==
 
==パフォーマンス==
   
  +
[https://xfs.org/index.php/XFS_FAQ#Q:_I_want_to_tune_my_XFS_filesystems_for_.3Csomething.3E XFS FAQ] より:
速度を最適化するには、XFS ファイルシステムを次のコマンドで作成します:
 
  +
  +
既に使用されているデフォルト値は、そもそも最高のパフォーマンスを 得られるように最適化されています。mkfs.xfs は、シングルディスクと MD/DM RAID セットアップの違いを検出し、 ファイルシステムを適切に構成するために使用するデフォルト値を変更することができ ます。
  +
  +
ほとんどの場合、{{ic|mkfs.xfs}} で考慮する必要があるのは、ハードウェア RAID デバイスのストライプユニットと幅を指定することだけです。(参照 [[XFS#ストライプサイズと幅]])
  +
  +
{{Tip|[[RAID]] デバイス上で XFS ファイルシステムを使用する場合、{{ic|largeio}}, {{ic|swalloc}}, {{ic|logbsize}}, {{ic|allocsize}} 値を大きくするなどして、パフォーマンスを向上できる可能性があります。これらのフラグの詳細については、以下の記事を参照してください。:
  +
  +
* https://www.beegfs.io/wiki/StorageServerTuning
  +
* https://help.marklogic.com/Knowledgebase/Article/View/505/0/recommended-xfs-settings-for-marklogic-server
  +
}}
  +
  +
マウントオプションについては、メタデータのパフォーマンスを大きく変えるのは、{{ic|logbsize}} マウントオプションだけです。{{ic|logbsize}} を増やすと、与えられたワークロードのジャーナル IO 数が減ります。このメタデータ性能の向上と引き換えに、アクティブに修正を行っている間にシステムがクラッシュした場合、リカバリ後に ''見つからない'' 操作が増える可能性があります。
   
  +
{{Tip|利用可能な全てのマウントオプションの詳細については {{man|5|xfs}} を参照してください。}}
# mkfs.xfs /dev/''target_partition''
 
   
  +
カーネル3.2.12 の時点で、デフォルトの I/O スケジューラーである CFQ は、XFS の並列化の多くを無効にします。
はい、とてもシンプルです。なぜなら [http://xfs.org/index.php/XFS_FAQ#Q:_I_want_to_tune_my_XFS_filesystems_for_.3Csomething.3E "ブースト機能" は全てデフォルトで "オン" になっている] からです。
 
   
  +
{{Note|Arch は SATA または [[NVMe]] の場合、I/O スケジューラーを使用しないように設定されています。[これは {{ic|/sys/block/nvme*n*/queue/scheduler}} の内容を読むことで確認することができます。}}
{{Warning|パフォーマンスを上げるためにバリアや atime などの無効化を施すとデータの破損が頻繁に起こるようになる可能性があります。}}
 
   
  +
したがって、最適なパフォーマンスを得るには、ほとんどの場合、[[XFS#設定|設定]] に従うだけです。
[http://xfs.org/index.php/XFS_FAQ#Q:_I_want_to_tune_my_XFS_filesystems_for_.3Csomething.3E XFS wiki] によれば、XFS を最大限活用したい場合は、デフォルトの CFQ [[ソリッドステートドライブ#I.2FO_スケジューラー|I/O スケジューラー]]を ([[wikipedia:Deadline_scheduler|Deadline]], [[wikipedia:NOOP_scheduler|Noop]], [[Linux-ck#BFQ_I.2FO_スケジューラを有効にする方法|BFQ]] などに) 変更したほうが良いようです (特に [[SSD]] を使っている場合)。
 
   
 
===ストライプサイズと幅===
 
===ストライプサイズと幅===
147行目: 164行目:
 
# xfs_fsr /dev/sda3
 
# xfs_fsr /dev/sda3
   
=== Deduplication ===
+
=== 重複排除 ===
   
  +
''reflink'' 機能はカーネルバージョン 4.9 から利用可能で、バージョン 5.1.0 からはデフォルトで有効になっており、[[btrfs]] と同じようにファイルの高速 reflink コピーと事後重複排除が可能です。
The ''reflink'' feature, available since kernel version 4.9 and enabled by default since {{ic|mkfs.xfs}} version 5.1.0, allows creating fast reflink'ed copies of files as well as deduplication after the fact, in the same way as [[btrfs]]:
 
   
  +
既存のファイルシステムは、{{Pkg|duperemove}} などのツールを使用して重複排除できます。
==== Reflink copies ====
 
   
  +
==== Reflink コピー ====
Reflink copies initially use no additional space:
 
  +
  +
Reflink コピーは、最初は追加のスペースを使用しません:
   
 
$ cp --reflink bigfile1 bigfile2
 
$ cp --reflink bigfile1 bigfile2
   
  +
いずれかのファイルが編集され、コピーオンライトが実行されるまで。これは、(大きな)ファイルのスナップショットを作成するのに非常に役立ちます。
Until either file is edited, and a copy-on-write takes place. This can be very useful to create snapshots of (large) files.
 
   
==== Deduplication ====
+
==== 重複排除 ====
   
  +
既存のファイルシステムは、{{Pkg|duperemove}} などのツールを使用して重複排除できます。
Existing filesystems can be deduped using tools like {{Pkg|duperemove}}.
 
   
=== External XFS Journal ===
+
=== 外部XFSジャーナル ===
   
Using an external log (metadata journal) on for instance a [[SSD]] may be useful to improve performance [https://docs.oracle.com/en/operating-systems/oracle-linux/8/fsadmin/xfs-main.html#extjnl-xfs]. See {{man|8|mkfs.xfs}} for details about the {{ic|logdev}} parameter.
+
たとえば、[[SSD]] で外部ログ(メタデータジャーナル)を使用すると、パフォーマンスを向上させるのに役立つ場合があります [https://docs.oracle.com/en/operating-systems/oracle-linux/8/fsadmin/xfs- main.html#extjnl-xfs] {{ic|logdev}} パラメータの詳細については、{{man|8|mkfs.xfs}} を参照してください。
   
  +
{{Note|フラッシュメモリを使用すると、ドライブが消耗する可能性があることに注意してください SSDの摩耗の詳細について。[[パフォーマンスの最大化#ディスクの読み書きを減らす]] を参照して下さい。}}
{{Warning|Beware using flash-memory may wear-out the drive. See [[Improving performance#Reduce disk reads/writes]] for SSD wear-out details.}}
 
   
  +
XFS ファイルシステムを作成する際に、指定したサイズの外部ジャーナルを予約するには、 {{ic|1=-l logdev=''device'',size=''size''}} オプションを {{ic|mkfs.xfs}} コマンドに指定します。{{ic|size}} パラメータを省略した場合、ファイルシステムのサイズに基づいたジャーナルサイズが使用されます。外部ジャーナルを使用するように XFS ファイルシステムをマウントするには、 [[マウント]] コマンドに {{ic|1=-o logdev=''device''}} オプションを指定します。
To reserve an external journal with a specified size when you create an XFS file system, specify the {{ic|1=-l logdev=''device'',size=''size''}} option to the {{ic|mkfs.xfs}} command. If you omit the {{ic|size}} parameter, a journal size based on the size of the file system is used. To mount the XFS file system so that it uses the external journal, specify the {{ic|1=-o logdev=''device''}} option to the [[mount]] command.
 
   
=== Sync interval ===
+
=== 同期間隔 ===
   
  +
XFS には専用の [[sysctl]] 変数があり、[https://wiki.archlinux.org/title/Improving_performance#Writeback_interval_and_buffer_size 書き込み間隔とバッファサイズ] をデフォルト値 3000 で設定することができます。
XFS has a dedicated [[sysctl]] variable for setting the [[Improving performance#Writeback interval and buffer size|writeback interval]] with a default value of 3000.
 
   
  +
{{Warning|より大きな値を設定するとパフォーマンスが向上しますが、停電によるデータ消失の深刻度も上がります。}}
{{Warning|While larger values may increase performance, they also increase the severity of data loss caused by a power outage.}}
 
   
 
{{hc|/etc/sysctl.d/20-xfs-sync-interval.conf|2=
 
{{hc|/etc/sysctl.d/20-xfs-sync-interval.conf|2=
185行目: 204行目:
 
=== リサイズ ===
 
=== リサイズ ===
   
  +
XFS は、{{man|8|xfs_growfs}} を使用してオンラインでサイズ変更できます:
{{Note|現在、XFS の縮小は [https://xfs.org/index.php/Shrinking_Support 出来ません]}}
 
   
  +
# xfs_growfs -D ''size'' ''/path/to/mnt/point''
XFS はパーティションが変更された後、オンラインでサイズを変更することができます。マウントポイントを最初のパラメータとして {{ic|xfs_growfs}} を実行すれば、XFS ファイルシステムを最大サイズに拡大できます。
 
   
  +
{{ic|-D size}} を省略した場合、ファイルシステムは可能な限り最大のサイズ、つまりパーティションのサイズまで自動的に拡張されます。
# xfs_growfs ''/path/to/mnt/point''
 
  +
  +
{{Note|{{man|8|xfs_growfs}} に記載されているように、xfs は縮小を限定的にサポートしています。
  +
"AG が 1 つしかないファイルシステムは、それ以上縮小することはできません。"ここで、''AG'' は ''割り当てグループ'' を表します。}}
   
 
=== オンラインメタデータチェック (スクラブ) ===
 
=== オンラインメタデータチェック (スクラブ) ===
199行目: 221行目:
 
{{ic|xfs_scrub_all.timer}} を [[有効化]]/[[起動]] します、すべての XFS ファイルシステムのオンライン メタデータを定期的にチェックします。
 
{{ic|xfs_scrub_all.timer}} を [[有効化]]/[[起動]] します、すべての XFS ファイルシステムのオンライン メタデータを定期的にチェックします。
   
{{Note|[[編集]]{{ic|xfs_scrub_all.timer}}:タイマーは毎週日曜日の午前3時10分に実行され、失敗した場合は [[systemd/タイマー#リアルタイムタイマー|すぐにトリガー]] されます。最後の開始時間、つまりシステムの電源がオフになっているため。}}
+
{{Note|{{ic|xfs_scrub_all.timer}} を [[編集]] すると良いでしょう、タイマーは毎週日曜日の午前3時10分に実行され、最後の開始時刻を過ぎた場合、つまりシステムの電源がオフになっている場合に[[systemd/タイマー#リアルタイムタイマー|すぐにトリガー]] されます。}}
   
=== Repair ===
+
=== リペア ===
   
{{Note|<q>Unlike other Linux file systems, ''xfs_repair'' does not run at boot time, even when an XFS file system was not cleanly unmounted. In the event of an unclean unmount, ''xfs_repair'' simply replays the log at mount time, ensuring a consistent file system.</q>[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/xfsrepair]}}
+
{{Note|他の Linux ファイルシステムとは異なり、''xfs_repair'' は、XFS ファイルシステムがきれいにアンマウントされなかった場合でも、起動時に実行されません。アンマウントがうまくいかなかった場合、''xfs_repair'' はマウント時に単にログを再生し、一貫したファイルシステムを確保します。 [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/xfsrepair]}}
   
From [https://docs.oracle.com/en/operating-systems/oracle-linux/6/adminsg/ol_repair_xfs.html Checking and Repairing an XFS File System]:
+
[https://docs.oracle.com/en/operating-systems/oracle-linux/6/adminsg/ol_repair_xfs.html Checking and Repairing an XFS File System] から:
   
  +
XFS ファイルシステムをマウントできない場合、'''xfs_repair -n''' コマンドを使用してその整合性をチェックすることができます。通常、このコマンドは問題があると思われるアンマウントされたファイルシステムのデバイスファイルに対してのみ実行します。'''xfs_repair -n''' コマンドは repair 操作を完了する必要がある場合にファイルシステムに加えられるであろう変更を示す出力を表示しますが、ファイルシステムを直接変更することはありません。
<q>If you cannot mount an XFS file system, you can use the '''xfs_repair -n''' command to check its consistency. Usually, you would only run this command on the device file of an unmounted file system that you believe has a problem. The '''xfs_repair -n''' command displays output to indicate changes that would be made to the file system in the case where it would need to complete a repair operation, but will not modify the file system directly.</q>
 
   
  +
ファイルシステムをマウントすることができ、適切なバックアップがない場合、'''xfsdump''' を使って既存のファイルシステムのデータのバックアップを試みることができます。
<q>If you can mount the file system and you do not have a suitable backup, you can use '''xfsdump''' to attempt to back up the existing file system data, However, the command might fail if the file system's metadata has become too corrupted.</q>
 
   
  +
'''xfs_repair''' コマンドを使用すると、デバイスファイルで指定された XFS ファイルシステムの修復を試みることができます。このコマンドはジャーナル・ログを再生し、ファイル・システムがきれいにアンマウントされなかったために生じたかもしれないあらゆる不整合を修正します。ファイルシステムに不整合がない限り、XFS ファイルシステムをマウントするたびにジャーナルが再生されるため、通常このコマンドを使用する必要はありません。
<q>You can use the '''xfs_repair''' command to attempt to repair an XFS file system specified by its device file. The command replays the journal log to fix any inconsistencies that might have resulted from the file system not being cleanly unmounted. Unless the file system has an inconsistency, it is usually not necessary to use the command, as the journal is replayed every time that you mount an XFS file system.</q>
 
   
  +
まず、ファイルシステムを [[ファイルシステム#ファイルシステムのアンマウント|アンマウント]] してから、{{man|8|xfs_repair}} ツールを実行します。
First [[unmount]] the filesystem, then run the {{man|8|xfs_repair}} tool:
 
   
 
# xfs_repair ''device''
 
# xfs_repair ''device''
   
  +
ジャーナルログが破損している場合、xfs_repair に '''-L''' オプションを指定することでログをリセットすることができます。
<q>If the journal log has become corrupted, you can reset the log by specifying the '''-L''' option '''to xfs_repair'''.</q>
 
   
{{Warning|<q>The ''xfs_repair'' utility cannot repair an XFS file system with a dirty log. To clear the log, mount and unmount the XFS file system. If the log is corrupt and cannot be replayed, use the {{ic|-L}} option ("force log zeroing") to clear the log, that is, {{ic|xfs_repair -L /dev/device}}. Be aware that this may result in further corruption or data loss.</q>[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/xfsrepair]}}
+
{{Warning|''xfs_repair'' ユーティリティはダーティなログを持つ XFS ファイルシステムを修復することはできません。ログを消去するには、XFS ファイルシステムをマウントし、アンマウントしてください。ログが破損していて再生できない場合、{{ic|-L}} オプション ("force log zeroing") を使ってログをクリアします、つまり {{ic|xfs_repair -L /dev/device}} です。これは、さらなる破損やデータ損失を引き起こす可能性があることに注意してください。[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/xfsrepair]}}
   
  +
{{Warning|ログをリセットすると、ファイルシステムが不整合な状態になり、データ損失やデータ破損の原因となることがあります。'''xfs_db''' を使った XFS ファイルシステムのデバッグと修復の経験がない限り、代わりにファイルシステムを再作成し、バックアップからその内容を復元することをお勧めします。[https://docs.oracle.com/en/operating-systems/oracle-linux/6/adminsg/ol_repair_xfs.html]}}
{{Warning|<q>Resetting the log can leave the file system in an inconsistent state, resulting in data loss and data corruption. Unless you are experienced in debugging and repairing XFS file systems using '''xfs_db''', it is recommended that you instead recreate the file system and restore its contents from a backup.</q>[https://docs.oracle.com/en/operating-systems/oracle-linux/6/adminsg/ol_repair_xfs.html]}}
 
   
  +
ファイルシステムをマウントできない場合、または適切なバックアップがない場合は、'''xfs_db''' の使用経験がない限り、'''xfs_repair''' を実行することが唯一の実行可能なオプションです。
<q>If you cannot mount the file system or you do not have a suitable backup, running '''xfs_repair''' is the only viable option unless you are experienced in using '''xfs_db'''.</q>
 
   
  +
'''xfs_db''' は、XFS ファイルシステムを手動でデバッグおよび修復できるようにする内部コマンドセットを提供します。これらのコマンドを使用すると、ファイルシステムでスキャンを実行したり、そのデータ構造をナビゲートして表示したりできます。 '''-x''' オプションを指定してエキスパートモードを有効にすると、データ構造を変更できます。
<q>'''xfs_db''' provides an internal command set that allows you to debug and repair an XFS file system manually. The commands allow you to perform scans on the file system, and to navigate and display its data structures. If you specify the '''-x''' option to enable expert mode, you can modify the data structures.</q>
 
   
 
# xfs_db [-x] device
 
# xfs_db [-x] device
   
<q>For more information, see the {{man|8|xfs_db}} and {{man|8|xfs_repair}}, and the '''help''' command within '''xfs_db'''.</q>
+
詳しくは、{{man|8|xfs_db}}{{man|8|xfs_repair}}、および '''xfs_db''' 内の '''help''' コマンドを参照してください。
   
See also [https://xfs.org/index.php/XFS_FAQ#Q:_Which_factors_influence_the_memory_usage_of_xfs_repair.3F Which factors influence the memory usage of xfs_repair?] and [https://xfs.org/docs/xfsdocs-xml-dev/XFS_User_Guide/tmp/en-US/html/xfs-repair.html XFS Repair].
+
参照 [https://xfs.org/index.php/XFS_FAQ#Q:_Which_factors_influence_the_memory_usage_of_xfs_repair.3F Which factors influence the memory usage of xfs_repair?] [https://xfs.org/docs/xfsdocs-xml-dev/XFS_User_Guide/tmp/en-US/html/xfs-repair.html XFS Repair]
   
=== Data rescue ===
+
=== データレスキュー ===
   
  +
{{ic|mount -o ro}} で読み取り専用にマウントしても、XFS ファイルシステムがきれいにアンマウントされていなければ、ログは再生されます。
Even when being mounted read-only with {{ic|mount -o ro}} an XFS file system's log will be replayed if it has not been unmounted cleanly.
 
   
  +
破損したストレージデバイス上の破損した XFS ファイルシステムは、 うまくいけばこれ以上破損させずにファイルをコピーできるように、 読み込み専用でマウントされるべきですが、きれいにアンマウントされず、 ログが再生できないほど破損しているのでマウントできない、という状況がありえます。
There may be situations where a compromised XFS file system on a damaged storage device should be mounted read-only, so that files may be copied off it hopefully without causing further damage, yet it cannot be mounted because it has not been unmounted cleanly and is damaged to such an extent that the log cannot be replayed.
 
  +
また、ログを再生することは、破損したファイルシステムに書き込むことを意味し、それ自体が悪い考えかもしれないことを考慮に入れてください。
Also, consider that replaying the log means writing to the compromised file system, which might be a bad idea in itself.
 
   
  +
XFS ファイルシステムに書き込まず、ログを再生せずにマウントするには、 {{ic|mount -o ro,norecovery}} を使ってください。
To mount an XFS file system without writing to it in any way and without replaying the log, use {{ic|mount -o ro,norecovery}}.
 
   
 
=== Undelete ===
 
=== Undelete ===
   
{{AUR|xfs_undelete}} can recover (under certain conditions) deleted files on an unmounted or read-only mounted XFS filesystem. See https://github.com/ianka/xfs_undelete for more information.
+
{{AUR|xfs_undelete}} は、アンマウントされた、または読み込み専用にマウントされた XFS ファイルシステム上の削除されたファイルを(特定の条件下で)復元することができます。 詳しくは https://github.com/ianka/xfs_undelete を見て下さい。
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
250行目: 272行目:
 
=== ルートファイルシステムクォータ ===
 
=== ルートファイルシステムクォータ ===
   
XFS quota マウントオプション ({{ic|uquota}}, {{ic|gquota}}, {{ic|prjquota}}, etc) はファイルシステムの再マウントの際に失敗します。ルートファイルシステムでクォータを有効にするには、マウントオプションは initramfs に [[カーネルパラメータ]] として渡されなければなりません。{{ic|1=rootflags=}} です。その後、ルート ({{ic|/etc/fstab}}) ファイルシステムのマウントオプションの中にリストされてはいけません。
+
XFS クォータマウントオプション ({{ic|uquota}}, {{ic|gquota}}, {{ic|prjquota}}, etc) はファイルシステムの再マウントの際に失敗します。ルートファイルシステムでクォータを有効にするには、マウントオプションは initramfs に [[カーネルパラメータ]] として渡されなければなりません。{{ic|1=rootflags=}} です。その後、ルート ({{ic|/etc/fstab}}) ファイルシステムのマウントオプションの中にリストされてはいけません。
   
{{Note|標準的な Linux [[ディスククォータ]] と比べて XFS Quota にはいくつかの違いがあります。この記事 https://inai.de/linux/adm_quota は読む価値があるかもしれません。}}
+
{{Note|標準的な Linux [[ディスククォータ]] と比べて XFS クォータにはいくつかの違いがあります。この記事 https://inai.de/linux/adm_quota は読む価値があるかもしれません。}}
   
=== xfs_scrub_all は、ユーザ "nobody" がマウントポイントにアクセスできない場合、失敗します ===
+
=== ユーザ ''nobody'' がマウントポイントにアクセスできない場合、xfs_scrub_all が失敗す ===
   
 
{{ic|xfs_scrub_all}} を実行すると、マウントされた各 XFS ファイルシステムに対して {{ic|xfs_scrub@.service}} が起動します。このサービスはユーザ {{ic|nobody}} として実行されるので、{{ic|nobody}} がディレクトリに移動できない場合、エラーで失敗します。
 
{{ic|xfs_scrub_all}} を実行すると、マウントされた各 XFS ファイルシステムに対して {{ic|xfs_scrub@.service}} が起動します。このサービスはユーザ {{ic|nobody}} として実行されるので、{{ic|nobody}} がディレクトリに移動できない場合、エラーで失敗します。
263行目: 285行目:
   
 
サービスの実行を許可するには、ユーザー {{ic|nobody}} に実行権限があるようにマウントポイントの [[パーミッション]] を変更します。
 
サービスの実行を許可するには、ユーザー {{ic|nobody}} に実行権限があるようにマウントポイントの [[パーミッション]] を変更します。
  +
  +
=== fsck.xfs が systemd ベースの initramfs で失敗する ===
  +
  +
[[mkinitcpio]] で生成された systemd ベースの initramfs を {{ic|base}} フックなしで使用すると、[[journal]] に次のメッセージが表示されます。
  +
  +
systemd-fsck[288]: fsck: /usr/bin/fsck.xfs: execute failed: No such file or directory
  +
systemd-fsck[286]: fsck failed with exit status 8.
  +
systemd-fsck[286]: Ignoring error.
  +
  +
これは、{{man|8|fsck.xfs}} がシェルスクリプトであり、実行に {{ic|/bin/sh}} が必要なためです。{{ic|/usr/bin/sh}} は {{ic|base}} フックによって提供されるため、解決策は {{ic|/etc/mkinitcpio.conf}} の HOOKS 配列に追加することです。例えば:
  +
  +
HOOKS=('''base''' systemd ... )
   
 
==参照==
 
==参照==
   
*[http://xfs.org/index.php/XFS_FAQ XFS FAQ]
+
* [https://xfs.wiki.kernel.org/ XFS wiki]
*[http://xfs.org/index.php/Improving_Metadata_Performance_By_Reducing_Journal_Overhead Improving Metadata Performance By Reducing Journal Overhead]
+
* [http://xfs.org/index.php/XFS_FAQ XFS FAQ]
  +
* [http://xfs.org/index.php/Improving_Metadata_Performance_By_Reducing_Journal_Overhead Improving Metadata Performance By Reducing Journal Overhead]
*[[wikipedia:ja:XFS]]
 
  +
* [[wikipedia:ja:XFS]]
  +
* [https://xfs.org/index.php/XFS_Papers_and_Documentation XFS User Guide] XFS ユーザーガイドはもう存在しませんが、git リポジトリへのリンクがあります

2024年8月14日 (水) 05:57時点における最新版

関連記事

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以降 古いカーネルで読み書き可能な xfs が必要な場合は、 mkfs.xfs(8) を呼ぶときに -m crc=0 スイッチを使えば、簡単に無効にできます。

# mkfs.xfs -m crc=0 /dev/target_partition
ノート: メタデータ CRC を無効にすると、以下の #Free inode btree, #Reverse mapping btree, #タイムスタンプ 機能、および "reference count btrees"(詳細は mkfs.xfs(8) § OPTIONS 参照)も無効になります。

XFS v5 オンディスクフォーマットは Linux Kernel 3.15 以降の実稼働ワークロードでは安定と見なされています。

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

Free inode btree

Linux 3.16 から、XFS には free inode を追跡する btree が追加されました。これは既存の inode 割り当て btree と同等ですが、free inode btree は少なくとも1つの free inode を持つ inode チャンクを追跡することは例外です。目的は、inode 割り当てのための free inode クラスタのルックアップを改善することです。古くなったファイルシステム、つまり、何百万ものファイルをファイルシステムに追加したり、ファイルシステムから削除したりして、何年も経過したファイルシステムでのパフォーマンスを向上させることができます。この機能を使用しても、ファイルシステム全体の信頼性レベルやリカバリ機能には影響がありません。

この機能は、Linux Kernel 3.15 以降の実運用ワークロードで安定したと考えられる新しい v5 オンディスク・フォーマットに依存しています。既存のディスク上の構造は変更されませんが、inode 割り当て btree との一貫性を維持する必要がある新しい構造が追加されます。このため、古いカーネルでは free inode btree 機能を持つ読み取り専用ファイルシステムのみをマウントすることができます。

この機能は xfsprogs 3.2.3 以降を使用している場合、デフォルトで有効になっています。古いカーネルで書き込み可能なファイルシステムが必要な場合、XFS パーティションをフォーマットする際に finobt=0 スイッチで無効にすることができます。このとき、crc=0が一緒に必要になります。

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

または(finobtcrc に依存するため)

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

Reverse mapping btree

Reverse mapping btree は、そのコアで、ストレージスペース使用量のセカンダリインデックスであり、プライマリスペース使用量メタデータの冗長コピーを効果的に提供します。これにより、ファイルシステム操作にいくらかのオーバーヘッドが追加されますが、ファイルシステムに含まれるため、相互参照が非常に高速になります。破損したプライマリメタデータをセカンダリコピーから再構築できるため、オンラインでファイルシステムを修復するために不可欠な機能です [5]

この機能は、Linux 4.16 の実験的ステータスを卒業し、本番環境に対応しています。ただし、オンラインファイルシステムのチェックと修復は(これまでのところ)この機能の唯一のユースケースであるため、少なくともオンラインチェックが本番環境に移行するまではオプトインのままです。

mkfs.xfs(8) § OPTIONS より:

Reverse mapping btree は、ファイルシステムブロックをファイルシステムブロックの所有者にマップします。ほとんどのマッピングは i ノード番号とオフセットになりますが、ファイルシステムメタデータへのマッピングもあります。このセカンダリメタデータを使用して、プライマリメタデータを検証したり、ディスクエラーが発生したときに失われたデータを正確に特定したりできます。

詳しくは [6][7] も参照してください。

この機能または将来を見据えた新しいファイルシステムを試すには、ファイルシステムの作成中に -m rmapbt=1 パラメータを渡します。

# mkfs.xfs -m rmapbt=1 device

タイムスタンプ

Linux 5.10 以降、XFS は、リファクタリングされたタイムスタンプおよび inode encoding 関数を使用して、タイムスタンプを 64ビットナノ秒カウンターとして処理し、ビットシフトして有効サイズを増やすことをサポートしています。これにより、XFS は 2038年問題 を回避して 2486 年まで実行できるようになります。bigtime が有効になると、タイムスタンプの範囲を 1901年12月 から 2038年1月 ではなく、1901年12月 から 2486年7月 にすることができます。 この機能は、クォータタイマーの有効期限を 1970年1月から 2106年2月 ではなく、1970年1月 から 2486年 にすることもできます。

xfsprogs 5.15 以降、新しいファイルシステムではデフォルトでタイムスタンプが有効になっています。

アップグレード

xfs_info(8) を使用して、既存のファイルシステムで bigtime が有効になっているかどうかを確認します。

# xfs_info / | grep bigtime
... bigtime=0 ...

xfsprogs で、5.11 以降では、既存の (マウントされていない) ファイルシステムを xfs_admin(8) でアップグレードすることができます:

# xfs_admin -O bigtime=1 device

または xfs_repair(8):

# xfs_repair -c bigtime=1 device

ついでに inobtcount も有効にしておくとよいでしょう (これも新しいデフォルトです)

パフォーマンス

XFS FAQ より:

既に使用されているデフォルト値は、そもそも最高のパフォーマンスを 得られるように最適化されています。mkfs.xfs は、シングルディスクと MD/DM RAID セットアップの違いを検出し、 ファイルシステムを適切に構成するために使用するデフォルト値を変更することができ ます。

ほとんどの場合、mkfs.xfs で考慮する必要があるのは、ハードウェア RAID デバイスのストライプユニットと幅を指定することだけです。(参照 XFS#ストライプサイズと幅)

ヒント: RAID デバイス上で XFS ファイルシステムを使用する場合、largeio, swalloc, logbsize, allocsize 値を大きくするなどして、パフォーマンスを向上できる可能性があります。これらのフラグの詳細については、以下の記事を参照してください。:

マウントオプションについては、メタデータのパフォーマンスを大きく変えるのは、logbsize マウントオプションだけです。logbsize を増やすと、与えられたワークロードのジャーナル IO 数が減ります。このメタデータ性能の向上と引き換えに、アクティブに修正を行っている間にシステムがクラッシュした場合、リカバリ後に 見つからない 操作が増える可能性があります。

ヒント: 利用可能な全てのマウントオプションの詳細については xfs(5) を参照してください。

カーネル3.2.12 の時点で、デフォルトの I/O スケジューラーである CFQ は、XFS の並列化の多くを無効にします。

ノート: Arch は SATA または NVMe の場合、I/O スケジューラーを使用しないように設定されています。[これは /sys/block/nvme*n*/queue/scheduler の内容を読むことで確認することができます。

したがって、最適なパフォーマンスを得るには、ほとんどの場合、設定 に従うだけです。

ストライプサイズと幅

ファイルシステムをストライプする 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

重複排除

reflink 機能はカーネルバージョン 4.9 から利用可能で、バージョン 5.1.0 からはデフォルトで有効になっており、btrfs と同じようにファイルの高速 reflink コピーと事後重複排除が可能です。

既存のファイルシステムは、duperemove などのツールを使用して重複排除できます。

Reflink コピー

Reflink コピーは、最初は追加のスペースを使用しません:

$ cp --reflink bigfile1 bigfile2

いずれかのファイルが編集され、コピーオンライトが実行されるまで。これは、(大きな)ファイルのスナップショットを作成するのに非常に役立ちます。

重複排除

既存のファイルシステムは、duperemove などのツールを使用して重複排除できます。

外部XFSジャーナル

たとえば、SSD で外部ログ(メタデータジャーナル)を使用すると、パフォーマンスを向上させるのに役立つ場合があります main.html#extjnl-xfs logdev パラメータの詳細については、mkfs.xfs(8) を参照してください。

ノート: フラッシュメモリを使用すると、ドライブが消耗する可能性があることに注意してください SSDの摩耗の詳細について。パフォーマンスの最大化#ディスクの読み書きを減らす を参照して下さい。

XFS ファイルシステムを作成する際に、指定したサイズの外部ジャーナルを予約するには、 -l logdev=device,size=size オプションを mkfs.xfs コマンドに指定します。size パラメータを省略した場合、ファイルシステムのサイズに基づいたジャーナルサイズが使用されます。外部ジャーナルを使用するように XFS ファイルシステムをマウントするには、 マウント コマンドに -o logdev=device オプションを指定します。

同期間隔

XFS には専用の sysctl 変数があり、書き込み間隔とバッファサイズ をデフォルト値 3000 で設定することができます。

警告: より大きな値を設定するとパフォーマンスが向上しますが、停電によるデータ消失の深刻度も上がります。
/etc/sysctl.d/20-xfs-sync-interval.conf
fs.xfs.xfssyncd_centisecs = 10000

管理

リサイズ

XFS は、xfs_growfs(8) を使用してオンラインでサイズ変更できます:

# xfs_growfs -D size /path/to/mnt/point

-D size を省略した場合、ファイルシステムは可能な限り最大のサイズ、つまりパーティションのサイズまで自動的に拡張されます。

ノート: xfs_growfs(8) に記載されているように、xfs は縮小を限定的にサポートしています。 "AG が 1 つしかないファイルシステムは、それ以上縮小することはできません。"ここで、AG割り当てグループ を表します。

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

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

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

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

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

リペア

ノート: 他の Linux ファイルシステムとは異なり、xfs_repair は、XFS ファイルシステムがきれいにアンマウントされなかった場合でも、起動時に実行されません。アンマウントがうまくいかなかった場合、xfs_repair はマウント時に単にログを再生し、一貫したファイルシステムを確保します。 [8]

Checking and Repairing an XFS File System から:

XFS ファイルシステムをマウントできない場合、xfs_repair -n コマンドを使用してその整合性をチェックすることができます。通常、このコマンドは問題があると思われるアンマウントされたファイルシステムのデバイスファイルに対してのみ実行します。xfs_repair -n コマンドは repair 操作を完了する必要がある場合にファイルシステムに加えられるであろう変更を示す出力を表示しますが、ファイルシステムを直接変更することはありません。

ファイルシステムをマウントすることができ、適切なバックアップがない場合、xfsdump を使って既存のファイルシステムのデータのバックアップを試みることができます。

xfs_repair コマンドを使用すると、デバイスファイルで指定された XFS ファイルシステムの修復を試みることができます。このコマンドはジャーナル・ログを再生し、ファイル・システムがきれいにアンマウントされなかったために生じたかもしれないあらゆる不整合を修正します。ファイルシステムに不整合がない限り、XFS ファイルシステムをマウントするたびにジャーナルが再生されるため、通常このコマンドを使用する必要はありません。

まず、ファイルシステムを アンマウント してから、xfs_repair(8) ツールを実行します。

# xfs_repair device

ジャーナルログが破損している場合、xfs_repair に -L オプションを指定することでログをリセットすることができます。

警告: xfs_repair ユーティリティはダーティなログを持つ XFS ファイルシステムを修復することはできません。ログを消去するには、XFS ファイルシステムをマウントし、アンマウントしてください。ログが破損していて再生できない場合、-L オプション ("force log zeroing") を使ってログをクリアします、つまり xfs_repair -L /dev/device です。これは、さらなる破損やデータ損失を引き起こす可能性があることに注意してください。[9]
警告: ログをリセットすると、ファイルシステムが不整合な状態になり、データ損失やデータ破損の原因となることがあります。xfs_db を使った XFS ファイルシステムのデバッグと修復の経験がない限り、代わりにファイルシステムを再作成し、バックアップからその内容を復元することをお勧めします。[10]

ファイルシステムをマウントできない場合、または適切なバックアップがない場合は、xfs_db の使用経験がない限り、xfs_repair を実行することが唯一の実行可能なオプションです。

xfs_db は、XFS ファイルシステムを手動でデバッグおよび修復できるようにする内部コマンドセットを提供します。これらのコマンドを使用すると、ファイルシステムでスキャンを実行したり、そのデータ構造をナビゲートして表示したりできます。 -x オプションを指定してエキスパートモードを有効にすると、データ構造を変更できます。

# xfs_db [-x] device

詳しくは、xfs_db(8)xfs_repair(8)、および xfs_db 内の help コマンドを参照してください。

参照 Which factors influence the memory usage of xfs_repair?XFS Repair

データレスキュー

mount -o ro で読み取り専用にマウントしても、XFS ファイルシステムがきれいにアンマウントされていなければ、ログは再生されます。

破損したストレージデバイス上の破損した XFS ファイルシステムは、 うまくいけばこれ以上破損させずにファイルをコピーできるように、 読み込み専用でマウントされるべきですが、きれいにアンマウントされず、 ログが再生できないほど破損しているのでマウントできない、という状況がありえます。 また、ログを再生することは、破損したファイルシステムに書き込むことを意味し、それ自体が悪い考えかもしれないことを考慮に入れてください。

XFS ファイルシステムに書き込まず、ログを再生せずにマウントするには、 mount -o ro,norecovery を使ってください。

Undelete

xfs_undeleteAUR は、アンマウントされた、または読み込み専用にマウントされた XFS ファイルシステム上の削除されたファイルを(特定の条件下で)復元することができます。 詳しくは https://github.com/ianka/xfs_undelete を見て下さい。

トラブルシューティング

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

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

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

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

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 に実行権限があるようにマウントポイントの パーミッション を変更します。

fsck.xfs が systemd ベースの initramfs で失敗する

mkinitcpio で生成された systemd ベースの initramfs を base フックなしで使用すると、journal に次のメッセージが表示されます。

systemd-fsck[288]: fsck: /usr/bin/fsck.xfs: execute failed: No such file or directory
systemd-fsck[286]: fsck failed with exit status 8.
systemd-fsck[286]: Ignoring error.

これは、fsck.xfs(8) がシェルスクリプトであり、実行に /bin/sh が必要なためです。/usr/bin/shbase フックによって提供されるため、解決策は /etc/mkinitcpio.conf の HOOKS 配列に追加することです。例えば:

HOOKS=(base systemd ... )

参照