Ошибки dracut при загрузке - что делать
Добавлено: 12 июн 2017, 18:47
Наткнулся вчера на странный баг: после установки на ноутбук с ROSA R8.1 проприетарных драйверов NVidia система стала виснуть при загрузке на самых ранних стадиях. Если подождать какое-то время - начинала выдавать сообщения о "timeout scripts", затем вываливалась в dracut debug shell ("dracut #").
"Вскрытие" показало, что механизм загрузки не увидел диск, что выглядело, мягко говоря, странно.
Что оказалось в итоге: в некоторых случаях при перегенерации initrd (делается при установке и обновлении ядра или проприетарных драйверов, например) система не добавляет в initrd драйверы, необходимые для работы с диском. Соответственно, при следующей загрузке диск не виден - всё висит.
Почему механизм создания initrd так себя ведёт - пока не знаю.
Хорошие новости: обойти этот баг оказалось не очень сложно. Этому механизму можно сказать, чтобы не умничал, оптимизируя initrd для данной машины, а просто клал туда всё, что нужно. Для этого достаточно загрузить систему хоть как-нибудь, например, с другим ядром из уже установленных, затем создать файл /etc/dracut.conf.d/90-generic-initrd.conf с таким содержимым:
После этого нужно перегенерировать initrd для того ядра, с которым хотите загружать систему. Если это то же ядро, которое сейчас загружено, достаточно вызвать "dracut -f". Если нужно для другого ядра, то сначала найдите в /boot нужный initrd-файл - файл initrd-<полная_версия_ядра>.img. Затем выполните
Например, на моей системе так:
Затем выполните "sync" на всякий случай и можно перезагружать систему. В моём случае перезагрузка теперь прошла нормально.
Посмотрите, если на ваших машинах похожие проблемы возникнут, такое решение может помочь.
Из минусов - такие inird, не оптимизированные под данную машину, требуют больше места (55-60Мб вместо 12-15Мб) и создаются несколько дольше. Обычно это не проблема.
"Вскрытие" показало, что механизм загрузки не увидел диск, что выглядело, мягко говоря, странно.
Что оказалось в итоге: в некоторых случаях при перегенерации initrd (делается при установке и обновлении ядра или проприетарных драйверов, например) система не добавляет в initrd драйверы, необходимые для работы с диском. Соответственно, при следующей загрузке диск не виден - всё висит.
Почему механизм создания initrd так себя ведёт - пока не знаю.
Хорошие новости: обойти этот баг оказалось не очень сложно. Этому механизму можно сказать, чтобы не умничал, оптимизируя initrd для данной машины, а просто клал туда всё, что нужно. Для этого достаточно загрузить систему хоть как-нибудь, например, с другим ядром из уже установленных, затем создать файл /etc/dracut.conf.d/90-generic-initrd.conf с таким содержимым:
Код: Выделить всё
hostonly="no"
Код: Выделить всё
dracut -f /boot/initrd-<полная_версия_ядра>.img <полная_версия_ядра>
Код: Выделить всё
dracut -f /boot/initrd-4.9.31-nrj-desktop-1rosa-x86_64.img 4.9.31-nrj-desktop-1rosa-x86_64
Посмотрите, если на ваших машинах похожие проблемы возникнут, такое решение может помочь.
Из минусов - такие inird, не оптимизированные под данную машину, требуют больше места (55-60Мб вместо 12-15Мб) и создаются несколько дольше. Обычно это не проблема.