BTRFS修正不能エラーのあるファイルの検索


17

BTRFSファイルシステムでの回復不能なエラーに関する質問があります。具体的には、RAMスティックの1つで問題が発生した後、最近BTRFSスクラブを実行しましたが、4つの修正不可能なエラーを発見したようです。これは出力です:

scrub status for <UUID>
    scrub started at Thu Dec 25 15:19:22 2014 and was aborted after 89882 seconds
    total bytes scrubbed: 1.87TiB with 4 errors
    error details: csum=4
    corrected errors: 0, uncorrectable errors: 4, unverified errors: 0

幸いなことに、すべてを3次バックアップでバックアップしているので、ファイルを失うことについて特に心配する必要はありません(BTRFSの実験ステータスに関連する問題をよく知っています。データを安全に保つために複数のバックアップがあり、 「ソリューション。BTRFSを使用しないでください」という投稿をしないでください。

ただし、修正不可能なエラーに関連するファイルを特定する方法を知りたいのですが?それらを見つけて削除し、バックアップしたコピーに置き換えたいと思います。

誰かがこれを行う方法についての情報を持っている場合、私はあなたから聞いてみたいです。

前もって感謝します。

回答:


8

私は次の方法が便利だと思いました...

btrfs scrub ボリューム。

上記のように、任意の数のcsumエラーが表示されます。
あなたの例の使用CSUM = 4:エラーの詳細を。次のステートメントのテールディレクティブでその番号を使用します。

dmesg | grep "checksum error at" | tail -4 | cut -d\  -f24- | sed 's/.$//'

これをファイルにパイプで送信すると便利です(例> csums.txt

私はいくつかの提案されたiノード検索アプローチを試してみましたが、成功したとしても限られたものですべてに会いました。


私が理解する限り、表示される行数を制限し、重複を無視するためにtailを使用しています。次のsort | uniqような重複を取り除くために使用することをお勧めしますdmesg | grep "checksum error at" | cut -d\ -f24- | sed 's/.$//' | sort | uniq
。– niklasfi

3

はい、INODEまたはブロック番号からファイル名へのマッピングは難しい場合があります。本当に興味があるなら、このようなことを試して、どのファイルファイルをコピーするかを見てください...結局、ファイルが悪い場合はコピー中にエラーをスローするはずです。以前にこのタイプの手法を使用しました。

 find /mount-point -type f -exec cp {} /dev/null \;

 where mount-point is the ROOT node/mount-point of the affected filesystem

今すぐ実行して、うまくいけば何かが上手くいくと思います。アドバイスありがとうございます。結果については更新します。
レッドハック14

1
動作しないようだと言ってすみません= /修正不可能なエラーの原因となっている最初のファイルを見つけましたが、その後、「stale file handle」というメッセージを端末に送信します。確かにファイルは見つかりましたが、今はそれを取り除く方法がわかりません。BTRFSメーリングリストに連絡する必要があります。
レッドハック14

これを特別なディレクトリに移動して、その後の検索から除外できます。
mdpc 14

1
移動もコピーもせず、ファイルハンドルが古いことを通知し続けます。lsさえできません。
レッドハック14

を使用する場合cp -v、進行状況も監視できますfind / -type f -exec cp -v {} /dev/null \; 2> corrupted-files.txt。ただし、/proc/kcoreファイルは巨大である可能性があり(128TB)、コピー操作がハングする可能性があります。/procディレクトリには特別な魔法のファイルが含まれているので、それらをチェックする必要はありません。除外/procディレクトリを:sudo find / -type f -and -not -path /proc -exec cp -v {} /dev/null \; 2> corrupted-files.txt
ceremcem

2

dmesg修正不可能なチェックサムエラーに関係するファイルの詳細を提供します。通常、メッセージは次のようになります。「BTRFS:dev [...]の論理[...]でのチェックサムエラー、セクター[...]、ルート[...]、iノード[...]、オフセット[ ...]、長さ[...]、リンク[...](パス:[...]) "; 最後の情報は、破損したファイルへの絶対パスです。


1

私もここに来て、BTRFSからの「修正不可能なエラー」を探しました。上記のgrepは私にとってはうまくいきませんでした。代わりに使用する必要がありました:

$ dmesg | sed -n -r 's#.*BTRFS.*i/o error.*path: (.*)\)#\1#p' | sort -u
somepath/somefile.txt

パスがサブボリュームの開始点に対してどのように相対的であるかに注意してください-どのサブボリュームが入っているかは示されません。これは幸運なことに私にとっては問題ではありませんでした。


なにsomepath/somefile.txt?別のコマンドとして入力しているように見えますが、それとも入力したコマンドの出力ですか?すべてが1つのコマンドラインであると想定される場合は、表示のためにコマンドラインを分割しないでください。1つの長い行として答えに入れてください。しかし、それは何ですか?2つの入力sort(パイプとファイル)を提供していますか?またはsomepath/somefile.txt、出力ファイルにすることを意図していますか?(出力ファイルを再度使用する中間ファイルでない限り、出力ファイルを指定することはあまり役に立ちません。人々は結果を処理する方法を知っています。例えば、パイピングによって。)
Scott

これは元の質問に答えますか?わかりません。
私は

@TwistyImpersonatorまあ、それは明らかに(Mark)の回答に代わるものであることを意図しており、8票を得ました(そしてarrrrの回答の拡張です)。
スコット

1
@Scottの2行目は、コマンドの出力例です。
十字軍の
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.