不良ブロックのデータを読み取ると/ devから消えるハードドライブからデータを回復する


3

USB 3ドライブエンクロージャを介して接続された障害のある750 GBハードドライブから可能な限り多くのデータを回復しようとしています。

ドライブ自体にはbadblocks、Linux で検出された1500個を超える不良ブロックがあります。

コンピューターに完全にマウントされます(macOS 10.12を実行)が、破損したブロックのデータが読み取られると、ドライブは数秒間アイドル状態になり、から消えてから/dev再び表示されます。再び戻って。

最初の不良ブロックは、ディスクの先頭から約136 GiBで発生しますが、これだけではありません。これはbadblocks、からの出力と、両方ddとがddrescue失敗した場合に証明されます。

ddそしてddrescue、両方のドライブが、その後から消えるので、彼らは、不良ブロックからデータを読み込むとすぐに失敗します/dev

dd if=/dev/rdisk3 of=image.img bs=16m

ここに画像の説明を入力してください

ddrescue -v /dev/disk4 image.img logfile

ここに画像の説明を入力してください

ddrescue同じログファイルで最初の終了後に再実行すると、すぐに終了し、それ以上進むことはありません。

私はファイルシステムを横断していくつかのファイルに正常にアクセスできるので、アクセス可能なファイルとアクセスできないファイルを判別するスクリプトを作成したので、ディスクから既知の正常なファイルをコピーできます。ただし、これは低速であり、ディスクをさらに損傷する可能性があることを心配しています。

いずれにも同様のツールがあるddか、ddrescue単にドライブが不良ブロックを読めば終了自動的に再マウントの代わりにするのを待ち、このドライブからデータを回復することができ、?

macOSとLinux(Ubuntu)の両方を使用できるので、どちらのプラットフォームのソリューションでも機能します。


1
「アンマウント」と/devは、umountコマンドではなく「から消える」という意味ですか?用語の混乱を避けたいと思っています。ddrescue同じログファイルで起動すると、中断された実行を継続することになっていると思います。たぶん、何度も何度も実行する簡単なスクリプトを書くことができddrescueます。別のアプローチは、最初のログファイルを作成し(badblocks結果に基づいて)、ddrescue問題のあるセクターに触れないようにすることです。あるddrescuelog役立つかもしれないツールが。ただのアイデア、私は自分でやったことがない。
カミルマシオロウスキ

@KamilMaciorowskiはい、アンマウント/devとは、消えるという意味です(再マウント時に新しい識別子が割り当てられることもあります)。ddrescue再度実行すると、すぐに終了し、それ以上進むことはありません。ログファイルを操作して、結果が得られるかどうかを確認します。
ジャックグリーンヒル

しかしbadblocks、問題はありませんでした?ddrescue --directオプションを試しましたか?
カミルマシオロウスキ

USB-SATAブリッジが「アンマウント」を引き起こす場合、1つの解決策はドライブをエンクロージャーから取り出し、SATAを介して直接接続することです。(これまでに見たすべてのUSBクロージャーには、内部にSATAドライブがあります)。
dirkt

@Jack Greenhill:私の答えがあなたに役立ったら、他の人が将来より簡単に見つけられるように、受け入れられた答えとしてマークすることを検討してください。これは、あなたの質問に答えてくれた人があなたを助けてくれたことに感謝する丁寧な方法でもあります。
アンドレアラザロット

回答:


2

破損したブロックのデータが読み取られると、ドライブは数秒間アイドル状態になり、アンマウントされてから再マウントされます

ドライブで同じ問題が発生し、「消えて」後で再び表示されます。実際にはマウントされていませんでしたddrescueが、デバイスが消えたときに停止していました。Linuxで使用していましたが、状況は非常に似ています。

少し単純なシェルプログラミングを使用することと、しばらくするとドライブが実際に再び表示されることをお勧めします。つまり、次のことを行います。

while [ 1 ]; do
    ddrescue -v /dev/disk4 image.img logfile
    sleep 3
done

これは次のように機能します。

  • ddrescue 開始されました
  • 実行が停止すると、シェルは3秒間待機してから再び起動します
  • ddrescue ロギング機能をうまく利用しているため、継続できます

何回か試行した後(デフォルトは3であると思うが、間違っている可能性があります)、ddrescueセクターを明らかに悪いものとしてマークし、ドライブの他の部分を読み取り続けます。数時間後、それddrescueが実行され、Ctrl+でループを終了できますC


1

GNU ddrescueマニュアルから:

例6:パーティションを/dev/sda1ファイルに保存しているときにhdimage/dev/sda1から消えます/dev

ddrescue -f -n /dev/sda1 hdimage mapfile     <-- /dev/sda1 fails here
  (restart /dev/sda or reboot computer and then repeat the above
   command as many times as needed until it succeeds)
ddrescue -d -f -r3 /dev/sda1 hdimage mapfile

アンドレア・ラザロットの答えは、「上記のコマンドを繰り返す」部分をカバーしています。-dスイッチを使用する例には追加のステップがあります。マニュアルでは少し説明しています。

-d
--idirect

からの読み取りにはinfile、直接ディスクアクセスを使用して、カーネルキャッシュをバイパスします。(O_DIRECTフラグでファイルを開きます)。これが機能するには、セクターサイズを正しく設定する必要があります。すべてのシステムがこれをサポートしているわけではありません。

マニュアルの適切なセクションをさらに読むことをお勧めします。その中から:

--idirect最初にオプションを試してください。システムで直接ディスクアクセスが利用できない場合は、rawデバイスを試してください。システムのドキュメントを読んで、rawデバイスを通常のブロックデバイスにバインドする方法を見つけてください。一部のOSは、などの特殊なデバイス名を介して生のアクセスを提供します/dev/rdisk

MacOSは/dev/rdisk名前を提供します。あなたの質問では、あなたはでを使用rdiskしてddいますがdiskddrescueで使用しているので、追加のステップからまだ恩恵を受けるかもしれません。

Linuxユーザーはrawコマンドが便利だと思うでしょう。彼らは、を参照すべきであるman rawとする実施例2:生装置を使用のGNUの既に述べたセクションddrescue手動

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