MyTetra Share
Делитесь знаниями!
Какие файлы участвуют в настройке GRUB 2? Где они располагаются?
Время создания: 09.08.2023 10:41
Текстовые метки: linux, grub, настройка, конфиг, файл, расположение
Раздел: Компьютер - Linux - Загрузчик GRUB
Запись: xintrea/mytetra_syncro/master/base/16915668967v4ml6z8cb/text.html на raw.github.com

Для настройки загрузчика GRUB 2, по-сути, используется несколько файлов.


Первый файл располагается в каталоге /boot/grub на загрузочном разделе, который используется для хранения второй части загрузчика GRUB. (Первая часть загрузчика GRUB обычно располагается в MBR или GPT жесткого диска). Обычно, полный путь к этому файлу выглядит так:



/boot/grub/grub.cfg



В этом файле, помимо настроек GRUB, находится перечень пунктов стартового меню (структуры menuentry и submenu), в которых, в частности, указывается месторасположение загружаемых ядер.



Внимание! Считается, что данный файл не предназначен для редактирования. Он всегда перегенерируется при вызове утилит управления grub-ом. Использовать этот файл следует как справочный, чтобы только смотреть, какие настройки есть у текущего grub-а.



Второй файл располагается в загружаемой операционной системе по следующему пути:



/etc/default/grub



В этом файле, в частности, находится настройка того, сколько времени будет показываться GRUB-меню (параметр GRUB_TIMEOUT) и какой пункт меню по-умолчанию будет загружаться, если пользователь никаких действий производить не будет (параметр GRUB_DEFAULT).


После внесения изменений в этот файл, для применения данных изменений, всегда необхоодимо запускать утилиту:



update-grub



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


Если говорить более подробно, то в момент выполнения update-grub, будут вызываться bash-скрипты, которые генерируют файл /boot/grub/grub.cfg. Эти скрипты находятся в каталоге /etc/grub.d (данная информация справедлива, как минимум, для Debian-подобных дистрибутивов):



> pwd

/etc/grub.d


> ls -la

drwxr-xr-x 2 root root 4096 июн 2 15:28 .

drwxr-xr-x 145 root root 12288 авг 9 08:26 ..

-rwxr-xr-x 1 root root 10046 июл 11 2021 00_header

-rwxr-xr-x 1 root root 6260 июл 11 2021 05_debian_theme

-rwxr-xr-x 1 root root 14123 авг 1 2022 10_linux

-rwxr-xr-x 1 root root 14180 авг 1 2022 20_linux_xen

-rwxr-xr-x 1 root root 12910 авг 1 2022 30_os-prober

-rwxr-xr-x 1 root root 1372 авг 1 2022 30_uefi-firmware

-rwxr-xr-x 1 root root 214 июл 11 2021 40_custom

-rwxr-xr-x 1 root root 215 авг 1 2022 41_custom



В данных скриптах подключаются библиотеки функций, например /usr/share/grub/grub-mkconfig_lib. Подключение делается через команду "точка", которая является эквивалентом команды source. В такой библиотеке могут находиться функции типа version_find_latest, которые используются внутри скриптов каталога /etc/grub.d.


Скрипт 10_linux находит в стандартных путях системы установленные в систему ядра, и формирует пункты меню GRUB для старта с каждым вариантом ядра.


Среди данных скриптов есть файл 40_custom. Его содержимое следующее:



#!/bin/sh

exec tail -n +3 $0

# This file provides an easy way to add custom menu entries. Simply type the

# menu entries you want to add after this comment. Be careful not to change

# the 'exec tail' line above



Этот скрипт устроен так, что его содержимое, начиная с 3-ей строчки, попадает в итоговый конфиг (то есть, по сути, данный скрипт распечатывает сам себя в стандартный поток, и эта распечатка попадает в конфиг). Причем в данном скрипте выполняется только первая bash-команда, которая запускается с помощью обертки exec. Эта обертка останавливает выполнение скрипта на вызванной из-под нее команде, не позволяя выполняться следующим строкам скрипта. Таким образом, содержимым всех строк, начиная с третьей, может быть любым - там могут быть не только комментарии, а вообще все что угодно.


Обычно в этот скрипт можно добавить самописный кусок конфига /boot/grub/grub.cfg, который будет вставлен в итоговый /boot/grub/grub.cfg после сгенерированных опций menuentry. Например, можно добавить дополнительные пункты стартового меню, добавив в файл 40_custom дополнительные, статически написанные пункты меню menuentry. Таким образом можно в GRUB добавлять самодельные пункты меню для загрузки кастомных ядер в любых специфичных конфигурациях.


Главное, что после внесения изменений в конфиг /etc/default/grub или в вышеуказанные скрипты, нужно не забывать запускать утилиту update-grub.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования