web-dev-qa-db-ja.com

マウントされたパーティションをfsckできないのはなぜですか?

マウントされたパーティションをfsckしてはいけないことはよく知られています。ファイルシステムがfsckによって書き込まれるである場合、これが簡単に破損につながる可能性があることを理解できます(たとえば、-aオプションが使用されます)が、マウントされたディスクで読み取り専用チェックを実行できない理由?

43
mike

から:

http://linux.die.net/man/8/fsck.ext

「一般に、マウントされたファイルシステムでe2fsckを実行するのは安全ではありません。唯一の例外は、-nオプションが指定されており、-c-l、または-Lオプションは指定されていません。ただし、安全であっても、ファイルシステムがマウントされている場合、e2fsckによって出力される結果は無効です。e2fsckで、マウントされているファイルシステムを確認してください。唯一の正しい答えは「いいえ」です。自分が何をしているのかを本当に理解している専門家だけが、この質問に他の方法で答えることを検討してください。

28
MathewC

基本的な問題は、ファイルシステムチェッカーが(通常)ファイルシステムの一部ではないことです。代わりに、カーネル内のファイルシステムコードと同じディスクに対して読み書きを行う別個のプログラムです。その結果、アクティブなファイルシステムでfsckを実行すると、2つの異なるエンティティが同じデータ(ディスク)を読み取っている(そして変更している可能性があります)が、どのような方法でも互いに調整されていないことになります。その結果、他の人が指摘したように、ほとんどのチェッカーは、実行中に他の誰もファイルシステムメタデータを変更していないと期待しています。カーネルファイルシステムがチェッカーが予期しないものを変更すると、混乱したり、誤ったエラーを報告したりします。

「オンライン」で(つまり、ファイルシステムがアクティブな状態で)実行されるように明示的に設計されたチェッカーを備えたファイルシステムがいくつかあります。 FFS/UFSの新しいバージョンでは、ファイルシステムの最近のスナップショット(読み取り専用、ポイントインタイム、コピーオンライトレプリカ)に対してfsckを実行することでこれを行います。割り当てビットマップに不整合などの問題が見つかった場合は、rawディスクに書き込むのではなく、システムコールを介して問題を修正します。これにより、アクティブなファイルシステムと調整できます。

NetAppのWAFLには、オンラインチェックツールもあります。おそらく他にもあります。

31
Keith Smith

読み取り専用モードでマウントされているパーティションでfsckを実行すると、ばかばかしいでしょう。ファイルシステムはfsckの下で変更され、ファイルシステムからfsckがキャッシュするメモリ内データは無効になります(したがって、fsckは不整合を認識します)。読み取り専用モードで読み取り専用でマウントされたファイルシステムでfsckを実行して、有効な結果を得ることができます。読み取り専用でマウントされたファイルシステムでfsckを読み取り/書き込みモードで実行すると、実行中にfsckがファイルシステムに変更を加えると、カーネルはその下でファイルシステムの構造が予期せず変化するのを確認します。それも悪いでしょう。

11
Evan Anderson

I/Oスループットが低下する可能性があるという事実は別として、fsckの実行中にファイルシステムが変更されている場合、fsckが変更を追跡し、不整合を報告することはできません。

XFSのような一部のファイルシステムでは、ファイルシステムが読み書き可能でマウントされている間に整合性のチェックを実行できますが、誤ったエラーが報告される可能性があるという警告があります。 xfs_checkは、チェックを実行する前にファイルシステムを読み取り専用でマウント解除またはマウントすることをお勧めします。

9
Kamil Kisiel

まあ、fsckのポイントは、ファイルシステムの不整合を報告することです。

ただし、これらのチェックの多くは複数のFS構造を含みます。誰かがFS(データの書き込み)を変更している場合、これらの構造は一時的に同期しなくなる可能性があります。 fsckは、実際には問題ではないが、これを不整合と見なします。fsckは、不整合が一時的なものであるか、修正が必要な永続的な問題であるかを判断する方法がありません。したがって、これはおそらく機能しません(FSは、オンラインチェックを可能にするために特別に設計されています。一部は可能ですが、ext3はできません)。

6
sleske

まあ、できます。 fsck -n/dev/sda1は、少なくともext3では正確にそれを行います。私はそれをテストしました:)

3
Sven