
У меня сломанный жесткий диск с множеством поврежденных блоков. Я выполняю восстановление ddrescue
довольно успешно (нахожусь на 99,5%). К сожалению:
- По какой-то причине, иногда, но не всегда, при
ddrescue
попадании на сильно поврежденную часть, диск «сходит с ума» и либо возвращает только ошибки чтения для остальной части диска, либо сообщает об ошибке невыровненного чтения и завершает работу; компьютер необходимо перезапустить, и эти части можно будет считать снова. - Первый блок, содержащий таблицу разделов, поврежден, и запуск системы занимает около часа, поскольку ядро снова и снова пытается прочитать таблицу разделов.
Забавно: мне вообще не нужно читать таблицу разделов, я выполняю восстановление «всего диска».
Так есть ли способ, как сообщить ядру
- не читать таблицу разделов или
- ограничить количество повторных попыток?
Ускорение запуска системы значительно увеличит скорость восстановления, поскольку на этом этапе система запускается на час, затем продолжает восстановление в течение нескольких минут, а затем перезапускается из-за одной из ошибок, упомянутых выше (я автоматизировал это с помощью скрипта запуска).
dmesg
выход:https://cloud.oprendek.sk/index.php/s/Mk8figkaspD8xRE
решение1
Кажется, я уже отвечал на этот вопрос, но сейчас не могу найти...
Если проблема сохраняется не только во время первоначальной загрузки, но и при «горячем» подключении проблемного диска к уже работающей системе, то вам, по сути, не повезло.
В полной установке Linux вы практически не можете предотвратить сканирование диска на предмет разделов, UUID и других метаданных каждый раз, когда вы его подключаете. Ядро обнаруживает таблицы разделов, udev создает ссылки disk/by-uuid и т. д.
Однако поддержка таблицы разделов является необязательной в ядре ( CONFIG_*_PARTITION
, *
являясь одним из MSDOS
, EFI
, MAC
, ...). Поэтому вы можете скомпилировать собственное ядро, которое не поддерживает ни одну из них или отключает все из них, а затем (чтобы также предотвратить сканирование UUID и т. п.) использовать его с минимальной средой initramfs, содержащей только ddrescue.
Это также отключает вам доступ к разделам на любом из ваших других дисков, если вы не эмулируете это с помощью losetup
и offset / sizelimits, или, в качестве альтернативы, device mapper ( dmsetup
). Так что вам придется обойти отсутствие разделов в целом.
- ограничить количество повторных попыток?
Не уверен, делает ли он какие-либо повторные попытки, но можно установить тайм-ауты (в /sys/block/*/device/timeouts
), которые, я полагаю, будут полезны только в том случае, если диск вообще не отвечает.
Для встроенных несъемных устройств вы также можете использовать libata.force=<port.device>:disable
параметр ядра, чтобы полностью отключить их.