ddrescueを実行して高度なフォーマットドライブに直接アクセスするには、どのセクターサイズを選択する必要がありますか?

ddrescueを実行して高度なフォーマットドライブに直接アクセスするには、どのセクターサイズを選択する必要がありますか?

まず、次のコマンドを実行してAF / 512e HDDイメージングを開始しました。

    ddrescue -n /dev/sdb2 drive_c.img mapfile.log

完了したら、mapfile.logをバックアップし、ドライブの物理セクタサイズ4Kを使用して直接ディスクアクセスの分割ステップを実行することにしました。

    ddrescue -d -b4096 -r3 /dev/sdb2 drive_c.img mapfile.log

512バイトのセクタサイズを選択すると、不良セクタをさらに消去できますか?

この記事を書いている間、分割ステップは完了し、不良セクタは2番目に再試行されています。もちろん、マップファイル内のほぼすべての不良ブロックのサイズはn×4Kです。同じコマンドを実行しますが、512bセクタを使用するとより多くの情報を取得できますか?

思考と混乱

まず、直接ディスクアクセスを使用することが適切であるかどうかはわかりません。

ddrescueの情報ファイルは、次のような状況で直接ディスクアクセススイッチを呼び出します。

ログファイルの場所とサイズは常にセクタサイズの倍数です。

これは意味する

カーネルはディスクアクセスをキャッシュしてグループ化します。

したがって、カーネルが「グループ化」を要求する場合、マップファイルの最小ブロックは8Kまたは16Kでなければなりません。しかし、私の場合、マップファイルには読み取れない512バイトのブロックがたくさん含まれており、最初の実行が完了した後に回復しました。

2番目の実行では、ほとんどの512bブロックが4Kブロックにマージされました。例えば、分割ステップの前に分割されていないブロックに隣接する512b不良セクタは、隣接した不良セクタとマージされる。私が見るのは大丈夫だと思います。おそらく、トリミングフェーズ中にハードドライブのヘッドが4Kセクタを読み取ることができないため、ddrescueに対して512b不良セクタを返します。トリムはすぐそこで終わり、512bセクタの後ろのブロックは非分割で表示されます。

珍しいことは、以下のスクリーンショットに示すように、512bの不良セクタがあることです。 512b 不良セクタを含む

ヘッドが4Kセクターを読むことができますが、そのうち1/8しか読み取れないと宣言するのはなぜですか?ヘッドが物理セクタを自動的に読み取るという印象を受けましたか?だから一部が悪いと産業全体が悪い。

これは明らかに疑問を提起する。 ddrescueを実行して直接アクセスするかどうかにかかわらず、4Kの「部分的に破損した」セクタからデータを取得できますが、セクタサイズは512bですか?

明らかに何か間違っているようです。

ところで、これが私が初めて投稿する質問なので、フォーラム形式に合わない、または質問が多すぎる場合はご了承ください。しかし、それ以外には、高度なフォーマット、直接ディスクアクセス、カーネルキャッシュなどの主要な質問に関連するすべてのトピックに関するコメントを聞きたいです。私が見つけたのは、現実とは遠すぎるか露骨な家庭だからです。読者から。

乾杯!

ベストアンサー1

ddrescueの作成者であるAntonio DiazとEメールを交換しました。例:

 -b4096

一度に1つの4096バイトセクタのみを読み取るには(ゆっくり!)、次のように指定することもできます。

  -c1

AntonioはStackExchangeでは動作しませんが、次のメールメーリングリストでddrescueをサポートしています。

https://www.mail-archive.com/[Eメール保護]/

にメールを送ると[Eメール保護]これにより、あなたのEメールがその要約ページに表示され、彼の答えもよく整理された形式で表示されます(もちろん、あなたのEメールアドレスを除く)。また、Antonioを悩ませる前にこのページで検索して、問題や質問に関する以前の議論を見つけることができます。 (彼はとても忙しいので時間を無駄にしないでください!)

ddrescueログファイルに512バイトの「無効な」領域が含まれているのは、元のデフォルトセクタサイズが512バイトのddrescueを実行したためです。これは深刻な問題ではありませんが、ddrescueがドライブに512バイトのセクタがあると考え、実行された読み取りが読み取りエラーのために0バイトのデータを返す場合、ddrescueは512バイトの最初のバイトしか使用できないと仮定し、残りは読み取ります。いかなる仮定もしないでください。したがって、ログファイル内の512バイトのみがエラーとして表示されます。

おすすめ記事