破損した/アクセスできないディスクブロックを持つファイルを特定して修正する方法


9

2011年後半のMacbook ProでMavericks 10.9.2を実行しています。その唯一のHDDは、Bootcampでフォーマットされた750GBドライブです。まだ十分に動作していますが、デフラグパスを実行すると、デフラグツール(iDefrag)による移動を拒否されているファイルがたくさんあることがわかりました。

iDefragは、ファイルにアクセスすると、POSIXエラーコード5を報告します。ランダムに1つを選択し、ファイルをシェル内の別の場所にコピーしようとすると、エラーが報告されます。これにより、問題は実際にあり、ディスク/ FSにあると思います。cpの出力は次のとおりです。

cp: unity_nophysx.nexe: Input/output error

エラーコード5は私が知る限り「アクセス拒否」ですが、デフラグプロセスは管理者として実行されており、疑わしいファイルでsudoを使用してcpを実行しても違いはありません。

ディスクユーティリティ、fsck、およびApple Hardware Testはすべて、ディスクに問題がないと主張しています。SMARTエラーは報告されておらず、いくつかのアクセス許可エラーがありましたが、iDefragが不満を言っているファイルにはありませんでした。ディスクユーティリティは、不満なしにそれらを修正したと主張しています。

おそらく100以上の破損したファイルがありますが、それでもドライブのごく一部です。私の知る限り、システムファイルや重要なデータは影響を受けません。データを取得するのはいいことですが、再インストールしたり、バックアップを行ったりしてもかまいません。この時点では、それが本当にドライブの故障なのか、書き込み中にドライブが移動されたためのいくつかの不良セクターなのか、または回避できるその他の小さな破損なのかはわかりません。私は最悪のケースを想定しています。おそらく、システムを再構築する必要がないように、少し大きいHDDを入手し、既存のドライブを複製する必要があります。

私の質問は本当に、これらの壊れたファイルを適切に壊れているとマークして修正またはパージする方法です。これにより、ディスクのクローンは成功し、アクセスできないファイル/ブロックでハングアップしません。Disk Utilityは問題を認識していないし、その仕事をするコマンドラインやサードパーティのツールも知らない。ドライブが他の点では正常であると思われるため、ディスク全体を消去してゼロから始めたくないので、修復/診断ツールを探しています。


SuperUserに関するこのかなり詳細な同様の議論を読むことをお勧めします:superuser.com/q/148227
2014年

残念ながら、正常なディスクでテストしました:)、volitans-software.com/smart_utility.php。かなりシンプルで本格的なツールのようです。あなたはそれを試して、最も顕著に「再割り当てセクター」カウンターをチェックするかもしれません。
dan 2014年

回答:


8

その構造のレベルで健全なファイルシステムに直面していて、ディスクに障害のあるブロックがあるファイルを見つけたい場合は、次のようにします。

  1. Time MachineまたはCarbon Copy Clonerを使用してディスクの完全バックアップを作成します

    このバックアップを確認してください。

  2. 次の重くて危険な(ファイルシステム構造の外に不良ブロックがある場合)コマンドを実行します(スペースを含むファイル名が機能するように{}が引用符で囲まれていることを確認してください)。

    find / -type f -print -exec dd if="{}" of=/dev/null bs=1m \;
    

この重いfindコマンドは、プレーンファイルの名前を出力し(したがって、ファイルを読み取るのではなく、ディレクトリエントリのみ)、その後、すべてのデータブロックの完全かつ高速な読み取りを続行します。

不良ブロックを含む最初のファイルにヒットfindすると、カーネルがログオンread error/var/log/system.log、システムの速度が低下するか、システムが完全に停止します。これは、通常、この通常の修正タスク専用の内部プールで見つかった不良ブロックを再配置するためのハードドライブ容量に依存します。不良ブロックを含むこのファイルは、によって出力される最後の名前になりますfind

このファイル名を紙に書き留めてください!このファイル名が次のとおりだとします。

/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9

この時点で、+ findを押すとすぐに殺すことができるかもしれません。うまく殺せない場合は、Macをクラッシュさせてください。ctrlC

Macを再起動したら、不良ブロックを含むファイルを直接確認します。

dd if='/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9' of=/dev/null bs=1m

