2つのddrescue画像をマージする方法は?

2つのddrescue画像をマージする方法は?

同じメディアの継続的な回復試行によって生成された2つのddrescueイメージがあります。両方の画像のサイズは同じですが、補完的なデータがあります。

$ od part-one/ddrescue_image --skip-bytes 227966006774 --read-bytes 32
3242365232766 113056 016517 102014 074371 144073 000000 000000 000000
3242365233006 000000 000000 000000 000000 000000 000000 000000 000000
3242365233026
$ od part-two/ddrescue_image --skip-bytes 227966006774 --read-bytes 32
3242365232766 000000 000000 000000 000000 000000 124616 163450 064251
3242365233006 074567 134433 012742 022160 044301 054235 140604 020633
3242365233026

これを完全なイメージにマージする方法は?

詳細

  • 2番目の図は、次のように最初の回復試行の連続です。

    $ ddrescue corrupt-partition part-one/ddrescue_image part-one/ddrescue_log
    $ mkdir part-two; cp part-one/ddrescue_log part-two/ddrescue_log
    $ ddrescue corrupt-partition part-two/ddrescue_image part-two/ddrescue_log
    
  • 2番目の画像はほぼ完全にゼロですが、1847の分離領域に分散された18KBの回復データが含まれています。

  • 言及された技術を試してみました。このメーリングリストに

    $ ddrescue --domain-logfile=part-two/ddrescue_log part-two/ddrescue_image part-one/ddrescue_image part-one/ddrescue_log
    
    
    GNU ddrescue 1.16
    Press Ctrl-C to interrupt
    Initial status (read from logfile)
    rescued:   937286 MB,  errsize:   62976 B,  errors:     122
    Current status
    rescued:   937286 MB,  errsize:   62976 B,  current rate:        0 B/s
       ipos:         0 B,   errors:     122,    average rate:        0 B/s
       opos:         0 B,     time since last successful read:       0 s
    Finished
    

    しかし、何も変わらないようです。

ベストアンサー1

コピーするデータの範囲を正確に知っている場合は、次のものを使用できますdd

dd conv=notrunc if=input of=output seek=123456 skip=123456 bs=4k count=128

これにより、123456から始まり、入力から出力まで128個の4kブロックがコピーされます。

上書きするブロックを最初にバックアップすることをお勧めします。

dd if=output skip=123456 bs=4k count=128 of=output-backup-bs4k-pos123456

どのデータ領域をコピーする必要があるかわからない場合、または確信がない場合はGNU ddお知らせくださいsparse

dd conv=notrunc,sparse if=input of=output bs=4k

これは、ゼロ以外のすべての4k入力ブロックを出力にコピーします。bs=512ブロックが小さい場合はこれを使用してください!

この方法ではバックアップされないため、ファイルが重要な場合はファイルのコピーを作成することをお勧めします。

おすすめ記事