Пропустити модуль ядра під час завантаження


12

Є зламаний модуль ядра, через який я навіть не можу завантажити ОС, тому не можу його видалити чи виправити. Чи можливо пропустити цей модуль при завантаженні, використовуючи параметри ядра чи щось таке?


Відповіді:


1

Чорний список модуля, як згадувалося в попередній відповіді, - найкращий спосіб повністю уникнути модуля ядра. Крім чорного списку, немає загального способу відключення модуля.

Деякі дистрибутиви Linux надають параметри завантаження ядра для таких дій.

  • У Arch Linux , load_modules=offсили Udev пропустити автозагрузку. Це дозволить завантажуватись без завантаження модулів, чорний список модуля, який спричиняє проблеми, і перезавантажуватись нормально без завантаження проблемних модулів.
  • Knoppix має довгий список додаткових параметрів завантаження (він же "чіт-коди") ; це поєднання нормальних параметрів завантаження ядра та додаткових додаткових даних для Knoppix.

Для отримання додаткової інформації дивіться документацію щодо параметрів ядра . Існують параметри вимкнення конкретних підсистем. Наприклад:

  • nousb відключає підтримку ядра USB
  • cgroup_disable=[name]відключає певний контролер; однак, "пам'ять" - єдиний приклад, який спеціально підтримується
  • libata.noacpiвідключає використання ACPI в libata (контролери SATA); це приклад передачі параметра модуля через ядро

7

Відключення спеціальних модулів є можливим з завантажувача, але виглядає як-дистрибутив залежить на насправді.

З одного боку, в документації з параметрами ядра Linux за станом на серпень 2016 року зазначено:

module_blacklist= [KNL] Не завантажуйте розділений комою список модулів. Корисно для налагодження проблемних модулів.

З іншого боку, параметр, який працював для мене з openSUSE 42.1 (Linux 4.1.31), описаний у  вікі- модулях Arch Kernel :

Ви також можете завантажувати модулі чорного списку з завантажувача. Просто додайте

modprobe.blacklist=modname1,modname2,modname3

до рядка ядра завантажувача, як описано в параметрах ядра. Коли ви перебуваєте в чорному списку більше ніж один модуль, зверніть увагу, що вони розділені лише комами. Пробіли чи щось інше, можливо, може порушити синтаксис.

(Дякуємо @gertvdijk на  unix.SE за вказівку на це.)

Також варто зазначити наступний метод :

Для того, щоб запобігти завантаженню ядра певними модулями за допомогою командного рядка grub, вам потрібно передати їх як параметр рядку ядра, використовуючи нижній синтаксис.

$module_name.blacklist=yes

Я поняття не маю, звідки вони це взяли, але, безумовно, не завадить спробувати будь-який інший метод, якщо все інше не вдасться.


У мене те саме питання, чому працює "$ module_name.blacklist = так", і я думаю, що це пов'язано з цією частиною коду ядра: git.kernel.org/pub/scm/linux/kernel/git/stable/linux- stable.git /…
Johnlcf

1

Ви можете мати змогу або додати його до /etc/modprobe.d/blacklist, або "ім'я модуля" в чорний список


це буде працювати, але вимагає завантаження до іншого ядра (якщо є) або до системи LiveCD.
квакш-кіхот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.