コマンドが正常に終了した場合、エラーはディスクがこのファイルを読み取って不良ブロックを再割り当てするのに十分な軽さでした。

  • コマンドが終了しない場合、通常はコマンドを強制終了できず、データが完全に失われるため、もう一度Macをクラッシュさせる必要があります。

この最後のケースでは、ディスクの交換を検討し、最後のバックアップから作業する必要があります。他のいくつかのファイルにも不良ブロックが含まれている可能性があり、それらを読み取っていない限り、長い間検出されないままになっている可能性があります。

カーネルは、一度も読んだことがないブロックに対しては、読み取りエラーを発生させません。


ああ、これは絶対に私が望んでいたトリックのようなものです。find / ddスクリプトを使用した最初のパスは、ディスク上のすべてのファイル/ブロックに触れます。そして、「入出力エラー」を与える一連のファイルを確実に見つけ、コマンドのログをファイルに出力し、次に、それをgrepして、どのファイルがダフかを調べます。ddコマンド自体は、何らかの自動修正をトリガーするのに十分ではないようです(OS Xがそれを実行したことさえ知りませんでした)が、少なくとも、ファイルを識別するための信頼できる方法を提供します。
MrCranky 2014年

プラス面として、OSがこれらの不良ブロックのあるファイルから読み取ろうとしたときに、クラッシュしたり、ひどくハングアップしたりしません。私は見ていないMay 10 20:42:15 ICE kernel[0]: disk0s2: I/O error.ログのポップアップを、それをトリガしたファイルに関しては見当もつかない。しかし、その後、コマンドは非常に楽しく実行されます。
MrCranky 2014年

不良ブロックを修正するのに十分なブロックがプール内にまだ残っているため、カーネルはBBFHでハングしません。dd何も修正されません。このコマンドの目的は、データをコピーして可能な限り高速に変換することです。ディスクはまだ軽いエラーを修復することができます。ディスクの価格はあなたの仕事に匹敵するものではありません。
2014年

うーん、はい、私はそれを仮定しました:ddは、1つのファイルからすべてのデータを広げ、別の場所(この場合は、薄い空気)に置くための単純なツールです。本当に重要なのは、ファイルに関連付けられているすべてのブロックが読み取られることです。私が得ていないのは、OS Xがその場合に期待することです。明らかにカーネルはこれらの不良ブロックを読み取ることができませんが、ディスク自体がそれらを修正でき、修正できると思いますか?元の不良ブロックからデータを取得できない場合、どのように他の場所にシフトしますか?
MrCranky 2014年

すばらしい質問です。ディスクは、ブロックの読み取り時に自動的に再試行します。頭の位置が機械的に別の位置にあるとき。この試みのいずれかが成功した場合、不良ブロックの修復に使用可能なブロックの1つにデータがコピーされます。不良ブロックには不良のフラグが付けられ、二度と使用されません。一方、すべての再試行が失敗した場合、データは保存されず、非常に長い時間が経過すると、ディスクはブロックに不良のフラグを付け、新しい空のブロックを可視ディスクに割り当てます。カーネルは回復不可能なディスクエラーを報告します。
2014年

4

