Параметры загрузки ядра — это короткие key=value, которые передаются ядру до запуска init. Через них включают IOMMU, выбирают режим сна, задают консоль для последовательного порта, отключают проблемный драйвер и собирают диагностику, когда система не стартует. В большинстве дистрибутивов с GRUB правка сводится к одному файлу, но именно там чаще всего ломают загрузку: забывают обновить конфиг, путают переменные или добавляют параметр, который ядро молча игнорирует. Разберём, где что лежит, как проверить результат и какие параметры действительно полезны.

Где хранятся параметры

Основной файл — /etc/default/grub. В нём две ключевые переменные. GRUB_CMDLINE_LINUX_DEFAULT попадает в обычные пункты меню, GRUB_CMDLINE_LINUX — во все, включая recovery. Если параметр нужен всегда, включая восстановление, его место во второй переменной.

sudo cp /etc/default/grub /etc/default/grub.bak
sudoedit /etc/default/grub
# внутри файла:
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash loglevel=3"
GRUB_CMDLINE_LINUX=""

На Debian и Ubuntu рядом есть каталог /etc/default/grub.d: файлы от пакетов могут переопределять значения, и итоговый результат зависит от порядка чтения. Если правка «не применяется», проверьте сначала drop-in-файлы, а потом сам конфиг.

Как применить изменения

Файл настроек сам по себе ничего не меняет — нужно пересобрать grub.cfg. Команда зависит от дистрибутива, и это вторая частая причина ошибок.

sudo update-grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo grubby --update-kernel=ALL --args="zswap.enabled=1"

В Fedora и RHEL с загрузочными записями BLS предпочтителен grubby: он правит записи ядра напрямую, без полной пересборки меню. update-grub — обёртка Debian, на других системах её может не быть. После обновления ядра параметры из grubby обычно сохраняются, а ручная правка grub.cfg пропадёт при следующем обновлении.

Проверка и временная правка

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

cat /proc/cmdline
sudo dmesg | grep -iE "command line|unknown|not recognized"
journalctl -k -b -o short-monotonic | head -40
sudo grubby --info=ALL

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

Диагностика и железо

Часть параметров нужна, чтобы увидеть причину зависания. debug и ignore_loglevel выводят всё, earlycon и console=ttyS0,115200 помогают на машинах без рабочего видео, nomodeset отключает KMS и позволяет добраться до рабочего стола при проблемах с драйвером. nomodeset — именно диагностический инструмент, а не постоянная настройка: без KMS не будет нормального разрешения и аппаратного ускорения.

  • mitigations=off отключает защиты от Spectre и Meltdown. Это ускоряет часть нагрузок, но снижает безопасность; на рабочей машине так делать не стоит.
  • nowatchdog убирает лишние таймеры и экономит немного энергии, но усложняет обнаружение зависаний.
  • processor.max_cstate=1 и intel_idle.max_cstate=0 помогают при случайных зависаниях и перезагрузках на ноутбуках.
  • mem_sleep_default=deep выбирает классический S3 вместо s2idle, если последний сильно разряжает батарею.
  • pcie_aspm=off и nvme_core.default_ps_max_latency_us=0 лечат пропадающие NVMe-диски.

Виртуализация, сон и видео

Для проброса устройств в виртуальные машины включают IOMMU. На Intel это intel_iommu=on iommu=pt, на AMD — amd_iommu=on iommu=pt; дополнительно нужны настройки BIOS и корректные группы устройств. Для гибернации указывают раздел подкачки: resume=UUID=..., а при swap-файле ещё и resume_offset, иначе система проснётся с пустой памятью.

Разрешение и частоту на конкретном выходе задаёт video=DP-1:2560x1440@144. Параметр полезен, когда монитор определяется неверно или рабочий стол стартует с низким разрешением. Для отладки загрузки на сервере удобно console=tty0 console=ttyS0,115200: вывод пойдёт и на монитор, и в последовательный порт. При ядерной панике panic=10 перезагрузит машину через десять секунд, а oops=panic превратит oops в панику — это удобно для тестовых стендов, но не для продакшена.

Безопасность и компромиссы

Часть параметров ужесточает систему. slab_nomerge мешает объединению кэшей, init_on_alloc=1 и init_on_free=1 обнуляют память, page_alloc.shuffle=1 усложняет предсказуемое размещение, randomize_kstack_offset=on рандомизирует стек ядра. Включать всё сразу стоит осознанно: часть нагрузки на процессор вырастет.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash slab_nomerge init_on_alloc=1 init_on_free=1 page_alloc.shuffle=1"
GRUB_CMDLINE_LINUX="audit=1"
sudo update-grub

module.sig_enforce=1 разрешает только подписанные модули, lockdown=integrity ограничивает доступ к ядру. На домашней машине с самосборными драйверами это создаст проблемы, на корпоративном ноутбуке с Secure Boot — наоборот, ожидаемое поведение.

Когда конфиг не GRUB

В системах с systemd-boot параметры лежат в /boot/loader/entries/*.conf в строке options. Для Unified Kernel Image и kernel-install источником служит /etc/kernel/cmdline — именно туда вписывают аргументы, которые попадут в собранный образ.

cat /etc/kernel/cmdline
sudo bootctl status
sudo kernel-install add $(uname -r) /boot/vmlinuz-$(uname -r)
sudo bootctl list

После правки выполняют kernel-install add с текущей версией ядра или пересобирают UKI средствами дистрибутива. Ошибка здесь дороже: неверный root= в UKI означает, что запасного пункта меню с другим cmdline может не быть.

Типичные ошибки

  • Правка /boot/grub/grub.cfg вручную: изменения исчезнут после обновления.
  • Отсутствие update-grub или grub2-mkconfig после изменения настроек.
  • Кавычки внутри значения без экранирования — ядро получает обрывок строки.
  • Параметр добавлен в recovery-ветку и не действует в обычной загрузке, или наоборот.
  • mitigations=off поставлен «для скорости» и забыт на год.
  • Нет резервной копии конфига и записи, как загрузиться со старого ядра.

Чек-лист

  • Сделайте копию /etc/default/grub и запишите текущий /proc/cmdline.
  • Меняйте по одному параметру за раз и проверяйте загрузку.
  • Держите в меню второй, заведомо рабочий пункт загрузки.
  • Проверяйте dmesg на неизвестные параметры после перезагрузки.
  • Для сервера заранее настройте последовательную консоль и проверьте, что доступ к ней работает.

Итог

Параметры загрузки ядра — мощный, но грубый инструмент. Они выручают при проблемах с железом, виртуализацией и диагностикой, однако каждый добавленный аргумент нужно понимать и проверять. Рабочая схема проста: правка /etc/default/grub или grubby, пересборка конфигурации, проверка /proc/cmdline и журнала, а для экспериментов — разовая правка в меню GRUB. Такой порядок позволяет вернуться к рабочему состоянию без переустановки системы.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте