Это старая версия документа!
# Конфигурация 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 ` g ### Настройка 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=«1280×800» 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, то можно разобраться и с файлом, созданным автоматически. Например - пункты с указанием ОС в меню выводятся по порядку, поэтому чтобы поменять их местами будет достаточно поменять местами команды в файле.
