Главная
» Как сделать
»
Ошибка загрузки модуля SLES: найдите драйвер и устраните её.
Ошибка загрузки модуля SLES: найдите драйвер и устраните её.
Если во время загрузки SLES отображается сообщение «Не удалось запустить загрузку модулей ядра», сначала изучите systemd-modules-load.serviceжурналы, чтобы определить модуль, вызвавший сбой. Если модуль является устаревшим необязательным элементом, удалите этот запрос из его конфигурации; если он необходим, исправьте несоответствие драйвера или ядра, а не отключайте службу.
Данная процедура применима к SUSE Linux Enterprise Server (SLES) 15, используя в качестве参考 документацию по администрированию SLES 15 SP7. Команды следует запускать из локальной консоли или работающей SSH-сессии с sudoдоступом.
Что означает это сообщение, прежде чем что-либо менять?
Модуль ядра — это драйвер или функция ядра, которую можно загрузить отдельно. Во время запуска systemd-modules-load.serviceобрабатываются запросы на загрузку определенных модулей, в том числе определенных в modules-load.dфайлах. Неудачный запрос может привести к сбою службы, даже если другие части сервера продолжают работать.
Компания SUSE отмечает, что большинство драйверов загружаются автоматически при обнаружении оборудования. Обычно ручной список модулей не требуется, поэтому устаревшая запись вполне вероятна, но само сообщение при загрузке этого не доказывает. Сохраните доступ к консоли, сделайте снимок системы или резервную копию конфигурации, если это возможно, и не выгружайте драйверы хранилища, сети или кластера только для того, чтобы исчезло предупреждение. См. руководство по администрированию модулей ядра SUSE для получения информации о поддерживаемых моделях.
Шаг 1: Прочитайте состояние службы и журнал ее загрузки.
Начнём с проверки состояния systemd. systemdЭто менеджер служб, отвечающий за запуск служб и передачу информации об их состоянии.
Этот -bфлаг ограничивает journalctlзагрузку текущей системой и -uвыбирает данную службу. Над последней строкой «Сбой с результатом» проверьте наличие сообщений типа «Не удалось найти модуль», недопустимого параметра или ошибки доступа или подписи. Запишите точное имя модуля и текст ошибки. Не предполагайте, что модуль, указанный в примере ниже, существует на вашем сервере.
Пример отображения состояния службы: неисправный модуль указывает, какая служба при запуске требует проверки.Пример журнала загрузки: показательное имя модуля example_driver является ключом к трассировке, а не подтвержденной ошибкой SLES.
Если журнал служб не дает однозначных результатов, проверьте сообщения ядра для получения дополнительной информации:
sudo journalctl -k -b --no-pager
Если компьютер не может получить доступ к работоспособной учетной записи, запустите более старую установленную версию ядра из GRUB, если таковая имеется, или используйте носитель восстановления SLES. Не редактируйте критически важные для загрузки модули из непроверенной удаленной сессии. SUSE описывает фильтры журнала в главе об администрировании journalctl .
Шаг 2: Найдите конфигурацию запуска, которая запрашивает это.
Предположим, названия журналов example_driver... Замените этот заполнитель фактическим названием модуля, затем выполните поиск в списках модулей:
Каждая совпадающая строка указывает, какой файл запрашивает этот модуль при загрузке. Локальная конфигурация администратора обычно находится в папке `/etc/systemd` /etc/modules-load.d/, тогда как пакет может предоставлять свой файл в папке `/etc/ /usr/lib/modules-load.d/systemd`. Локальный файл с тем же базовым именем имеет приоритет над файлом поставщика, как описано в руководстве по настройке systemd от SUSE . Если поиск ничего не находит, проверьте также cat /proc/cmdlineзапросы модулей во время загрузки и убедитесь, что имя ошибки было скопировано правильно.
Откройте соответствующий файл и определите, требуется ли эта запись по-прежнему оборудованию или приложению. Модуль, запрошенный для старого, удаленного устройства, отличается от драйвера контроллера хранения или сторожевого таймера кластера.
Пример локальной конфигурации: изменяйте необязательную запись модуля только после подтверждения её назначения.
Шаг 3: Проверьте модуль, затем примените соответствующее исправление.
Проверьте, какое ядро запущено и доступен ли для него драйвер. modprobeЗагружает модули ядра и разрешает зависимости; его -nопция выполняет пробный запуск без добавления драйвера.
Снова замените example_driver. Пробный запуск помогает выявить проблемы с поиском или конфигурацией, но не доказывает , что драйвер успешно инициализируется на вашем оборудовании или пройдет проверку подписи Secure Boot. SUSE рекомендует использовать modprobeвместо прямой insmodзагрузки; подробности о флагах пробного запуска приведены в руководстве по modprobe .
Примеры проверок: перед внесением изменений сравните работающее ядро с исследуемым модулем.
Если устаревшая дополнительная запись указывает на отсутствующий модуль
Создайте резервную копию конкретного локального файла и закомментируйте только устаревшую строку. Например, если /etc/modules-load.d/example.confэто подтвержденный источник:
sudo cp -a /etc/modules-load.d/example.conf \
/etc/modules-load.d/example.conf.bak
sudoedit /etc/modules-load.d/example.conf
Измените единственную example_driverзапись на # example_driver, сохраните и оставьте остальные запросы модулей без изменений. Если источником является файл пакета в каталоге /usr/lib, не редактируйте этот упакованный файл напрямую; используйте правильно проверенное локальное переопределение или исправьте конфигурацию пакета. Никогда не удаляйте запрос модуля только потому, что modinfoон сообщает об отсутствии соответствующего устройства, если оно требуется.
Если необходимый модуль отсутствует или несовместим
Не комментируйте этот код. Убедитесь, что пакет драйверов поддерживает вывод команды uname -rи установленный пакет обновлений SLES. Сообщение «модуль не найден» может указывать на то, что соответствующий драйвер не был установлен или не был пересобран после обновления ядра. Сообщение «недопустимый формат модуля» указывает на проблему совместимости; строки журнала ядра могут помочь сузить круг возможных причин. Восстановите или переустановите поддерживаемый драйвер в соответствии с инструкциями SUSE или производителя оборудования. Избегайте копирования произвольных .koфайлов из другого ядра.
Если модуль существует, но его индекс зависимостей явно устарел, перестройте этот индекс для текущего ядра и повторите тестовый запуск:
sudo depmod -a "$(uname -r)"
sudo modprobe -n -v example_driver
Этот шаг не устанавливает отсутствующий драйвер. Если в системе с использованием Secure Boot вы видите сообщение «Требуемый ключ недоступен» или отклонение подписи модуля, следуйте процедуре регистрации доверенного ключа и подписи драйвера, описанной в руководстве SUSE; не отключайте Secure Boot в качестве универсального обходного решения. SUSE объясняет ограничения сторонних драйверов в своем руководстве по развертыванию Secure Boot .
Шаг 4: Убедитесь, что следующая загрузка прошла без ошибок.
После исправления конфигурации или восстановления драйвера повторите попытку загрузки и проверьте ее состояние. Выполняйте это только после того, как убедитесь, что все оставшиеся записи корректны; перезапуск предпримет повторную попытку загрузки настроенных файлов.
Если проверка прошла успешно, запланируйте контролируемую перезагрузку с доступом к консоли и снова выполните команды проверки состояния и ведения журнала. Исправление считается подтвержденным, когда служба больше не выдает ошибок при новой загрузке, и все необходимое оборудование или программное обеспечение, зависящее от модуля, по-прежнему работает. Если ошибка возвращается, сравните новый журнал со старым: возможно, неисправен и другой указанный модуль. Сохраните резервную копию до тех пор, пока эта проверка не будет пройдена; не маскируйте сообщение systemd-modules-load.serviceпросто для подавления сообщения при запуске.