# Конфигурация GRUB ## Настройка Grub с помощью Grub Customizer Это самый простой путь конфигурации загрузчика. Графическая программа настройки *Grub Customizer* позволяет настроить все основные параметры загрузчика, например, фоновое изображение, шрифт, порядок пунктов загрузки, параметры ядра и многое другое. Программа доступна в официальных репозиториях большинства дистрибутивов. Для установки в Debian выполните: ``` sudo apt update sudo apt install grub-customizer -y ``` Последующий запуск осуществляется через главное меню или из консоли вводом команды: ``` grub-customizer ``` После внесения через программу Grub Customizer всех желаемых изменений, нажмите кнопку "Сохранить" и утилита автоматически сгенерирует обновленный файл конфигурации GRUB.
_Примечание_: После сохранения выполненных изменений, чтобы увидеть обновленное меню GRUB небходимо перезагрузить систему. Если изменения внесенные через Grub Customizer не видны после перезагрузки, выполните следующую команду, чтобы вручную обновить GRUB: ``` sudo update-grub ```
Программа Grub Customizer позволяет изменять только базовые параметры, если же нужна более тонкая настройка загрузчика Grub, это необходимо делать посредством ручной настройки конфигурационных файлов. ## Настройка Grub через конфигурационные файлы Существует два способа настройки Grub через конфигурационные файлы. - Через конфигурационный файл `/etc/default/grub` утилиты *grub-mkconfig*, который позволяет задать общие параметры для загрузчика - Через ручное редактирование `/boot/grub/grub.cfg` Первый способ - рекомендованный, и с помощью него можно настроить большинство параметров, и в этом случае настройки не собьются когда вы обновите ядро или загрузчик. Второй гораздо более гибкий, но после любого обновления вы потеряете свои настройки. Поэтому если что-то можно настроить через `/etc/default/grub` то настраиваем через него, все остальное - через `/boot/grub/grub.cfg `. ### Настройка Grub через редактирование файла /etc/default/grub Список параметров, которые можно настроить данным способом: - GRUB\_DEFAULT - указывает какой пункт нужно загружать по умолчанию. Может быть указан номер, или полное название или же строка saved, которая значит, что нужно загрузить пункт, указанный с помощью grub-reboot; - GRUB\_SAVEDEFAULT - загружать последнюю использованную запись по умолчанию; - GRUB\_HIDDEN\_TIMEOUT - сколько секунд ждать перед тем, как вывести меню; - GRUB\_HIDDEN\_TIMEOUT\_QUIET - если установлено true, то меню не будет показано; - GRUB\_TIMEOUT - сколько секунд будет показано меню; - GRUB\_CMDLINE\_LINUX - добавить опции ядра для всех ядер, как обычных, так и режима восстановления; - GRUB\_CMDLINE\_LINUX\_DEFAULT - добавить опции ядра только для обычных ядер; - GRUB\_CMDLINE\_LINUX\_RECOVERY - опции ядра, только для режима восстановления; - GRUB\_BADRAM - указать адреса оперативной памяти, которые не нужно использовать; - GRUB\_TERMINAL - модуль терминала для Grub. Можно использовать console только для текстового режима или gfxterm с поддержкой графики; - GRUB\_GFXMODE - разрешение экрана в Grub, лучшие использовать auto, чтобы система выбрала сама то что ей нужно. - GRUB\_DISABLE\_RECOVERY - не включать в меню пункты восстановления; - GRUB\_DISABLE\_OS\_PROBER - не искать другие операционные системы; - GRUB\_BACKGROUND - адрес картинки для фона, должна находиться в той же папке что и файлы grub; - GRUB\_THEME - устанавливает тему Grub. Пример стандартного конфигурационного файла: ``` GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" ``` Здесь: - GRUB\_DEFAULT=0 — загружается первая запись в меню GRUB.\\ - GRUB\_TIMEOUT=5 — пауза в секундах перед автозагрузкой.\\ - GRUB\_CMDLINE\_LINUX\_DEFAULT="quiet splash" — параметры, которые передаются ядру (по умолчанию он загружается без лишнего вывода).\\ - GRUB\_CMDLINE\_LINUX — дополнительные параметры, которые работают во всех режимах. После внесения изменений в файл `/etc/default/grub` для обновления непосредственного конфигурационного файла загрузчика GRUB (т.е. файла `/boot/grub/grub.cfg`) необходимо выполнить команду: ``` sudo update-grub ```
Примечание: Если при обновлении GRUB возникает ошибка, например: "sudo: update-grub: command not found", это означает, что команда `update-grub` не является стандартной, а является псевдонимом и выполняет вместо себя команду `sudo grub-mkconfig -o /boot/grub/grub.cfg` в данном случае необходимо выплонить указанную команду непосредственно.
### Настройка Grub через /boot/grub/grub.cfg Файл `/etc/boot/grub/grub.cfg` управляет непосредственно работой загрузчика, здесь указаны все его параметры и настройки, а также сформировано меню. Изменяя этот файл можно настроить Grub как угодно. Синтаксис файла напоминает синтаксис bash и состоит из нескольких команд, которые что-то делают, загружают и настраивают. Команды могут быть объединены в функции или блоки с помощью инструкций if else, синтаксис которых аналогичен bash. Основные из этих команд: * **load\_env** - загрузить переменные окружения из файла; * **set** - установить значение переменной окружения. Используется как `set имя_переменной=значение`; * **insmod** - загрузить модуль из папки с модулями Grub; * **linux** - загружает ядро Linux; * **initrd** - подготавливает образ initrd для загрузки ядра; * **boot** - пытается загрузить систему; * **chainloader** - запускает загрузчик из другого раздела; * **search** - установить значение переменной выполнив поиск по заданным параметрам, например, может найти диск по его UUID или метке; * **menuentry** - позволяет создать пункт меню; Поскольку на практике наиболее часто используются последние две команды рассмотрим их подробно: Команда **search** используется для поиска дисков и имеет такой синтаксис: ``` $ search опции_поиска --set=имя_переменной --hint приметы_устройства основной_параметр ``` здесь: * **опции\_поиска** - задают по какому критерию нужно искать, например, **--fs-uuid** - искать по UUID, **--label** - по метке, **--no-floppy** - не искать в съемных носителях. * **приметы устройства** - дают программе дополнительные подсказки для более быстрого поиска; * **основной параметр** - значение, по которому будем выполнять поиск. Например, команда может выглядеть вот так: ``` $ search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint='hd0,msdos5' c52ca066-e48f-4df2-bc7e-4d885a354090 ``` Команда **menuentry** используется для создания пунктов меню, с помощью которых будут загружаться операционные системы и дистрибутивы linux. Синтаксис этой команды такой: ``` menuentry имя_пункта { команды установки переменных окружения загрузка модулей linux файл_ядра параметры_ядра initrd файл_initrd } ``` Для нормальной загрузки операционной системы сначала необходимо установить корневой раздел, для чего, возможно, нужно загрузить некоторые модули, дальше нужно запустить ядро с нужными параметрами и добавить образ initrd если это требуется.\\ Поэтому самый простой пример пункта меню будет такой: ``` menuentry "Ubuntu" { set root=(hd0,1) linux /casper/vmlinuz boot=casper noeject noprompt splash initrd /casper/initrd.lz } ``` #### Пример самого просто конфигурационного файла /boot/grub/grub.cfg для Grub созданного вручную ``` # Время показа меню загрузчика GRUB 5 секунд set timeout=5 # Устанавливаем разрешение экрана и указываем что это же разрешение нужно сохранять для ядра: set gfxmode="1280x800" set gfxpayload=keep # Загружаем модули необходимые для работы видео режима, это нужно для использования фоновой картинки insmod vbe insmod gfxterm terminal_output gfxterm # Устанавливаем шрифт с поддержкой Unicode: font "/boot/grub2/fonts/unicode.pf2" loadfont unicode # Загружаем модуль работы с jpeg и задаём фоновый рисунок: insmod jpeg background_image "/boot/fon.jpg" # Устанавливаем переменные окружения для настройки цвета меню: set menu_color_normal=red/black set menu_color_highlight=yellow/black set color_normal=yellow/black # Пункты меню для операционных систем: menuentry "Ubuntu" { root=(hd0,1) linux /casper/vmlinuz boot=casper noeject noprompt splash initrd /casper/initrd.lz } menuentry "OpenSUSE" { insmod gzio insmod part_msdos insmod ext2 set root='hd0,msdos5' linux /boot/vmlinuz-4.1.31-30-default root=UUID=c52ca066-e48f-4df2-bc7e-4d885a354090 resume=/dev/sda7 splash=silent quiet showopts initrd /boot/initrd-4.1.31-30-default } ``` Если знать как примерно выглядит конфигурационный файл Grub, то можно разобраться и с файлом, созданным автоматически. Например - пункты с указанием ОС в меню выводятся по порядку, поэтому чтобы поменять их местами будет достаточно поменять местами команды в файле. {{tag>grub}}