起動中にCommand+を押して、シングルユーザーモードで再起動しSます。プロンプトが表示されたら(次のようになるはずですroot #)、タイプしてfsck -fを押しReturnます。これはMacの組み込みファイルシステム整合性チェックツールであり、起動ファイルシステムのエラーを見つけて修復できます。表示されなくなるまで**The volume [volume name] was modified.**、またはツールが3回続けて失敗するまで、このコマンドを実行します。

ツールが失敗する場合、それはより大きな問題を示している可能性があります(ただし、ツールの出力を確認しないと何が起きるかはわかりません)。いずれの場合も、ディスクツールを実行する前に、できる限りすべてのバックアップをとってください。完了したら、rebootプロンプトに入力し、Enterキーを押して(ご想像のとおり!)コンピューターを再起動します。

詳細については、こちらの fsckのマニュアルページを参照してください


おもしろいですが、それはfsckに非常によく似ており、-fがあり、シングルユーザーモードでも、ディスクユーティリティが行ったこととまったく同じです。ディスクユーティリティと同様に、何も検出されず、ディスクは問題ないと考えられます。ファイルシステムのレコードをスキャンしていると思いますが、私の問題はブロックレベルにあると思います。つまり、ファイルシステムは適切に構造化されていますが、ファイルの実際のデータにアクセスできません/ copying / defragmenting。
MrCranky 14

1
→MrCranky:そうです!fsckDisk Utilityはファイルシステム構造の整合性をチェックしています。彼らは、ファイルシステム構造に割り当てられたディスクブロックを読み取ります。データブロックの整合性を検証するためのものではありません。したがって、読み取りエラーを発生させることなく、障害のあるブロックのあるディスクで実行できます。ディスクをチェックしたい場合は、障害がある可能性があるが実際には使用されていないブロックであっても、基本的なツールをdd if=/dev/disk0 of=/dev/null ibs=1k別のシェルウィンドウrun として使用しますtail -f /var/log/system.log。これは無料で極端なものであり、エラーを隠してしまうことはありません。
2014年

2

ディスクカタログの再構築や、破損の可能性のあるファイルのスキャンには、DiskWarriorを強くお勧めします

カタログの再構築中に、ディスクの誤動作のために遅延が発生したかどうかも通知されます。


私は助けるためのツールを購入することを嫌いませんが、試行錯誤せず、経験している種類のエラーを見つけるために設計されていることさえ保証されていません。ツールに100ドルを落とす準備をしました。
MrCranky 14

-1回答だけでなく、コメントと回答の混合。
Max Ried 2014年

2

Buscarの答えから離れて、かなり重いコマンドラインfooを使用してこれを自動的に行うことができます。

sudo find / -type f -print0  | xargs -0 -I{} dd if='{}' of=/dev/null bs=1m 2>&1 | grep 'error' >>badfiles.txt  & 
  • sudo:管理モード
  • find -print0:絶対パス
  • xargs -0 -I {}:次のコマンドの{}を置き換えます
  • dd 2>&1:stdエラーをstdoutにリダイレクトする
  • stdoutをgrepにパイプして文字列エラーを探します
  • リストファイルに追加した結果。(:あなたがあなたの内部ドライブがあやふやにあると考えている場合、これは外部メディアにする必要があります)

1

あなたが言うように、それらのファイルが損傷していることさえ明らかではありません、少なくともあなたのMacはそうは考えていません。

すべてのOSは、その操作に必要な移動不可能なファイルを作成します(復元ポイント、現在アクティブなファイルなど)。一部のデフラグはそれらを表示しますが、一部は表示しません。

それらにアクセスしたり移動したりできないという事実は、それらが損傷していることを意味しません。

通常、Macはそれらの自己管理に非常に優れています。

アップルのメンテナンスを使用するには、ターミナルを開いて次のように入力します。

sudo periodic daily weekly monthly 

次にReturnキーを押して管理者パスワードを入力すると、OS Xが処理します。

興味がある場合は、コンソールでそれらのレポートを確認してください。

コンソールで、ディスクに問題が発生し始めていることを示すI / Oエラーを探し(検索)、ディスクユーティリティとfsckの調査結果を補完します。

追加のメンテナンスタスクには、OnyXという無料のツールを使用する場合があります。それはフランス人によって作られ、彼らが食べるのでそれはちょうど素晴らしいです:)

OnyXはOS Xの多機能ユーティリティで、起動ディスクとそのシステムファイルの構造を確認したり、システムメンテナンスのさまざまなタスクを実行したり、Finder、Dock、QuickTime、Safari、Mail、iTunesのいくつかの非表示パラメーターを設定したりできます。 、ログインウィンドウ、Spotlight、およびAppleの多くのアプリケーション、キャッシュの削除、面倒になる可能性がある特定の数のファイルやフォルダの削除など。

以上のことすべてを踏まえ、私はデフラグツール(iDefrag)を使用することについてのあなたの決定に疑問を投げかけていません。


デフラグツールの使用は問題ではありません。私はその点でOS Xが何をし、何をしないかを完全に認識しています。ファイルは間違いなく使用されていません。これらはアクティブではないアプリケーションのデータファイルであり、実際にアプリケーションを移動することはできません。
MrCranky

