Загрузчик GRUB 2
GRUB 2
GRUB 2 (GRand Unified Bootloader / большой единый загрузчик) — это кроссплатформенный загрузчик операционных систем.
При старте системы, когда запускается GRUB 2 вы видите следующее меню:

Управление осуществляется следующими клавишами:
- Стрелки «вверх/вниз» — переход по пунктам меню;
- «Enter» — загрузка выбранного пункта;
- «e» — редактирование выбранного пункта;
- «c» — запуск командной строки.
Настройка GRUB 2
При загрузки GRUB 2 читает конфигурационный файл /boot/grub/grub.cfg, но редактировать вручную его не нужно, об этом даже предупреждают в начале этого файла (на английском):
$ head /boot/grub/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
- Я использовал команду
head, чтобы посмотреть первые строки из файла/boot/grub/grub.cfg.
Основной конфигурационный файл, который нужно редактировать для настройки этого загрузчика - /etc/default/grub.
Для Debian:
$ cat /etc/default/grub | grep -v '^#'
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
Для Ubuntu:
$ cat /etc/default/grub | grep -v '^#'
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
GRUB_CMDLINE_LINUX=""
- Я вывожу содержимое файлов без комментариев с помощью
grep -v '^#'.
Параметры конфигурации
Давайте рассмотрим какими параметрами можно настроить наш загрузчик:
- GRUB_DEFAULT — отвечает за номер строки, которая будет загружена по умолчанию. Отсчет начинается с нуля, то-есть 0.
- GRUB_TIMEOUT — отвечает за время (в секундах), после истечения которого, если ничего не нажать, загрузится строка под номером указанным в GRUB_DEFAULT. Чтобы меню не появлялось следует указать 0, а чтобы выключить таймер то -1.
- GRUB_TIMEOUT_STYLE — с помощью этого параметра можно скрыть или отобразить меню:
- hidden — меню будет скрыто в течении GRUB_TIMEOUT, а затем начнется загрузка системы;
- menu — меню будет отображаться, тоже самое будет если полностью удалить этот параметр.
- GRUB_DISTRIBUTOR — описательное имя для строки меню. Здесь можно указать строку, но по умолчанию вместо строки используется команда
lsb_release -i -s 2> /dev/null || echo Debianкоторая найдет имя операционной системы (Ubuntu или Debian GNU/Linux), а если не найдет то напишет Debian; - GRUB_CMDLINE_LINUX_DEFAULT — этот параметр позволяет передать опции загрузки ядра, добавляемые только к обычному режиму загрузки системы:
- quiet — означает, не выводить сообщения во время загрузки;
- splash — вывести заставку загрузки;
- selinux=0 — выключить selinux;
- rootfstype=ext4 — можем указать тип файловой системы, чтобы он не вычислялся.
- GRUB_CMDLINE_LINUX — тоже самое что и GRUB_CMDLINE_LINUX_DEFAULT, только применяется и к обычному режиму загрузки, и к режиму восстановления системы;
- GRUB_TERMINAL — задает устройство для вывода терминала:
- console — отключает графический терминал, при этом меню будет показано в текстовом виде;
- gfxterm — включает графический терминал;
- GRUB_GFXMODE — позволяет задать разрешение и глубину цвета для графического терминала, например 640x480x32;
- GRUB_HIDDEN_TIMEOUT — можно указать сколько секунд меню будет скрыто. При этом GRUB_TIMEOUT должен быть равным нулю. При такой настройке меню не будет показываться, а чтобы его увидеть нужно нажать клавишу «Esc».
- GRUB_DISABLE_LINUX_UUID — выключает UUID (идентификатор диска), вместо него будет использоваться например /dev/sda;
- GRUB_DISABLE_RECOVERY — выключает пункты меню режима восстановления;
- GRUB_INIT_TUNE — звуковой сигнал при загрузке меню. Можете попробовать такой звук:
GRUB_INIT_TUNE="1750 523 1 392 1 523 1 659 1 784 1 1047 1 784 1 415 1 523 1 622 1 831 1 622 1 831 1 1046 1 1244 1 1661 1 1244 1 466 1 587 1 698 1 932 1 1195 1 1397 1 1865 1 1397 1"
После изменения настроек GRUB 2 нужно всегда выполнять команду update-grub2 для применения настроек. Но выполнять её нужно с правами администратора.
$ sudo update-grub2
Своя картинка в меню
На задний фон меню загрузки можно поместить какую-нибудь картинку. Для этого нужно положить файл картинки в /boot/grub и выполнить команду update-grub2. Файл должен быть обязательно в формате .png.
$ sudo cp ./пингвин.png /boot/grub/
$ sudo update-grub2
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found background image: пингвин.png
Found linux image: /boot/vmlinuz-5.15.0-30-generic
Found initrd image: /boot/initrd.img-5.15.0-30-generic
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done
После перезагрузки системы увидим нашу картинку:

Добавление параметров ядра в меню GRUB 2
Добавлять параметры ядра можно не только редактируя файл /etc/default/grub, но и в самом меню. Для этого нужно отредактировать выбранный пункт меню нажав клавишу e, после чего у вас откроется вот такой редактор:

- Опции загрузки добавляются в строке начинающейся с
linux, это строка выделена на рисунке выше.
Редактируя здесь параметры ядра можно, например сбросить пароль root пользователя в системе. Для этого нужно ro изменить на rw, и дописать init=/bin/bash:

Дальше нажимаем Ctrl+x или F10 для загрузки и попадаем в систему под пользователем root, без ввода пароля.
Осталось только поменять пароль и перезагрузить сервер.
Командная строка GRUB 2
Чтобы попасть в командную строку нажимаем клавишу c. Рассмотрим пока только две команды:
ls— позволяет просматривать файлы на файловой системе, а также блочные устройства;search— позволяет производить поиск.Команда
lsбез параметров покажет нам список разделов;С помощью команды
search -f /путь_к_файлуможем найти раздел, на котором лежит определённый файл;Если к команде
lsдобавить разделls (hd0,gpt2)-> получим информацию о нём;А если после раздела поставить слеш
ls (hd0,gpt2)/-> увидим содержимое этого раздела;Можем посмотреть содержимое определённого каталога
ls (hd0,gpt2)/boot/grub/;Если вы хотите перезагрузить систему, выполните
reboot.

Меню GRUB 2 с несколькими системами
Если на компьютере установлено несколько систем, то меню GRUB 2 выглядит следующим образом:

Как установить 2-е системы на один компьютер и при этом использовать загрузчик GRUB 2 мы разберём в следующей статье.
Каталог со скриптами (/etc/grub.d/)
В каталоге /etc/grub.d/ находятся специальные скрипты написанные на языке сценариев sh. Они выполняются при обновлении GRUB 2, то есть когда мы выполняем команду update-grub2.
Рассмотрим предназначения некоторых из скриптов:
10_linux— отвечает за поиск ядер linux;30_os-prober— отвечает за поиск других ос;40_custom— позволяет добавлять свои пункты загрузки.
Если понравилась статья, подпишись на мой канал в VK или Telegram .