GRUB нужен, если: - Нужно загрузить систему с особыми параметрами. - Нужно добавить поддержку нескольких ОС в меню загрузки. - Надо включить/выключить режим отладки ядра. - Любите жить опасно и копаетесь в экспериментальных функциях Linux. ### Структура конфигурации GRUB: **Основной конфиг:** `/etc/default/grub` Этот файл — первая остановка при настройке GRUB. Открываем: ```sh sudo nano /etc/default/grub ``` Пример стандартного конфига: ``` GRUB_DEFAULT=0GRUB_TIMEOUT=5GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"GRUB_CMDLINE_LINUX="" ``` Обозначение параметров: - `GRUB_DEFAULT=0` — загружается первая запись в меню GRUB. - `GRUB_TIMEOUT=5` — пауза в секундах перед автозагрузкой. - `GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"` — параметры, которые передаются ядру (по умолчанию он загружается без лишнего вывода). - `GRUB_CMDLINE_LINUX` — дополнительные параметры, которые работают во всех режимах. Это далеко не все параметры. Ниже будет спойлер со всеми параметрами. Изменения в файле **не вступят в силу сами по себе**. После редактирования надо обновить конфиг: ```sh sudo update-grub ``` Бывает, что система не загружается, но есть время на спасение. В такие моменты жмём `e` в меню GRUB, находим строку вида: ``` linux /boot/vmlinuz-5.15.0-52-generic root=UUID=xxxx-xxxx-xxxx-xxxx ro quiet splash ``` И меняем параметры ядра прямо в загрузчике. Например, если система зависает из‑за ACPI, можно добавить: ``` acpi=off ``` После чего грузимся с помощью `Ctrl + X` или `F10`. Эти изменения действуют **только для текущей загрузки**. Все параметры GRUB: Если уже загрузились и хотите узнать, какие параметры применились: ``` cat /proc/cmdline ``` ### Применение Несколько вариантов применения: Если провайдер не поддерживает IPv6, а система продолжает упрямо пытаться его использовать: ``` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1" ``` Обновляем GRUB, перезагружаем систему. Если вам нужно больше информации при загрузке системы: ``` GRUB_CMDLINE_LINUX_DEFAULT="debug ignore_loglevel" ``` После этого получите максимально подробный лог загрузки. Если у вас простая система, можно попробовать грузиться без `initrd`: 1. В `/etc/default/grub` добавляем: ``` GRUB_CMDLINE_LINUX_DEFAULT="noinitrd" ``` 2. Пересобираем загрузочный образ: ``` sudo update-initramfs -u ``` 3. Обновляем GRUB и перезагружаемся. ### Безопасность GRUB Если не хотите, чтобы кто‑то случайно (или специально) изменил параметры ядра: 1. Создаём хеш пароля: ``` sudo grub-mkpasswd-pbkdf2 ``` 2. Открываем файл `/etc/grub.d/40_custom`: ``` sudo nano /etc/grub.d/40_custom ``` 3. Добавляем: ``` set superusers="admin"password_pbkdf2 admin grub.pbkdf2.sha512.10000.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ``` 4. Обновляем GRUB: ``` sudo update-grub ``` Теперь при попытке редактирования параметров загрузки GRUB попросит пароль. ### GRUB Modules GRUB умеет очень многое, но многие даже не подозревают, что можно подгружать **модули** прямо в загрузчике. Загрузка по сети через PXE: ``` insmod pxeinsmod netinsmod tftpset net_pxe_ifname=eth0set net_pxe_ip=192.168.1.100set net_pxe_server=192.168.1.1set net_pxe_gateway=192.168.1.1set root=(tftp,192.168.1.1)/ ``` Можно добавить другие полезные модули: - `lvm` — для работы с логическими томами. - `cryptodisk` — для расшифровки зашифрованных дисков перед загрузкой. - `usb` — если грузимся с USB‑диска. ### Кастомизация экрана загрузки GRUB Стандартное меню GRUB скучное? 1. Кладём красивую картинку в `/boot/grub/` (лучше PNG 1024×768). 2. Открываем `/etc/default/grub` и добавляем: ``` GRUB_BACKGROUND="/boot/grub/background.png" ``` 3. Обновляем конфиг: ``` sudo update-grub ``` Теперь при загрузке будет фон вместо унылого чёрного экрана. Можно поменять цвета текста в файле `/etc/grub.d/05_debian_theme`: ``` set menu_color_normal=white/blackset menu_color_highlight=yellow/blue ``` (меняем белый текст на чёрном фоне на жёлтый текст на синем фоне) ### Если что-то пошло не так Сломали GRUB? 1. Загружаемся с LiveCD или флешки с Linux. 2. Открываем терминал и монтируем системный раздел: ``` sudo mount /dev/sdXn /mntsudo mount --bind /dev /mnt/devsudo mount --bind /proc /mnt/procsudo mount --bind /sys /mnt/sys ``` 3. Заходим в chroot‑окружение: ``` sudo chroot /mnt ``` 4. Переустанавливаем GRUB: ``` grub-install /dev/sdXupdate-grub ``` 5. Перезагружаемся. Система снова жива. Если GRUB сломался окончательно, можно загрузить ядро вручную из UEFI: 1. Загружаемся в UEFI Shell или LiveCD. 2. Выполняем: ``` linux /boot/vmlinuz-5.15.0-52-generic root=/dev/sda2 roinitrd /boot/initrd.img-5.15.0-52-genericboot ``` 3. Если сработало — переустанавливаем GRUB: ``` sudo grub-install /dev/sdasudo update-grub ```