Onyxの場合-ディスクユーティリティの場合よりも少しだけ多くのことを実行しています-ディスクのSMARTステータスをチェックしてから、fsckスタイルの診断を実行します(これは、私たちが確立した
とおり、

明確にするために、この回答を読んでいる他の人にとって、ファイルは最も確実破損しており、Macはそのことを知っていました。これは、それらがシステムファイルだったため、または当時使用されていたためではなく、ユーザーデータファイルに対しても当てはまりました。定期的なメンテナンスでは問題はfsck解決しませんでした。ファイルシステムの問題のみが考慮され、アクセスの問題はブロックされないようです。これらの壊れたファイルの1つから手動でデータをコピーまたは読み取ろうとしたときにのみコンソールにエラーが表示されましたが、それらを見つけるのに役立ちませんでした。
MrCranky

0

不合理に聞こえるかもしれませんが、何かを行う前に、すべてのデータを既知の正常なドライブに複製する必要があります。インストーラーからの起動とデータのコピーが失敗した場合、低レベルの複製を実行し、妥協のない方法で実行できる「dd」と呼ばれるコマンドラインユーティリティがあります。

 man dd

使用方法や適切な構文など、ddの詳細については。


Mattの投稿への別の投票、シングルユーザーモードの起動、および実行

 fsck -fy 

fsckがエラーの報告を停止するまで何度も繰り返します。


Adamの投稿への投票であるDiskWarriorは、HDD障害を報告し、個々のファイルのエラーをチェックし、可能であればそれらを修復し、ディレクトリ構造を再構築および最適化する、使いやすいが非常に強力なアプリケーションです。


不合理に聞こえるかもしれませんが、多くの場合、成功の証拠となる多くの証拠があるデータを回復するための最後の試みであるもう1つの解決策は、ドライブを引き、2層の冷凍バッグを使用して湿気からドライブを保護し、冷凍庫に入れて、 30〜45分。次に、ドライブが冷えている間に、ドライブを外部USBドックにマウントし、別の一時的なシステムを使用して、破損したデータを別のドライブにコピーします。通常、これはハードウェアに問題があり、ドライブに障害が発生している場合に使用されます。データをそのままにしてドライブ全体を複製できる場合、これは理想的です。再パーティション化と再フォーマットにより、ドライブに新しいリースが与えられることがよくあるからです。


すでに述べたように、fsckはエラーを報告しません。ディスクはまだ気まぐれではなく、ランダムエラーを報告しておらず、破損しているファイルのリストは増えていないようです。そのため、「最後の緊急プルのためのフリーズ」段階の近くにいるとはまだ思っていません。また、質問で述べたように、ファイル/フォルダーレベルでのバックアップは既に非常に適切であり、データの損失について心配していません。DiskWarriorに対する別の投票を聞いて良かったです。
MrCranky

@MrCranky:質問を更新する前に投稿されたものを参照していると思います。私は、このページが同様の症状の解決策を模索しているのを見つけた人のために、fsckのアイデアを強化していました。私がHDDの故障について投稿したものに関しては、他のユーザーにとっても包括的であることは決して問題ではなく、個人的には必ずしもそうではありません。私は、ハードドライブの障害のかなりの部分を見てきました。多くの場合、SMART techを使用しても、何らかの方法でデータにアクセスできなくなるまで、障害の兆候はありません。データに関心がある場合は、新しいドライブを取得してデータをバックアップすることを強くお勧めします。
まったり2014年

私は確かにバックアップの推奨に同意しませんが、Q&A形式の精神は提示された質問に答えることであり、一般的な「壊れたディスクをどのように修正するか」という質問(多くあります)ではありません。それを編集してfsck「ディスクに問題がないと思われるもの」のリストに追加する前に、回答に言及してfsckその有用性を軽視しました。fsckまた、ディスクユーティリティはほぼ同じ機能を実行します。つまり、ブロックレベルではなく、ファイルシステム構造を操作します。これはブロックの問題であり、ファイルシステムの問題ではないことを具体的に説明しました。
MrCranky

0

ディスク読み取りエラーが原因で全体を読み取ることができない単一ファイルの場合、ddユーティリティを使用してファイルを外部ボリュームに複製し、読み取れないブロックをNULバイトに置き換えることができます。別のボリュームに複製することを強くお勧めします(たとえば、以下の例では「USBディスク」)。

例:

dd if=/path/to/damaged/file of=/Volumes/USB\ Disk/file bs=512 conv=noerror,sync

512バイトのブロックを使用することにより、読み取り可能なブロックの最大数が回復されます。

カーネルは読み取りに失敗するたびにしばらくブロックするため、リカバリには長い時間がかかる場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.