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