Загрузчик GRUB 2

В этой статье рассмотрим подробнее самый популярный загрузчик для операционных систем Linux, а именно GRUB 2.















GRUB 2




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




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




GRUB 2 для Debian 11
GRUB 2 для Debian 11




GRUB 2 для Ubuntu 22.04




Хотя, по умолчанию в Ubuntu 22.04 вы не увидите это меню, так как система загружается сразу, не показывая его в отличие от Debian 11. А в Debian 11 по умолчанию это меню появляется на 5 секунд.




В обоих системах управление осуществляется следующими клавишами:




  • Стрелки «вверх/вниз» — переход по пунктам меню;
  • «Enter» — загрузка выбранного пункта;
  • «e» — редактирование выбранного пункта;
  • «c» — запуск командной строки.




Настройка GRUB 2




При загрузки GRUB 2 читает конфигурационный файл /boot/grub/grub.cfg, но редактировать вручную его не нужно, об этом даже предупреждают в начале этого файла (на английском):




alex@deb-11:~$ 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.




Для Ubuntu 22.04 и Debian 11 настройки по умолчанию немного отличаются. Ниже я вывожу содержимое файлов без комментариев.




Для Debian 11:




alex@deb:~$ 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 22.04:




alex@ubu:~$ 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=""




Параметры конфигурации




Давайте рассмотрим какими параметрами можно настроить наш загрузчик:




  • GRUB_DEFAULT — отвечает за номер строки, которая будет загружена по умолчанию. Отсчет начинается с нуля, то-есть 0 — это первая строчка меню, 1 — это вторая строчка меню и так далее.
  • 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 для применения настроек. Но выполнять её нужно с правами администратора, поэтому в Debian переключаемся на root пользователя:




alex@deb:~$ su -
Пароль:

root@deb:~# update-grub2
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.10.0-13-amd64
Found initrd image: /boot/initrd.img-5.10.0-13-amd64
Found linux image: /boot/vmlinuz-5.10.0-10-amd64
Found initrd image: /boot/initrd.img-5.10.0-10-amd64
done




А в Ubuntu можем это выполнить с помощью команды sudo:




alex@ubu:~$ sudo update-grub2




Своя картинка в меню




На задний фон меню загрузки можно поместить какую-нибудь картинку. Для этого нужно положить файл картинки в /boot/grub и выполнить команду update-grub2. Файл должен быть обязательно в формате .png.




Вот пример для Ubuntu с использованием sudo, а в Debian вам нужно будет переключиться на пользователя root:




alex@ubu:~$ sudo cp ./пингвин.png /boot/grub/

alex@ubu:~$ 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




И после перезагрузки системы увидим нашу картинку (для перезагрузки используйте команду sudo reboot):




GRUB 2 меню с картинкой




Добавление параметров ядра в меню GRUB 2




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




GRUB 2. Добавление параметров загрузки ядра
GRUB 2. Добавление параметров загрузки ядра




Опции загрузки добавляются в строке начинающейся с linux, это строка выделена на рисунке выше.




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




GRUB 2. Добавление параметров загрузки ядра
GRUB 2. Добавление параметров загрузки ядра




Дальше нажимаем 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. Работа с командной строкой




Меню GRUB 2 с несколькими системами




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




Меню GRUB 2 с несколькими системами
Меню GRUB 2 с несколькими системами




Как установить 2-е системы на один компьютер и при этом использовать загрузчик GRUB 2 мы разберём в следующей статье.




Каталог со скриптами (/etc/grub.d/)




В каталоге /etc/grub.d/ находятся специальные скрипты написанные на языке сценариев «sh«. Они выполняются при обновлении GRUB 2, то есть когда мы выполняем команду «update-grub2«.




Скрипты для Debian 11:




alex@deb:~$ ls /etc/grub.d/
00_header  05_debian_theme  10_linux  20_linux_xen  30_os-prober  30_uefi-firmware  40_custom  41_custom  README




Скрипты для Ubuntu 22.04:




alex@ubu:~$ ls /etc/grub.d/
00_header  05_debian_theme  10_linux  10_linux_zfs  20_linux_xen  30_os-prober  30_uefi-firmware  35_fwupd  40_custom  41_custom  README




Рассмотрим предназначения некоторых из них:




  • «10_linux» — отвечает за поиск ядер linux;
  • «30_os-prober» — отвечает за поиск других ос;
  • «40_custom» — позволяет добавлять свои пункты загрузки.















2021-11-13T11:31:40
Администрирование Linux