Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Кастомные аргументы ядра в GRUB: полная настройка

Кастомные аргументы ядра в GRUB добавляются в одну строку. Открой /etc/default/grub, допиши нужные параметры в GRUB_CMDLINE_LINUX_DEFAULT или GRUB_CMDLINE_LINUX, сохрани файл и выполни sudo grub-mkconfig -o /boot/grub/grub.cfg. После перезагрузки ядро получит новые аргументы, а проверить их можно командой cat /proc/cmdline. Больше ничего делать не нужно.

Где GRUB хранит аргументы ядра?

Здесь два уровня: /etc/default/grub (исходный файл, который ты редактируешь руками) и /boot/grub/grub.cfg (сгенерированный конфиг, который загрузчик читает при старте).

Править grub.cfg вручную не стоит. При следующем обновлении ядра или перегенерации конфига твои правки сотрутся. Работай только с /etc/default/grub, а grub.cfg пересоздавай командой grub-mkconfig.

За аргументы отвечают две переменные:

  • GRUB_CMDLINE_LINUX_DEFAULT: аргументы для обычных пунктов меню. Сюда кладут параметры загрузки и suspend/resume.
  • GRUB_CMDLINE_LINUX: дополнительные аргументы, которые применяются всегда, в том числе к recovery-режиму.

Разница простая. GRUB_CMDLINE_LINUX_DEFAULT попадает в обычные записи меню, GRUB_CMDLINE_LINUX во все записи без исключения. В итоговой строке ядра обе переменные объединяются.

Пример. Ты хочешь, чтобы обычная загрузка была тихой, но в recovery-режиме сообщения ядра оставались видны. Тогда quiet кладёшь в GRUB_CMDLINE_LINUX_DEFAULT, а loglevel=3 в GRUB_CMDLINE_LINUX. В обычной записи соберётся loglevel=3 quiet, в recovery только loglevel=3.

Как добавить аргументы ядра в GRUB?

Открой файл:

sudo nano /etc/default/grub

Найди строку:

GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"

Допиши свои параметры внутри кавычек:

GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet mitigations=off"

Сохрани файл и перегенерируй конфиг:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Это обязательный шаг. Без него изменения не попадут в grub.cfg, и ядро получит старые аргументы.

При генерации grub-mkconfig выведет строки вида Found linux image: /boot/vmlinuz-linux. Это нормально: скрипт нашёл ядра и собрал для них записи меню. Если таких строк нет, проверь, что ядро установлено и /boot смонтирован.

После перезагрузки проверь результат:

cat /proc/cmdline

В выводе увидишь все аргументы, с которыми стартовало ядро, включая твои.

Параметры, которые должны действовать всегда, записывай во вторую переменную:

GRUB_CMDLINE_LINUX="modprobe.blacklist=nouveau"

После правки снова выполни grub-mkconfig. Обе переменные попадут в grub.cfg отдельными строками, а при загрузке объединятся.

Какие аргументы ядра стоит добавить?

quiet и splash

quiet прячет сообщения ядра во время загрузки. Вместо потока текста ты видишь логотип или пустой экран. splash включает заставку, если она установлена. Вместе они дают чистую загрузку без мельтешения строк.

quiet не отключает сообщения полностью, а снижает их поток до минимума. Критические ошибки всё равно появятся на экране. splash работает только вместе с установленной темой или заставкой, иначе просто нечего показывать.

Если что-то не грузится и нужна диагностика, убери quiet и splash на время. Ядро покажет все сообщения. Как настроить саму заставку, разобрано в статье «Тема оформления GRUB: фон и стиль».

loglevel=3

Ограничивает вывод ядра уровнем ошибок и выше. Полезно в паре с quiet: даже при проблемах на экране появятся только серьёзные сообщения.

mitigations=off

Отключает аппаратные меры защиты от Spectre и Meltdown. Даёт небольшой прирост производительности на старых CPU, но снижает безопасность. Ставить стоит только на машинах, где ты контролируешь всё, что выполняется. На сервере с чужим кодом лучше не трогать. На современных CPU прирост обычно незаметен, на старых поколениях ощущается в тяжёлых вычислениях. Если не знаешь, зачем тебе этот параметр, не добавляй его.

mem_sleep_default=deep

Заставляет систему использовать полноценный S3-режим сна вместо S2idle. Актуально для ноутбуков, где после закрытия крышки батарея тает за ночь. Если после systemctl suspend ноутбук просыпается сам или греется в рюкзаке, попробуй этот параметр.

Проверить текущий режим сна можно командой cat /sys/power/mem_sleep. Если в выводе активен s2idle, а не deep, параметр пригодится. После добавления mem_sleep_default=deep активным станет deep.

iommu=pt

Включает режим pass-through для IOMMU. Нужен для проброса устройств в виртуальные машины, например GPU passthrough, и для некоторых сетевых карт. На обычном десктопе без VFIO не даёт ничего.

nvidia-drm.modeset=1

Включает ранний KMS для драйвера NVIDIA. Требуется для Wayland, корректной работы некоторых приложений и переключения виртуальных терминалов без мерцания. Подробнее про установку драйвера читай в статье «Установка драйвера NVIDIA на Arch Linux».

nowatchdog

Отключает watchdog-таймеры ядра, softlockup и hardlockup. Убирает периодические прерывания и может снизить энергопотребление на ноутбуках. Минус один: потеряешь диагностику зависаний ядра.

modprobe.blacklist=module_name

