USB3ドライブエンクロージャーを介して接続されている故障した750GBハードドライブからできるだけ多くのデータを回復しようとしています。
ドライブ自体に1500を超える不良ブロックがあり、Linuxではbadblocks
によって検出されます。
コンピューター(macOS 10.12を実行中)に完全にマウントされますが、破損したブロックからのデータが読み取られると、ドライブは数秒間アイドル状態になり、/dev
から消えてから、誰かがUSBケーブルを抜いたかのように再び表示されます。その後、すぐに再び接続しました。
最初の不良ブロックは、ディスクの先頭から約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)の両方を使用できるので、どちらのプラットフォームのソリューションでもうまくいくでしょう。
破損したブロックからのデータが読み取られると、ドライブは数秒間アイドル状態になり、マウントを解除してから再マウントします。
ドライブが「消えて」、後で再び現れるという同じ問題がありました。実際にはマウントもされていませんでしたが、デバイスが消えるときにddrescue
が停止していました。 Linuxで使っていたのですが、状況はよく似ています。
少し簡単なシェルプログラミングを使用することをお勧めします。ドライブが実際にはしばらくすると再び表示されるという事実。言い換えれば、次のことを行います。
while [ 1 ]; do
ddrescue -v /dev/disk4 image.img logfile
sleep 3
done
これは次のように機能します。
ddrescue
が開始されましたddrescue
は、ロギング機能を十分に活用しているため、続行できます何度か試行した後(デフォルトは3だと思いますが、間違っている可能性があります)、ddrescue
はセクターを間違いなく不良としてマークし、ドライブの他の部分の読み取りを続行します。数時間後、ddrescue
が実行され、ループを強制終了できることがわかります。 Ctrl+C。
から GNU ddrescue
Manual :
例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
Andrea Lazzarottoの回答 「上記のコマンドを繰り返す」の部分をカバーしています。この例には、-d
スイッチを使用する追加の手順があります。 マニュアル 少し説明します:
-d
--idirect
カーネルキャッシュをバイパスして、直接ディスクアクセスを使用して
infile
から読み取ります。 (O_DIRECT
フラグを指定してファイルを開きます)。これを機能させるには、セクターサイズを正しく設定する必要があります。すべてのシステムがこれをサポートしているわけではありません。
さらに読むことをお勧めします マニュアルの適切なセクション 。そこから:
最初に
--idirect
オプションを試してください。システムで直接ディスクアクセスが利用できない場合は、rawデバイスを試してください。システムのドキュメントを読んで、rawデバイスを通常のブロックデバイスにバインドする方法を見つけてください。一部のOSは、/dev/rdisk
などの特別なデバイス名を介してrawアクセスを提供します。
MacOSは/dev/rdisk
名を提供します。ただし、あなたの質問では、rdisk
をdd
と一緒に使用しますが、disk
をddrescue
と一緒に使用するので、追加の手順の恩恵を受ける可能性があります。
Linuxユーザーは、raw
コマンドが便利です。 man raw
および例2: GNU ddrescue
マニュアルの前述のセクション)でrawデバイスを使用する 。