2

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

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

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

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

2 ответа2

4

Для копирования используйте 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 оставлено читателю в качестве упражнения ...)

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .