Зачем нужен загрузчик GNU GRUB в современных системах?

«Зачем нужен загрузчик GNU GRUB в современных системах?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

GRUB (GRand Unified Bootloader) — это современный, полнофункциональный загрузчик, который выполняет критически важные задачи после завершения работы прошивки (BIOS/UEFI) и до запуска ядра ОС. В DevOps понимание его работы необходимо для управления серверами, особенно при восстановлении, настройке загрузки по сети (PXE) или использовании нескольких ядер.

Роль GRUB по сравнению с прошивкой:

  • BIOS/UEFI только выполняет самотестирование (POST), инициализирует оборудование и находит загрузочное устройство (диск, сеть).
  • GRUB берет на себя дальнейшую логику:
    1. Загрузка ядра и initramfs: Он умеет читать современные файловые системы (ext4, XFS, Btrfs), чтобы загрузить нужные файлы ядра (vmlinuz) и временной корневой файловой системы (initrd.img).
    2. Гибкая конфигурация: Предоставляет интерактивное меню для выбора ОС или параметров загрузки (например, загрузка в rescue mode или с другим ядром).
    3. Передача параметров ядру: Позволяет задать ключевые параметры, такие как root=/dev/sda2, quiet, splash, или параметры для исправления проблем (например, nomodeset для проблем с графикой).
    4. Сетевой PXE-загрузчик: GRUB может выступать в качестве второй стадии PXE-загрузчика, что используется для автоматического развертывания ОС на «голые» серверы (bare metal provisioning).

Пример фрагмента конфигурации GRUB (/etc/grub.d/40_custom):

menuentry 'Ubuntu, with Linux 5.15.0-91-generic (recovery mode)' {
    recordfail
    load_video
    insmod gzio
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt2' # Указание на конкретный раздел
    linux   /boot/vmlinuz-5.15.0-91-generic root=/dev/mapper/vg-root ro recovery nomodeset
    initrd  /boot/initrd.img-5.15.0-91-generic
}

В DevOps-работе часто приходится редактировать эти параметры для загрузки сервера с rescue-образом или для отладки проблем с драйверами на этапе инициализации.