2台目の1TBドライブへのddrescueを使用して、/dev/sdb
で障害が発生した500GBハードドライブのパーティションをレスキューしようとしています。私が最初のパスに使用するddrescueコマンドは次のとおりです。
ddrescue -n /dev/sdb2 core.img core.log
2番目のパスが続きます:
ddrescue -d -r 3 /dev/sdb2 core.img core.log
問題は、2番目のコマンドの画像名を誤って入力してしまったことです。 core.img
の代わりにcore.ing
と書きましたが、翌朝2回目のパスが実行され、core.logが上書きされて100%成功したことを報告するまで気づきませんでした。
今、私は2つの巨大なファイルで立ち往生しています。私はまだsdb3
を救出しているので、雑用全体を再実行することは不可能です。私はすでにhexedit
でチェックし、2つのファイルが互いに補完し合っています(つまり、オフセット0x5000から0x7000のcore.img
がゼロで埋められている場合、core.ing
の同じオフセットが実際のオフセットで埋められますデータ、その逆。)
core.img
を/dev/sdc2
(私が準備したdd
の交換用ドライブ)にsdb
-してから、どういうわけかコピーのみcore.ing
から/dev/sdc2
のゼロ以外のバイトですが、ゼロ以外のバイトのみをコピーする方法がわかりません。考えられる解決策は非常に面倒で、コンプリート。
参考までに、GentooベースのSystemRescueCD 4.9.6を実行しています。sdb2
はNTFSです。
(これはGNU ddrescue
)を想定しています
tl; dr:
最初のコピーのマップファイル/ログファイルを生成します:ddrescue --generate-mode infile outfile mapfile
2番目→1番目からマージされたコピーを作成します ddrescue
メーリングリストへの投稿で説明されているように :ddrescue -m logfile2 image2 image1 logfile1
最初のパスのログファイルが事実上ないため、これは少し複雑です。ただし、次のものを生成できます。
Ddrescueが
--generate-mode
オプションで呼び出されると、デフォルトの「レスキューモード」とは異なる「生成モード」で動作します。つまり、「-generate-mode」オプションを使用した場合、ddrescueは何もレスキューしません。後で使用するためにマップファイルを生成しようとするだけです。.。
(まだ)絶望しないでください。 Ddrescueは、場合によっては、infileとoutfileの(部分的な)コピーからおおよそのマップファイルを生成できます。これは、正確なマップファイルとほぼ同じです。これは、すべてゼロを含むセクターがレスキューされなかったと単純に仮定することで実現されます。
...次のコマンドでおおよそのマップファイルを生成できます。
ddrescue --generate-mode infile outfile mapfile
(強調鉱山)
GNU ddrescue
manual ;からセクション12、「生成モード」。
したがって、最初の画像に対してこれを行うことができます(混乱を避けるために名前を変更することをお勧めします(例:core-1.img
))。
ddrescue -G /dev/sdb2 core-1.img core-1.log
/dev/sdb
から読んでいますが、それと相互参照するログを生成しますか?」ddrescue
は主にoutfile
(この場合はcore-1.img
)から再構築され、infile
からの読み取りはほとんどないことに注意してください。私はこれをinotifywatch
でテストしました。
$ inotifywatch 840-linux.img # infile
$ inotifywatch 840-linux2.img # outfile
$ inotifywatch 840-linux2.log
$ ddrescue -G 840-linux.img 840-linux2.img 840-linux2.log
total close_nowrite open filename
6 3 3 840-linux.img
17467 17465 1 1 840-linux2.img
total access modify close_write close_nowrite open filename
196 1 189 2 1 3 840-linux2.log
したがって、読み取りが無視できるため、別のプロセスがsdb
(OPの場合、 別のパーティションでの別のレスキュー試行 )で実行されているときにこれを実行しても安全です。
この種の状況 以前に発生したことがあります :
これで、ほとんどオーバーラップしないドライブの2つの部分的なイメージができました...そして、スキップされた適切な領域と遅い領域を定義する2つの一致するログファイルがあります。
幸い、これらは --domain-mapfile
を使用してマージできます。
--domain-mapfile=file Restrict the rescue domain to the blocks marked as finished in the mapfile file. This is useful for merging partially recovered images of backups, or if the destination drive fails during the rescue. Use '-' as file to read from standard in`
そして 同様の問題の解決策にはそのオプションが含まれていました :
次のように入力して、画像をマージできます。
cd dir1 ddrescue -m dir2/logfile dir2/image image logfile
これにより、現在レスキューされているすべてのデータを含むファイルdir1/logfile dir1/imageが作成されます。次に、たとえば次のようにレスキューを続行できます。
あなたの場合、core.img
のログファイルを生成し、それらに1
のラベルを付け、core.ing
とcore.log
を2
として保持したと仮定します(もっと混乱!):
ddrescue -m core-2.log core-2.img core-1.img core-1.log