Клонирование диска без потери информации об ошибках ввода-вывода

754
styrofoam fly

Я хочу протестировать программное обеспечение для создания разделов, как parted.

Я нашел старую флешку, которая вылетает из программы всякий раз, когда я пытаюсь ее прочитать. Чтобы сохранить этот тестовый пример, мне нужно как можно точнее скопировать USB-накопитель, сохранив ошибки ввода-вывода .

Я знаю, что, возможно, невозможно заставить мой HDD выдавать ошибку ввода-вывода при чтении некоторых байтов этого файла, но, возможно, это может быть эмулировано какой-то программой, которая имеет жестко запрограммированное содержимое USB-накопителя и помнит, когда выдавать ошибку ввода-вывода?

Я использую Arch Linux и предпочел бы решение, которое может быть адаптировано к нему (возможно, через какую-то виртуальную машину или эмулятор машины).

2

2 ответа на вопрос

4
grawity

Для копирования, использования ddrescue, safecopyили dd_rescue. Все они ведут журнал областей с ошибками, а также автоматически повторяют попытки, пока не смогут получить данные.

Общее использование:

  • ddrescue: (не путайте со старым dd_rescue)

    ddrescue /dev/sdc3 sdc3.img sdc3.map 

    Если хотите, повторите с --retrimили `--try-again:

    ddrescue --try-again /dev/sdc3 sdc3.img sdc3.map 

    Не забудьте указать файл карты для записи плохих областей.

  • safecopy:

    safecopy --stage1 /dev/sdc3 sdc3.img safecopy --stage2 /dev/sdc3 sdc3.img safecopy --stage3 /dev/sdc3 sdc3.img 

    После этапа 3 у вас будет stage3.badblocksфайл со списком отдельных плохих секторов.

    Если вы хотите повторить попытку, используйте:

    mv stage3.badblocks stage2.badblocks safecopy --stage3 /dev/sdc3 sdc3.img 
  • dd_rescue: (не путать с более способным ddrescue)

    dd_rescue -o sdc3.badblocks /dev/sd3 sdc3.img 

    (Я не знаю, поддерживает ли этот инструмент возобновление / повтор со вторым вызовом, но, по крайней мере, он выводит журнал badblocks.)

Эти программы делают упор на том, чтобы как можно быстрее выводить как можно больше данных, и обеспечивают медленное восстановление для дальнейшего использования. Так что не удивляйтесь, если «этап 1» пропустит целые мегабайты только из-за одного плохого блока - он вернется к этому на этапе 2.

Для эмуляции плохого диска возьмите только что полученный журнал badblocks и примените его к этому сообщению:

Используется dmsetupдля создания устройства с поддержкой цели «error». Это будет отображаться в /dev/mapper/<name>.

На странице 7 презентации Device mapper (PDF) есть именно то, что вы ищете:

dmsetup create bad_disk << EOF 0 8 linear /dev/sdb1 0 8 1 error 9 204791 linear /dev/sdb1 9 EOF 

Или оставьте sdb1части и поместите цель "error" в качестве устройства для блоков 0 - 8 (вместо sdb1), чтобы создать диск с чистой ошибкой.

См. Также приложение Device Mapper из «Администрирование менеджера логических томов RHEL 5».

- Питер Кордес, https://stackoverflow.com/questions/1870696/simulate-a-faulty-block-device-with-read-errors

(Преобразование журнала поврежденных блоков или файла карты ddrescue в синтаксис таблицы dmsetup оставлено читателю в качестве упражнения ...)

Как и мой ответ, этот ответ также не говорит пользователю, как сохранить ошибки диска. Я на самом деле не уверен, что это даже возможно. djsmiley2k 7 лет назад 0
1
djsmiley2k

Дд может быть сказано продолжить при возникновении ошибок, это будет просто написать нули в местах, которые он не может прочитать с исходного диска ...

dd bs=<blocksize here> conv=sync,noerror if=/dev/sdc123 of=/home/me/testFile 

Вы также можете попробовать использовать ddrescue, чтобы попытаться восстановить данные, однако я не уверен, насколько хорошо они будут работать на USB-накопителе.

ВНИМАНИЕ - Если вы завинтить размер блока, вы завинтить все данные после первого, не читаемый блок - вы хотите, чтобы установить размер блока в том, что устройства вы копируете с .

Я думаю, что это противоположно тому, что задает вопрос. Я думаю, что вопрос указывает на то, что клонированный диск имеет те же ошибки, что и оригинал. Ron Maupin 7 лет назад 0
Да, я согласен @RonMaupin, но решил, что я все равно сообщу им о dd. Он не будет пытаться «восстановить» неверные данные .... поэтому любое приложение, которое зависит от указанных данных, все равно будет иметь проблемы. djsmiley2k 7 лет назад 0
@RonMaupin правильно, копирование с помощью `dd` не позволит различить ошибку ввода-вывода и` 0x0000`, не говоря уже об эмуляции ошибок ввода-вывода позже. styrofoam fly 7 лет назад 0

Похожие вопросы