Запрещает загрузку модуля ядра с самого старта. Например, modprobe.blacklist=nouveau отключит свободный драйвер NVIDIA до того, как он успеет загрузиться. Удобно, когда модуль конфликтует с другим или вызывает панику при загрузке.

Как проверить, что аргументы применились?

Самый простой способ: посмотреть текущую командную строку ядра.

cat /proc/cmdline

Ядро записывает туда реальные аргументы, с которыми стартовало. Если твоего параметра там нет, он не применился.

Второй способ: заглянуть в сгенерированный конфиг.

grep linux /boot/grub/grub.cfg

В строках linux /vmlinuz-linux ... увидишь итоговые аргументы для каждого пункта меню. GRUB_CMDLINE_LINUX_DEFAULT попадёт в обычные записи, GRUB_CMDLINE_LINUX во все.

Структура записи в grub.cfg выглядит так:

menuentry 'Arch Linux' {
    ...
    linux /vmlinuz-linux root=UUID=... rw loglevel=3 quiet
    initrd /initramfs-linux.img
}

Строка linux и есть итоговая командная строка ядра. Все параметры из обеих переменных GRUB собирает именно сюда.

Как проверить аргумент без перезаписи конфига?

Не хочешь менять файлы, проверь параметр на один раз. В меню GRUB выбери нужный пункт и нажми e. Откроется редактор записей. Найди строку, начинающуюся с linux, допиши в конец аргумент и нажми Ctrl+X или F10 для загрузки.

Изменение действует только для текущей загрузки. После перезагрузки GRUB вернётся к grub.cfg, и параметр исчезнет. Так удобно тестировать mitigations=off или mem_sleep_default=deep перед тем, как прописывать их навсегда.

Редактор в GRUB работает как обычный текстовый редактор: стрелки двигают курсор, Ctrl+W ищет текст, Ctrl+U и Ctrl+K вырезают и вставляют строки. Если нажал лишнего, Ctrl+E вернёт исходную запись.

Что делать, если аргумент не работает?

Самая частая причина: забытый grub-mkconfig. Ты поменял /etc/default/grub, но не перегенерировал конфиг. Проверь:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Вторая причина: параметр записан в неправильную переменную. Если ты добавил его в GRUB_CMDLINE_LINUX, а ждёшь, что он появится только в обычной записи, так не выйдет. Проверь, куда попал параметр, через grep linux /boot/grub/grub.cfg.

Третья причина: опечатка в имени параметра. Ядро молча игнорирует неизвестные аргументы. Сверь имя с документацией: quiet, splash, mitigations=off, mem_sleep_default=deep пишутся именно так.

Четвёртая причина: параметр перекрыт другим. Например, loglevel=3 в одной переменной и loglevel=7 в другой. Побеждает последний в итоговой строке.

Пятая причина: файл не сохранился. nano при выходе спрашивает подтверждение, и если ответить N, изменения пропадут. Проверь содержимое файла перед генерацией: cat /etc/default/grub.

Как вернуть всё обратно?

Удали лишние параметры из /etc/default/grub и снова выполни:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Затем перезагрузись. Если после отключения quiet и splash загрузка стала шумной, это нормально. Верни их обратно тем же способом.

Перед экспериментами можно сохранить копию текущего файла:

sudo cp /etc/default/grub /etc/default/grub.bak

Если что-то пойдёт не так, вернёшь файл одной командой sudo cp /etc/default/grub.bak /etc/default/grub и снова перегенерируешь конфиг.

Если система не загружается после экспериментов с аргументами, загружайся с live-USB, отредактируй /etc/default/grub через chroot и перегенерируй конфиг. Методика та же, что при восстановлении загрузчика: «grub rescue: что делать, когда grub rescue>».

Частые вопросы

Чем GRUB_CMDLINE_LINUX_DEFAULT отличается от GRUB_CMDLINE_LINUX?

GRUB_CMDLINE_LINUX_DEFAULT применяется к обычным пунктам меню, GRUB_CMDLINE_LINUX ко всем записям, включая recovery. Параметры suspend/resume принято класть в _DEFAULT, обязательные в _LINUX.

Нужно ли переустанавливать GRUB после изменения аргументов?

Нет. grub-install нужен только при установке или переустановке загрузчика. Для смены аргументов достаточно grub-mkconfig -o /boot/grub/grub.cfg.

Безопасно ли отключать mitigations?

mitigations=off отключает защиту от Spectre и Meltdown. На личной машине с проверенным софтом риск небольшой. На сервере или машине с чужим кодом лучше оставить защиту включённой.

Почему параметр не появляется в /proc/cmdline?

Скорее всего, ты не выполнил grub-mkconfig после правки /etc/default/grub, либо в имени параметра опечатка. Проверь оба момента.

Можно ли задать аргументы только для одного ядра?

GRUB применяет аргументы из /etc/default/grub ко всем ядрам сразу. Чтобы задать параметры только одному, придётся править grub.cfg вручную после каждой генерации, а это неудобно. Проще держать несколько ядер с общими аргументами, как описано в статье «Несколько ядер в меню GRUB: linux, linux-lts, linux-hardened».

Полезные ресурсы

Заключение

Кастомные аргументы ядра в GRUB: правка двух строк в /etc/default/grub и одна команда grub-mkconfig -o /boot/grub/grub.cfg. GRUB_CMDLINE_LINUX_DEFAULT отвечает за обычные записи меню, GRUB_CMDLINE_LINUX за все. Проверяй результат через cat /proc/cmdline, тестируй новые параметры через e в меню GRUB, а если что-то пошло не так, просто убери параметр и перегенерируй конфиг. Никакой магии, только файл и одна команда.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max