3.1 Проблема "курицы и яйца"

ПРОБЛЕМА:
┌──────────────────────────────────────────┐
│ Чтобы загрузить ОС — нужен загрузчик    │
│ Загрузчик хранится на диске             │
│ Чтобы читать диск — нужны драйверы      │
│ Драйверы — часть ОС                     │
│ Круг замкнулся!                         │
└──────────────────────────────────────────┘

РЕШЕНИЕ GRUB2:
Разбить загрузку на маленькие этапы,
каждый из которых загружает следующий

3.2 Три стадии GRUB2

STAGE 1: boot.img (446 байт в секторе MBR)
┌─────────────────────────────────────────┐
│ • Самый маленький код                   │
│ • Умеет только одно: найти core.img     │
│ • Знает адрес на диске где лежит core   │
│ • Загружает core.img в память           │
└─────────────────────┬───────────────────┘
                      │
                      ▼
STAGE 1.5: core.img (~32 КБ)
┌─────────────────────────────────────────┐
│ • Содержит драйверы файловых систем:    │
│   ext4, xfs, btrfs, fat32...           │
│ • Умеет читать файлы с диска            │
│ • Загружает файлы Stage 2 из /boot/grub/│
└─────────────────────┬───────────────────┘
                      │
                      ▼
STAGE 2: /boot/grub/ (полный GRUB)
┌─────────────────────────────────────────┐
│ • Читает /boot/grub/grub.cfg            │
│ • Отображает меню выбора ОС             │
│ • Загружает vmlinuz + initramfs в RAM   │
│ • Передаёт ядру параметры              │
│ • Передаёт управление ядру             │
└─────────────────────────────────────────┘

3.3 Меню GRUB

┌────────────────────────────────────────────┐
│  GNU GRUB  version 2.06                   │
│                                            │
│ ┌────────────────────────────────────────┐ │
│ │*Ubuntu, with Linux 5.15.0-generic      │ │
│ │ Ubuntu, with Linux 5.15.0 (recovery)   │ │
│ │ Ubuntu, with Linux 5.10.0-generic      │ │
│ │ Windows Boot Manager                   │ │
│ └────────────────────────────────────────┘ │
│                                            │
│ Use ↑↓ arrows. Enter - boot, e - edit     │
└────────────────────────────────────────────┘

3.4 Конфигурация GRUB

Файл /etc/default/grub:

GRUB_DEFAULT=0           # загружать первый пункт
GRUB_TIMEOUT=5           # ждать 5 секунд
GRUB_TIMEOUT_STYLE=menu  # показывать меню
GRUB_CMDLINE_LINUX=""    # параметры для ядра
GRUB_GFXMODE=1920x1080   # разрешение экрана

После изменений: sudo update-grub

3.5 Параметры ядра (kernel parameters)

root=/dev/sda1   ← где корневой раздел
quiet            ← не показывать сообщения
splash           ← показывать заставку
ro               ← монтировать root только для чтения
init=/bin/bash   ← запустить bash вместо init (восстановление)

3.6 Файл grub.cfg

# Пример записи в grub.cfg
menuentry 'Ubuntu 22.04' {
    linux   /boot/vmlinuz-5.15 root=/dev/sda1 quiet splash
    initrd  /boot/initramfs-5.15.img
}
← BIOS / UEFI