GRUB2. Загрузчик операционных систем

16.07.2023

Теги: LinuxКонфигурацияМенюНастройка

GRUB2 (GRand Unified Bootloader, большой единый загрузчик) — это кроссплатформенный загрузчик операционных систем. При старте системы может быть показано меню выбора вариантов загрузки. По умолчанию в Ubuntu 22.04 меню не показывается — система загружается сразу. В Debian 11 по умолчанию это меню появляется на 5 секунд.

Загрузчик читает конфигурационный файл /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
#

Файл /boot/grub/grub.cfg генерируется автоматически с использованием файла /etc/default/grub и файлов в директории /etc/grub.d.

Файл /etc/default/grub

Файл содержит основные настройки GRUB2, которые можно изменять, чтобы повлиять на загрузку.

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'

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="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo`
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

После редактирования нужно запустить команду, которая обновит файл /boot/grub/grub.cfg. Команда выполнит скрипты в каталоге /etc/grub.d и применит новые значения из /etc/default/grub.

$ sudo update-grub

Директория /etc/grub.d

Директория содержит скрипты, которые используются при создании /boot/grub/grub.cfg. При выполнении команды update-grub они находят все установленные на компьютере операционный системы и linux-ядра и формируют меню загрузки. Два основных из них — 10_linux и 30_os-prober — отвечают за поиск linux-ядер и остальных ОС на других разделах. Файл 40_custom позволяет добавлять свои пункты в меню загрузки.

$ ls -la /etc/grub.d
итого 156
drwxr-xr-x   2 root root  4096 июл  2 10:52 .
drwxr-xr-x 135 root root 12288 июл 16 10:44 ..
-rwxr-xr-x   1 root root 10627 дек  2  2022 00_header
-rwxr-xr-x   1 root root  6260 дек  2  2022 05_debian_theme
-rwxr-xr-x   1 root root 18683 дек  2  2022 10_linux
-rwxr-xr-x   1 root root 43031 дек  2  2022 10_linux_zfs
-rwxr-xr-x   1 root root 14387 дек 19  2022 20_linux_xen
-rwxr-xr-x   1 root root  2924 фев  6  2022 20_memtest86+
-rwxr-xr-x   1 root root 13369 дек  2  2022 30_os-prober
-rwxr-xr-x   1 root root  1372 дек  2  2022 30_uefi-firmware
-rwxr-xr-x   1 root root   700 сен 20  2022 35_fwupd
-rwxr-xr-x   1 root root   214 дек  2  2022 40_custom
-rwxr-xr-x   1 root root   215 дек  2  2022 41_custom
-rw-r--r--   1 root root   483 дек  2  2022 README

Основные параметры

Рассмотрим некоторые настройки из файла /etc/default/grub — за что они отвечают.

# Какой элемент загрузочного меню будет дефолтным, то есть выбранным изначально.
# Может быть указан номер (начиная с нуля) или полное название или строка saved.
GRUB_DEFAULT=0
# Дефолтным будет назначен тот пункт, который был выбран при прошлой загрузке.
GRUB_SAVEDEFAULT="false"
# Кол-во секунд ожидания выбора, прежде чем загрузить дефолтный элемент меню.
# По умолчанию имеет значение 5, значение 0 сразу загрузит дефолтный элемент
# меню без показа меню, значение -1 предписывает ждать бесконечно.
GRUB_TIMEOUT=5
# Если этот параметр не установлен или установлен в значение menu — будет
# показано меню на протяжении времени, заданного в GRUB_TIMEOUT. Когда
# это время истечет — будет загружен дефолтный пункт меню.
# Если этот параметр установлен в значение countdown или hidden, то перед
# показом меню будет ожидание на протяжении времени, заданного в GRUB_TIMEOUT.
# Если в это время нажать ESC/F4 или удерживать SHIFT — будет показано меню
# и будет ожидание выбора варианта загрузки.
GRUB_TIMEOUT_STYLE="menu"
# Добавить опции ядра для всех ядер, как обычных, так и режима восстановления
GRUB_CMDLINE_LINUX=""
# Добавить опции ядра только для обычных ядер. Чтобы убрать текстовые сообщения,
# нужно установить значение quiet. Чтобы увидеть изображение заставки, нужно
# установить значение splash. Можно установить две опции, например "quiet splash".
GRUB_CMDLINE_LINUX_DEFAULT=""
# Добавить опции ядра только для режима восстановления
GRUB_CMDLINE_LINUX_RECOVERY=""
# Указать адреса оперативной памяти, которые не нужно использовать
GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Использовать указанный модуль терминала: console — текстовой, gfxterm — графический
GRUB_TERMINAL=console
# Использовать указанное значение разрешения экрана, лучше использовать auto
GRUB_GFXMODE=auto
# Не включать в меню загрузки пункты восстановления
GRUB_DISABLE_RECOVERY="true"
# Не искать на компьютере другие операционные системы
GRUB_DISABLE_OS_PROBER="true"

Слудующие два параметра устарели и рекомендуется от них отказаться в пользу менее запутанного GRUB_TIMEOUT_STYLE.

# Сколько секунд ждать перед тем, как показать меню выбора вариантов загрузки.
# Если в это время нажаты клавиши ESC/F4 или удерживается SHIFT — показать меню
# и дождаться выбора варианта загрузки в соответствии с GRUB_TIMEOUT. При установке
# GRUB_HIDDEN_TIMEOUT также нужно установить GRUB_TIMEOUT=0, чтобы меню вообще
# не показывалось, пока не будут нажаты клавиши ESC/F4 или удерживается SHIFT.
GRUB_HIDDEN_TIMEOUT=0
# В сочетании с GRUB_HIDDEN_TIMEOUT может быть установлен в значение true для
# подавления подробного обратного отсчета во время ожидания нажатия клавиши.
GRUB_HIDDEN_TIMEOUT_QUIET="false"

Нумерация разделов дисков

Одной из основных особенностей GRUB2 является нумерация разделов дисков. Сами диски нумеруются с нуля (hd0, hd1 и т.д.), а вот нумерация разделов соответствует нумерации в системе и начинается с единицы (это важно помнить, так как в первой версии GRUB разделы начинались с нуля). К примеру, если есть диск /dev/sda с разделами /dev/sda1 и /dev/sda2, то он будет отображаться как hd0 с разделами hd0,1 и hd0,2.

Поиск: Linux • Конфигурация • Настройка • GRUB2 • загрузка • меню

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.