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

GRUB 2

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

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

GRUB 2 Меню для Debian 10
GRUB 2 Меню для Debian
GRUB 2 Меню для Ubuntu 20.04
GRUB 2 Меню для Ubuntu

Хотя, по умолчанию в Ubuntu 20.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 20.04 и Debian 11 настройки по умолчанию немного отличаются. Ниже я вывожу содержимое файлов без комментариев.

Для Debian 11:

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

alex@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=""

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

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

  • 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-11:~$ su -
Пароль:

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

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

alex@ubuntu:~$ sudo update-grub2

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

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

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

alex@ubuntu:~$ sudo cp ./linux2.png /boot/grub/

alex@ubuntu:~$ sudo update-grub2
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found background image: linux2.png
Found linux image: /boot/vmlinuz-5.4.0-90-generic
Found initrd image: /boot/initrd.img-5.4.0-90-generic
done

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

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

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

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

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

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

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

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

Дальше нажимаем Ctrl+x или F10 для загрузки и попадаем в систему под пользователем root, без ввода пароля.

Осталось только поменять пароль и перезагрузить сервер.

Командная строка GRUB 2

Чтобы попасть в командную строку нажимаем клавишу “c”. Рассмотрим пока только две команды:

  • ls — позволяет просматривать файлы на файловой системе, а также блочные устройства;
  • search — позволяет производить поиск.

Если выполнить ls без параметров, то отобразятся блочные устройства, ниже мы видим диски и разделы на этих дисках:

Командная строка GRUB 2

Указав раздел получим информацию о нем:

Командная строка GRUB 2

Указав / после раздела увидим каталоги и файлы в корне на разделе:

Командная строка GRUB 2

Можно указывать путь до конкретной папочки:

Командная строка GRUB 2

С помощью search можно искать раздел, на котором находится файл:

Командная строка 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-11:~$ 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 20.04:

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *