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 • загрузка • меню