Введение в GRUB 2

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

Понимание GRUB 2

Загрузчик GRUB 2 гарантирует, что вы можете загрузить Linux. GRUB 2 установлен в загрузочном секторе  диска сервера и настроен для загрузки ядра Linux и initramfs.

initramfs содержит драйверы, необходимые для запуска системы. Он содержит мини-файловую систему, которая монтируется во время загрузки. В нем находятся модули ядра, которые необходимы во время остальной части процесса загрузки (например, модули LVM и модули SCSI для доступа к дискам, которые не поддерживаются по умолчанию).

Обычно GRUB 2 работает просто отлично и не требует особого обслуживания. Однако в некоторых случаях может потребоваться изменить его конфигурацию. Чтобы применить изменения к конфигурации GRUB 2, отправной точкой является файл /etc/default/grub. В этом файле вы найдете параметры, которые сообщают GRUB, что делать и как это делать.

[root@server2 ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

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

Помимо конфигурации в /etc/default/grub, в /etc/grub.d есть несколько файлов конфигурации. В этих файлах вы найдете довольно сложный код оболочки, который сообщает GRUB, что загружать и как его загружать. Как правило, вам не нужно изменять его. Вам также не нужно ничего менять, если вы хотите, чтобы во время загрузки можно было выбирать из разных ядер. GRUB 2 автоматически подбирает новые ядра и автоматически добавляет их в меню загрузки, поэтому вручную добавлять ничего не нужно.

На основе файлов конфигурации, упомянутых ранее, создается основной файл конфигурации /boot/grub2/grub.cfg. Даже если это выглядит как файл конфигурации, который можно изменить вручную, вы никогда не должны этого делать, потому что в какой-то момент он будет перезаписан. Это произойдет, например, после обновления ядра. RPM, с которого обновляется ядро, запускает сценарий после установки, который восстанавливает ядро.

Если вы введете приглашение загрузки GRUB 2 для добавления параметров запуска ядра, отобразится содержимое файла /boot/grub2/grub.cfg. Отсюда вы добавляете одноразовые параметры запуска. Ниже показана соответствующая часть файла grub.cfg, которая заботится о загрузке ядра Linux. Обратите внимание на строку, начинающуюся с linux16; эта строка указывает все параметры загрузки ядра.

menuentry 'CentOS Linux (3.10.0-229.1.2.el7.x86_64) 7 (Core)' --class
centos --class gnu-linux --class gnu --class os --unrestricted
$menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-50faa2a1-
01d3-430b-8114-4a98daf5bdb9' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1
--hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'
057ba3d8-bfe7-4676-bb99-79e9980a1966
else
search --no-floppy --fs-uuid --set=root 057ba3d8-bfe7-4676-bb99-
79e9980a1966
fi
linux16 /vmlinuz-3.10.0-229.1.2.el7.x86_64 root=/dev/mapper/
centos-root ro rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16
rd.lvm.lv=centos/root crashkernel=auto vconsole.keymap=us rhgb quiet
LANG=en_US.UTF-8
initrd16 /initramfs-3.10.0-229.1.2.el7.x86_64.img
}

Одним из наиболее важных различий между GRUB 2 и его предыдущей версией является наличие модулей GRUB 2. В GRUB 2 доступно большое количество модулей. По умолчанию вы можете найти их в /boot/grub2/i386-pc. Модули определяют, что вы можете и что не можете делать из загрузчика GRUB 2. Если какое-либо оборудование или файловая система не поддерживаются в том, что вы хотите сделать, проверьте здесь, чтобы убедиться, что доступен поддерживающий модуль GRUB 2.

Изменение загрузочных опций по умолчанию в GRUB 2

Чтобы применить изменения к загрузчику GRUB 2, файл /etc/default/grub является вашей точкой входа; не изменяйте содержимое файла конфигурации /boot/grub2/grub.cfg напрямую. Самая важная строка в этом файле - GRUB_CMDLINE_LINUX, которая определяет, как должно запускаться ядро Linux. В этой строке вы можете применить постоянные исправления к конфигурации GRUB 2. Некоторые вероятные кандидаты на удаление - варианты rhgb и quiet. Эти параметры указывают ядру скрывать весь вывод при загрузке. Это хорошо, чтобы скрыть непонятные сообщения для обычных пользователей.



Еще один интересный параметр - GRUB_TIMEOUT. Он определяет количество времени, в течение которого сервер ожидает доступа к загрузочному меню GRUB 2, прежде чем он автоматически продолжит загрузку. Если это не физический сервер, который проходит длительные проверки BIOS, может быть интересно немного увеличить это время.

При работе с GRUB 2 вам так же нужно немного узнать об аргументах загрузки ядра. Их много, и большинство из них вы никогда не будете использовать, но полезно знать, где их можно найти. Введите man 7 bootparam для man-страницы, которая содержит отличное описание всех параметров загрузки, которые вы можете использовать при запуске ядра.

И напоследок пример с GRUB 2

В этом примере удалим rhgb и quiet boot, а так же изменим время в параметре GRUB_TIMEOUT на 10.

Открываем файл 
[root@server2 ~]# vi /etc/default/grub
Изменяем параметры и сохраняем его.

Теперь нам надо записать изменения в /boot/grub2/grub.cfg
[root@server2 ~]# grub2-mkconfig > /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-957.27.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.27.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-957.21.3.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.21.3.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-4e17581a2d8640969c8c0b630dd9783c
Found initrd image: /boot/initramfs-0-rescue-4e17581a2d8640969c8c0b630dd9783c.img
done

Теперь перезагрузите сервер и посмотрите изменения.
+ +3 -

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