Загрузчик GRUB 2 [102.2]

Рейтинг: 61% · 6 голосов
Полный курс LPIC-1 (экзамены 101-500 и 102-500): архитектура, загрузка, пакеты, команды и текст, ФС и права, шелл-скрипты, пользователи, сервисы, сеть, безопасность. Debian и RHEL.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Загрузчик GRUB 2 [102.2]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-1 и как устроен путь администратора
  2. Железо, устройства и модули ядра [101.1]
  3. Загрузка системы: от BIOS до systemd [101.2]
  4. systemd, цели и уровни выполнения [101.3]
  5. План разметки диска и swap [102.1]
  6. Загрузчик GRUB 2 [102.2] (вы здесь)
  7. Разделяемые библиотеки [102.3]
  8. Управление пакетами в Debian: dpkg и apt [102.4]
  9. Управление пакетами RPM, DNF и Zypper [102.5]
  10. Linux как гость виртуализации [102.6]
  11. Командная строка Bash [103.1]
  12. Обработка текста фильтрами [103.2]
  13. Базовое управление файлами [103.3]
  14. Потоки, конвейеры и перенаправление [103.4]
  15. Процессы: создание, мониторинг, сигналы [103.5]
  16. Приоритеты выполнения процессов [103.6]
  17. Регулярные выражения [103.7]
  18. Редактор vi и vim [103.8]
  19. Разделы и создание файловых систем [104.1]
  20. Целостность и обслуживание ФС [104.2]
  21. Монтирование файловых систем [104.3]
  22. Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты
  23. Жёсткие и символические ссылки
  24. FHS и поиск файлов в системе [104.7]
  25. Окружение и кастомизация оболочки [105.1]
  26. Урок 25. Написание простых bash-скриптов [105.2]
  27. Графика, рабочие столы и доступность
  28. Учётные записи пользователей и групп
  29. Автоматизация задач: cron, at, таймеры [107.2]
  30. Локализация и интернационализация [107.3]
  31. Системное время и синхронизация [108.1]
  32. Системное логирование [108.2]
  33. Основы почтового агента (MTA) [108.3]
  34. Печать и CUPS [108.4]
  35. Основы интернет-протоколов [109.1]
  36. Постоянная конфигурация сети [109.2]
  37. Диагностика сети [109.3]
  38. DNS на стороне клиента [109.4]
  39. Задачи администрирования безопасности [110.1]
  40. Настройка безопасности хоста [110.2]
  41. Шифрование данных: SSH и GnuPG [110.3]
Урок 5. Загрузчик GRUB 2 [102.2]

GRUB 2 - это то звено, что стоит между прошивкой (BIOS или UEFI) и ядром Linux. Если оно сломано, машина не загрузится, и никакие красивые сервисы systemd вам не помогут. В этом уроке разбираем, как GRUB 2 находит и грузит ядро, чем правится его конфиг (и почему править его руками - почти всегда ошибка), как поставить загрузчик заново после слетевшей установки Windows или ошибки в разметке, и что делать, если вы видите только мигающий курсор или приглашение grub rescue.

Изображение

Как это работает

GRUB 2 (пакеты и команды в разных дистрибутивах называются по-разному: grub в Debian/Ubuntu, grub2 в RHEL/Fedora) грузится в несколько стадий. На BIOS-системах в первый сектор диска (MBR) пишется крошечный код, который умеет только найти и подгрузить следующую стадию - ядро GRUB (core.img), лежащее обычно в зазоре после MBR или в BIOS Boot Partition на GPT-дисках. На UEFI-системах все проще и надежнее: прошивка читает файл .efi (например grubx64.efi) прямо с EFI System Partition (ESP), смонтированной в /boot/efi, по записи в NVRAM.

Дальше GRUB читает свой главный файл grub.cfg. Внимание: это сгенерированный файл, его НЕ редактируют руками. На Debian/Ubuntu он лежит в /boot/grub/grub.cfg, на RHEL/Fedora исторически в /boot/grub2/grub.cfg, а на UEFI-RHEL раньше был в /boot/efi/EFI/<distro>/grub.cfg. В современных RHEL 9/10 и Fedora этот путь унифицировали через BLS (Boot Loader Specification): меню больше не зашито в grub.cfg, а собирается из отдельных файлов-сниппетов в /boot/loader/entries/, по одному на каждое ядро.

Чтобы изменить меню, вы правите ИСХОДНИКИ, а потом перегенерируете grub.cfg. Источников два: файл настроек /etc/default/grub (таймаут, дефолтное ядро, параметры командной строки ядра, тема) и набор скриптов в /etc/grub.d/ (00_header, 10_linux, 30_os-prober, 40_custom и так далее - порядок задается числовым префиксом). Скрипты при генерации запускаются, их вывод склеивается в итоговый grub.cfg. Именно поэтому ручные правки grub.cfg затираются при первом же обновлении ядра.

Параметр GRUB_CMDLINE_LINUX в /etc/default/grub - самый частый предмет редактирования: туда добавляют вещи вроде quiet splash, или, наоборот, убирают их для диагностики, прописывают resume= для гибернации, console= для последовательной консоли. Все, что вы туда впишете, попадет ядру как аргументы.

Команды и примеры

