基本的な質問:
Fsckは、クレームが重複している100GB(1700万ブロック)のファイルを修正するのにどのくらいの時間がかかりますか?
質問の長いバージョン:
UPSの障害後、最初の起動時にfsckに落ちるUbuntu 10.04サーバーに直面しました。これは正常です。通常は、プロンプトに同意してさまざまな問題を修正するために30分ほど購入すると、サーバーを元に戻すのに十分です。
今日ではないけど。今日、私は数分の膨大な数のリストを取得し、コンソールマトリクススタイルを過ぎて数分間スクロールしました。それは基本的に次の行でした:
_Multiply-claimed blocks in inode xxxxxxxxx
_
とにかく、スクロールして数分経った後、ようやく落ち着いて私は次のようになりました。
_Pass 1C: Scanning directories for inodes with multiply-claimed blocks
_
に続く...
_Pass 1D: Reconciling multiply-claimed blocks
_
..そして..
_(There are 32 inodes containing multiply-claimed blocks.)
_
それはそれほど悪くないように聞こえましたが、それからそれはそのようにいくつかのファイルを通過し始めました:
_File /path/to/a/file
_
has 1 multiply-claimed block(s) shared with 1 file(s):
_/path/to/another/file
_
_Clone multiply-claimed blocks? yes
_
この質問は私のために答えられ、プロセスは続けられました。しかし、それは非常に長い時間を要しました。たった2MBのファイルでしたが、何時間も。
その後、同様のダイアログが表示されましたが、今回は100GBであり、0のファイルと共有され、1700万を超える複数のクレームされたブロックであると報告されています
それは2日前で、現在も実行されています。
だから、私の元の質問に戻って、これにはどのくらいの時間がかかりますか?それは失われた原因ですか、これに対処するための代替方法はありますか?私が本当に理解していないのは、100 GBのファイルが0ファイルと共有されていると報告されている理由です。これは、複数要求されたブロックの意味を正しく理解していると矛盾します。
所要時間は、ディスクサブシステムのパフォーマンス、修復中の損傷などによって異なります。
ある程度のファイルシステムの破損があるようです。実際のファイルシステムはどれくらい大きいですか? 100 GBのファイルで、後でVM image?これはa VM server?ですが、virtualboxについて話しているのですか?
個人的には1日以上かかり、損傷が確実に1つのファイルにある場合は、バックアップからファイルを復元し、問題が継続する兆候がある場合は、ドライブが偶発的に故障していないと想定して、再フォーマットしてバックアップから復元します。ファイルシステムの信頼性に問題が生じ始めています。ドライブ自体に障害が発生していない場合、ファイルシステムは、新しく起動するまで広範に問題を抱えている可能性があります。
しかし、それは私です。
これは、6ディスク、4.5TB ext4ファイルシステムのRAIDアレイで発生します。 Linux 3.3.7-1-Arch#1 SMP PREEMPT i686
私はrsyncを使用してサーバー全体をext4に同期します。これらは、私がこれらの多重クレームされたブロックと重複するiノードメッセージを取得するファイルです。
私が助けたように思えたいくつかのことは、ext4がバリアとdata = orderedサポートでマウントされていることを確認することでした。
/dev/md5 /md5 ext4 defaults,noatime,nouser_xattr,stripe=1536,data=ordered 0 2
私が取ったもう1つのステップは、RAIDでビットマップを有効にすることでした。
mdadm --grow /dev/md5 --bitmap=internal
または
mdadm --grow /dev/md5 --bitmap=/external/md5.bitmap
Raidビットマップとext4ジャーナルの両方を外部デバイスに配置すると、最も効果的に動作するようです。
以前は、ドライブがオートサスペンドモードになるときにこの問題が発生していました。彼らが一時停止状態から目を覚まそうとしている間に彼らに書いたり(または試みたり)すると、これらの問題が大きく発生するように思われました。私がやったことは、USBデバイスで自動サスペンドを完全に無効にすることでした:
usbcore.autosuspend=-1
差出人: http://kernel.org/doc/Documentation/filesystems/ext4.txt
3つの異なるデータモードがあります。
書き戻しモードdata = writebackモードでは、ext4はデータをジャーナルしません。このモードは、デフォルトモードのメタデータジャーナリングで、XFS、JFS、およびReiserFSと同様のレベルのジャーナリングを提供します。クラッシュ+リカバリにより、クラッシュの直前に書き込まれたファイルに誤ったデータが表示される可能性があります。このモードは、通常、ext4の最高のパフォーマンスを提供します。
順序付きモードdata = orderedモードでは、ext4はメタデータを正式にジャーナルするだけですが、データブロックに関連するデータ変更に関連するメタデータ情報を、トランザクションと呼ばれる単一のユニットに論理的にグループ化します。新しいメタデータをディスクに書き込むときは、関連するデータブロックが最初に書き込まれます。一般に、このモードは、書き戻しよりも少し低速ですが、ジャーナル>モードよりも大幅に高速です。
ジャーナルモードdata = journalモードは、完全なデータとメタデータのジャーナリングを提供します。すべての新しいデータは、最初にジャーナルに書き込まれ、次に最終的な場所に書き込まれます。クラッシュが発生した場合、ジャーナルを再生して、データとメタデータの両方を一貫した状態にすることができます。このモードは、データの読み取りと書き込みを同時に行う必要がある場合を除き、最も低速で、他のすべてのモードよりもパフォーマンスが優れています。現在、このデータジャーナリングモードが選択されている場合、ext4は遅延割り当てをサポートしていません。
これには修正すべき素晴らしい例があります: http://www.redhat.com/archives/ext3-users/2009-February/msg00021.html
これは長い時間の原因であると考えられているように思われます。また、複数のファイルで要求されたブロックがゼロのファイルで共有されている謎は、RAIDアレイの劣化が原因でした。
障害のあるドライブを取り外すとすぐに、fsckははるかに速くなりました。複数の申し立てが行われたブロックはまだいくつかありましたが、非常に迅速に修正されました。
以前にUbuntuでRAIDアレイの機能低下が発生したことがあり、通常、GRUBフェーズの直後に警告が表示されますが、この場合は発生しませんでした。
似たような問題があったと思います。 RAID0アレイに2つのHDDがあります。一度、デバイスをアンマウントした後、fsck
を手動で実行しました。私の痛みには、VMがまだ実行中で、fscked中にデバイスにアクセスしていることを認識していませんでした。その結果、たくさんのmultiply claimed blocks
が発生しました。サーバーが進行中にスーパーブロックを壊したと思うので、RAIDをマウントすることさえできなくなった。
スーパーブロックを復元し、もう一度fsckを実行して、「複数の要求されたブロック」とは関係のないすべての問題を修復することで、問題を修正しました。これにはしばらく時間がかかり、プロセスに参加して、fsckに「複数の要求されたブロック」を修復しないよう指示する必要がありました。
その後、スーパーブロックが修正され、デバイスをもう一度マウントできました。今、私はfsckを数回実行してチェックしました。「主張された複数のブロック」の影響を受けたファイルはctrl^c
を押してプロセスを停止し、影響を受けたファイルをコピーして元のファイルを1回削除しました。
型破りに聞こえますが、問題はすぐに解決し、HDDはきれいなようです(e2fsck
によると)。
これらを問題に修正するより良い/より速い方法があったら、私はそれらについて聞いてうれしいです。
ジャーナルなしでext2またはext4を使用していますか?ジャーナルでこのようなエラーが発生することはありません。
はい、ゼロのファイルで共有されている複数のクレームされたブロックを持つことは意味がありません。このバグは[email protected]メーリングリストで報告してください。