Как я могу объединить два изображения ddrescue?

У меня есть два изображения 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 

Как я могу объединить их в единое полное изображение?

Детали

  • Второе изображение является просто продолжением первой попытки восстановления, à la:

     $ 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 
  • Второе изображение почти полностью нулей, но содержит 18 КБ восстановленных данных, распределенных по 1847 изолированным регионам.

  • Я попытался использовать технику, упомянутую в этом списке рассылки ,

     $ 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 

    но, похоже, ничего не изменило.

  • Как изменить текущую позицию копии или пропустить область в ddrescue
  • Какой размер сектора я должен выбрать для запуска ddrescue с прямым доступом на диске расширенного формата?
  • Жесткий диск исчез
  • Как игнорировать ошибки записи при обнулении диска?
  • Изображение ddrescue нельзя смонтировать
  • Действительно ли ddrescue здесь что-то делает?
  • ddrescue - избегая секторов, которые закрывают контроллер
  • Почему ddrescue не использует полную пропускную способность?
  • 2 Solutions collect form web for “Как я могу объединить два изображения ddrescue?”

    Если вы точно знаете, какой регион данных вы хотите скопировать, вы можете использовать dd :

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

    Это скопировало бы 128 4k блоков с ввода на вывод, начиная с 123456.

    Было бы разумно сделать резервную копию блоков, которые вы собираетесь перенести первым:

     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 если ваши блоки меньше!

    Обратите внимание, что с этим методом нет резервной копии, поэтому лучше скопировать файл, если это важно.

    Попробуй что-нибудь вроде этого?

     dd if=part-one/ddrescue_image bs=1 count=227966006784 >result dd if=part-two/ddrescue_image bs=1 seek=227966006785 >>result 

    Небольшой размер блока сделает это очень медленным; если вы можете реорганизовать использование большего размера блока и по-прежнему приземляться с правильным смещением, это должно сделать его намного быстрее.

    Если вы не можете этого сделать, разделение операции на более dd вызовы, вероятно, является идеей goid – прочитайте с большим размером блока, например 65536, до ближайшей границы 64K, затем медленно оттуда (возможно, перейдя на 1K размер блока до ближайшей границы 1K, прежде чем переходить к отдельным байтам), а затем быстрее, если вы закончите с мелкомасштабной манипуляцией.

    Linux и Unix - лучшая ОС в мире.