Перегенерация конфига после правки /etc/default/grub. Debian/Ubuntu:

Код: Выделить всё

update-grub
# это обертка над:
grub-mkconfig -o /boot/grub/grub.cfg
RHEL/Fedora:

Код: Выделить всё

grub2-mkconfig -o /boot/grub2/grub.cfg
Установка загрузчика на диск. На BIOS-системе цель - это диск целиком, а не раздел. Debian/Ubuntu:

Код: Выделить всё

grub-install /dev/sda
update-grub
RHEL/Fedora:

Код: Выделить всё

grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
На UEFI-системах grub-install ставит файл в ESP и обновляет NVMRAM-запись; диск как аргумент тут не нужен:

Код: Выделить всё

# Debian/Ubuntu
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian
# RHEL/Fedora обычно переустанавливают только efi-файл:
grub2-install --target=x86_64-efi --efi-directory=/boot/efi
Точечная правка дефолтного ядра в RHEL/Fedora без редактирования файлов делается через grubby:

Код: Выделить всё

grubby --default-kernel
grubby --set-default /boot/vmlinuz-6.12.0-55.el10.x86_64
grubby --update-kernel=ALL --args="audit=0"
Восстановление с live/rescue образа. Загрузились с флешки, монтируем корень и chroot:

Код: Выделить всё

mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi        # если UEFI
for d in dev proc sys run; do mount --bind /$d /mnt/$d; done
chroot /mnt
grub-install /dev/sda && update-grub  # или grub2-* в RHEL
exit
Частые грабли
  • Правили grub.cfg напрямую, а после dnf/apt update ядра все откатилось - правьте /etc/default/grub и перегенерируйте.
  • На BIOS дали grub-install раздел (/dev/sda1) вместо диска (/dev/sda) - загрузчик встал криво или не встал.
  • Перепутали BIOS и UEFI: ставите BIOS-GRUB на машину, которая грузится через UEFI. Проверьте: каталог /sys/firmware/efi существует только на UEFI.
  • Забыли смонтировать /boot/efi внутри chroot перед grub-install на UEFI - файл .efi уйдет в пустоту.
  • os-prober по умолчанию отключен в свежих сборках (GRUB_DISABLE_OS_PROBER=true), и соседняя Windows не появляется в меню. Включайте осознанно.
  • В RHEL 9/10 ждете меню в grub.cfg, а оно собирается из /boot/loader/entries/ через BLS - правки в grub.cfg на пункты меню не влияют.
Мини-лаба
  • Откройте /etc/default/grub, увеличьте GRUB_TIMEOUT до 10 и уберите quiet из GRUB_CMDLINE_LINUX_DEFAULT.
  • Перегенерируйте конфиг (update-grub или grub2-mkconfig -o ...) и перезагрузитесь - убедитесь, что меню висит 10 секунд и в логе видна загрузка ядра.
  • Посмотрите список пунктов: на RHEL выполните ls /boot/loader/entries/ и grubby --info=ALL.
  • Сломайте загрузчик намеренно в тестовой ВМ: затрите первый сектор - dd if=/dev/zero of=/dev/sda bs=446 count=1 (только в одноразовой ВМ!).
  • Загрузитесь с live-образа, сделайте chroot по схеме из урока и восстановите GRUB через grub-install.
  • Верните GRUB_TIMEOUT к разумному значению (5) и снова перегенерируйте конфиг.
Контрольные вопросы
  • Какой файл является источником для генерации меню, а какой - результатом, и какой из них нельзя править руками?
  • Чем отличается аргумент команды grub-install на BIOS-системе от UEFI-системы?
  • Где в RHEL 10 физически хранятся пункты меню для разных ядер и как называется эта спецификация?
  • Какие шаги нужны, чтобы восстановить загрузчик из live-образа, и зачем там bind-монтирование /dev, /proc, /sys?
  • Как в Fedora/RHEL сменить ядро по умолчанию, не редактируя текстовые файлы?
  • Что такое systemd-boot и в каких случаях его выбирают вместо GRUB 2?
👍4 ❤️3 🔥1 😄 🤔3
Аватара пользователя
vault4
Сообщения: 1
Зарегистрирован: 11 май 2026, 06:15

Re: Загрузчик GRUB 2 [102.2]

Сообщение vault4 »

А если у меня два диска и Windows на втором, os-prober ее подхватит или надо что-то еще руками прописывать в 40_custom?
👍1 ❤️ 🔥1 😄 🤔1
Аватара пользователя
legacydeadlock
Сообщения: 1
Зарегистрирован: 16 май 2026, 10:14

Re: Загрузчик GRUB 2 [102.2]

Сообщение legacydeadlock »

Поймал grub rescue после переразметки. Спас как раз chroot с live-флешки, но забыл примонтировать efi и полчаса тупил почему grub-install молча отрабатывает а толку ноль.
👍 ❤️1 🔥 😄 🤔
Ответить
← Предыдущая глава
План разметки диска и swap [102.1]
Следующая глава →
Разделяемые библиотеки [102.3]

Все главы курса «LPIC-1: администратор Linux (101 + 102)»

Поделиться темой: ✈ Telegram VK
  • Похожие темы

Вернуться в «LPIC-1: администратор Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость