Загрузчик системы выполняет очень важную функцию. Он позволяет выбрать какую операционную систему стоит загружать, также инициализирует параметры ядра Linux и подготавливает его к загрузке. В большинстве дистрибутивов Linux используется загрузчик Grub. Он поддерживает все необходимые функции, в том числе и UEFI, а также очень настраиваемый.
В одной из предыдущих статей мы рассматривали установку загрузчика Grub в Linux. В этой же будет будет продолжена тема и более детально рассмотрена настройка загрузчика Grub. Мы рассмотрим как графическую настройку с помощью Grub Customizer, так и более сложный, но более гибкий вариант с помощью ручного редактирования конфигурационных файлов.
Содержание статьи
- Настройка Grub с помощью Grub Customizer
- Настройка Grub через конфигурационные файлы
- Настройка Grub через /boot/grub/grub.cfg
- Выводы
Настройка Grub с помощью Grub Customizer
Это самый легкий путь конфигурации загрузчика. Графическая программа настройки Grub Customizer позволяет настроить все основные параметры загрузчика, например, фоновое изображение, шрифт, порядок пунктов загрузки, параметры ядра и многое другое. Все это делается в пару кликов.
Программа доступна в официальных репозиториях большинства дистрибутивов, и вы можете ее оттуда легко установить. Для установки в Ubuntu выполните:
sudo apt install grub-customizer
В Fedora, Red Hat и CentOS команда будет немного отличаться:
sudo yum install grub-customizer
После завершения установки вы можете запустить программу из главного меню или в терминале:
grub-customizer
Перед тем, как программа запустится, вам нужно будет ввести пароль потому что для ее работы нужны права администратора:
Главное меню загрузится через несколько десятков секунд. Программе нужно время, чтобы собрать список операционных систем, установленных на компьютере:
В контекстном меню для каждого пункта вы можете переместить его вверх или вниз, переименовать или отредактировать его конфигурацию. С конфигурацией мы будем разбираться в другой части статьи, а первые два пункта могут быть очень полезны:
На вкладке Основные настройки вы можете выбрать пункт, который нужно загружать по умолчанию, время на протяжении которого будет показываться меню, а также параметры ядра для каждого пункта по умолчанию.
Последняя вкладка позволяет настроить внешний вид, тут вы можете выбрать одну из доступных тем, установить разрешение, или же задать пользовательские параметры цвета, шрифтов и фоновый рисунок:
Кроме того, нажав кнопку дополнительные параметры, вы можете настроить значения переменных /etc/default/grub, которые мы рассмотрим подробнее ниже.
Когда настройка Grub Customizer будет завершена просто нажмите кнопку Сохранить, чтобы применить все изменения.
Видео, где показана настройка GNU Grub в Linux с помощью Grub Customizer:
Но это все слишком просто и позволяет сделать только базовые вещи, если же нужна более тонкая настройка загрузчика Grub, придется разбираться с ручной настройкой конфигурационных файлов. Это мы и будем рассматривать ниже.
Настройка Grub через конфигурационные файлы
Сразу нужно сказать, что существует два способа настройки Grub Ubuntu, через конфигурационные файлы. Первый - через конфигурационный файл утилиты grub-mkconfig, который позволяет задать общие параметры для загрузчика и ручное редактирование /boot/grub/grub.cfg.
Первый - рекомендованный, и с помощью него можно настроить большинство параметров, в этом случае настройки не собьются, когда вы обновите ядро или загрузчик. Второй вариант еще более гибкий, но после любого обновления вы потеряете свои настройки. Так что то что можно настроить через /etc/default/grub настраиваем через него, все остальное - через /boot/grub/grub.cfg. Сначала рассмотрим первый вариант.
Настройка Grub через /etc/default/grub
Как я уже сказал, настройка загрузчика через файл /etc/default/grub, на основе которого будет автоматически создан /boot/grub/grub.cfg более желательна. Давайте рассмотрим параметры, которые вы можете здесь настроить.
- 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.
Настройка 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 - не искать в съемных носителях.
- Приметы устройства дают программе дополнительные подсказки для более быстрого поиска;
- Основной параметр - значение, по которому будем выполнять поиск.
Например, команда может выглядеть вот так:
Вторая команда, которая нам очень понадобится, это menuentry. Она используется для создания пунктов меню, с помощью которых будут загружаться операционные системы и дистрибутивы linux. Синтаксис этой команды такой:
menuentry имя_пункта {
команды установки переменных окружения
загрузка модулей
linux файл_ядра параметры_ядра
initrd файл_initrd
}
Обычно, для нормальной загрузки операционной системы сначала необходимо установить корневой раздел, для этого, возможно, нужно загрузить некоторые модули, дальше нужно запустить ядро с нужными параметрами и добавить образ initrd если это требуется. Самый простой пример пункта меню:
Теперь давайте попробуем собрать всю информацию воедино и создадим самый просто конфигурационный файл для 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, вы сможете разобраться с файлом, созданным автоматически. Пункты меню выводятся по порядку, поэтому чтобы поменять их местами будет достаточно поменять местами команды в файле. Программа настройки Grub - это хорошо, но также важно понимать как все работает на низком уровне.
Выводы
Настройка grub может показаться довольно сложной вещью, но если разобраться, то все вполне выполнимо. В этой статье мы рассмотрели несколько способов настройки загрузчика, для различных ситуаций, и я думаю, теперь у вас не возникнет проблем с этой программой. Если у вас остались вопросы, спрашивайте в комментариях!
Про burg хочу услышать.
На компе три системы: Windows, Linux Mint и OpenSuse 42.1. Ставил в этом же порядке.
При загрузке компа на первом месте OpenSuse. Поставил Grub-Customizer, первая вкладка List configuration оказалась пустой, нет списка выбора систем. Как быть?
Установите os-prober, плюс там нужно немного подождать, пока будут просканированы и обнаружены все системы.
При попытке установить os-prober у меня возникает ошибка:(
При установке os-prober ошибка. Не может найти URL.
как в статье поставить не получилось.
скачал deb-пакет тут :
https://grub-customizer.ru.uptodown.com/ubuntu/download
Спасибо!
Добавьте в блог функцию уведомлений об ошибках. Чтобы обвёл, в данном случае "defailt", нажал Ctrl+Enter и вы уже знаете, где и что исправить =)
Тут это и так работает 🙂
Статья понравилась, Спасибо. Хотелось бы почитать ещё и про Burg.
Возможно будет.
Сразу установить не удалось: не нашел в репозитории. Пришлось подключать
$ sudo add-apt-repository ppa:danielrichter2007/grub-customizer
Grub грузится в режим консоли и ждет команды.
При вводе:
configfile (hd0,3)/boot/grub/grub.cfg система стартует нормально.
Как заставить её стартовать автоматически?
Куда копать?
Мне кажется, если вошли в систему, то дальше "sudo update-grub" помогает.
Возможно ли повернуть груб для поворотных мониторов?
...$ sudo apt install grub-customizer
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
E: Не удалось найти пакет grub-customizer
почему убрано из реп?
Надо выполнить следующие команды:
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer
Спасибо за интересную статью, а можно объяснить как включить в меню загрузки GRUB вновь установленную ОС семейства UNIX? Т.е. у меня, допустим установлены на данный момент Win 10 и Linux Debian на разных физических дисках. Win 10 загружаю из меню Debian. А если я установлю ещё один дистрибутив Linux, то как тогда сделать чтобы все три ОСи были в одном меню?
Задолбался искать, как установить Grub Customizer в Debian 9!!! В CentOS, Felora, Mint и Ubuntu НЕТ НИ КАКИХ ПРОБЛЕМ СТАВИТСЯ С РАЗБЕГУ!!! А в Debian сподобился лицезреть только сообщение "Этот пакет установить не удалось" и так уже несколько лет. Все пишут, что проблем в Debian нет, ну так, НЕ ВЫЁЖИВАЙТЕСЬ, А ПОДСКАЖИТЕ, КАК ЕГО РЕАЛЬНО УСТАНОВИТЬ!!!!!
Для установки grub-customizer в LMDE 3 необходимо:
- установить libssl1.0.0_1.0.1t-1+deb8u9_amd64.deb для архитектуры AMD64 (в моём случае я установил deb-пакет отсюда https://packages.debian.org/jessie/amd64/libssl1.0.0/download);
- а далее в терминале выполнить эти команды:
$ wget http://ppa.launchpad.net/danielrichter2007/grub-customizer/ubuntu/pool/main/g/grub-customizer/grub-customizer_5.0.6-0ubuntu1~ppa1z_amd64.deb
$ sudo apt install gdebi
$ sudo gdebi grub-customizer_5.0.6-0ubuntu1~ppa1z_amd64.deb
спасибо, Ваш ответ помог
Спасибо, очень познавательно. Стоит Win7+LinuxMint18.2. После переустановки Win7 (и, разумеется, восстановления GRUB) не меняется TIMEOUT меню выбора ОС. Постоянно 30с. Менять пробовал в etc/default/grub и программой Grub Customizer. Пожалуйста, как быть? Спасибо.
Как сделать в заргузке меню, чтобы в первую очередь запускалась винда, а не центос?
Всем привет. Я установил Центос7 рядом с виндой 8.1. сначала у меня была проблема, что после успешной установки Центоса в меню загрузчика был только сам Центос, а Винды нету. Надо было вернуть в меню загрузчик, винду 8.1. Вернул с горем пополам так:
sudo vim /boot/grub2/grub.cfg
menuentry "Windows 8" {
set root='(hd0, 1)' #тут регулировал вторую цифру благодаря советам Как восстановить Windows 8.1?
chainloader +1
}
Винду в меню загрузки видел, и запускался нормально. Только теперь появилась другая проблема, я хочу чтобы запускалась первой не Центос 7, а винда 8.1, ну и конечно же выбор ОС чтобы остался))). Вопрос, как это можно сделать?
Дополнение к тому что я пробовал делать, (Гугл):
1) grub-customizer, не видел этой команды, и даже от рута не смог установить его, не может найти эту установку.
2) update-grub - не работает. пишет что то типо того: bash: update-grub команда не найдена.
3) что делать дальше не знаю. Рассчитываю на вашу помощь
Спасибо, за статью. Хорошо помогла. Хотел, чтобы первой грузилась Windows, перепробовал разные цифры в GRUB_DEFAULT: и 7, и 3, и 4. Получилось! (Ubuntu 20.04 LTS):
GRUB_DEFAULT=4
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=3
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
автономный пакет для mint 18.хх
grub-customizer_5.0.6-0ubuntu1~ppa1x_amd64.deb
записи в его редакторе для windows 7 и XP выглядят так:
************************
insmod part_msdos
insmod ntfs
set root='hd0,msdos4'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos4 --hint-efi=hd0,msdos4 --hint-baremetal=ahci0,msdos4 58F6DA6BF6DA4940
else
search --no-floppy --fs-uuid --set=root 58F6DA6BF6DA4940
fi
parttool ${root} hidden-
chainloader +1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
insmod part_msdos
insmod fat
set root='hd0,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5 D8B1-D1DF
else
search --no-floppy --fs-uuid --set=root D8B1-D1DF
fi
parttool ${root} hidden-
drivemap -s (hd0) ${root}
chainloader +1
id для разделов дисков естессно надо ставить свои
Файл /etc/boot/grub/grub.cfg управляет непосредственно работой загрузчика
Не смог найти такой файл, беда.
Вот тоже ситуация. Не бывает худа без добра. Месяц назад на ноуте слетел Win7. Решил отжать 40 Гб диска из первого раздела, поставил любимую XUbuntu. Потом нашёл таки годовалый образ Win7, восстановил. Но XUbuntu оставил. Вспомнил про grub-customizer. Отсортировал загрузку на вкус, во вкладке "Настройки оформления" изменил цвета. Есть у меня красивая картинка, поставил фоном на GRUB. Всё было шоколадно. Только три дня назад и сам жесткий диск накрылся.
Взял новый, повторил ту же операцию: Win7, XUbuntu, grub-customizer. Тут закавыка: перегружаюсь - меню, как задумано, а фона нет и цвета стандартные. Пол дня бился - ни в какую.
Решил по другому (картинка лежит в "/boot/grub/"): в терминале "$ sudo update-grub". Фон подцепился, а цвета - нет. В "/boot/grub/grub.cfg" ручками переписал
set color_normal=blue/black
set color_highlight=magenta/black
Заработало. Но вопрос остался на будущее: почему grub-customizer задурковал? Ни картинку, ни цвета не захотел менять?...
А Фёдору и минт можно в один grub засунуть?
А как сделать дополнительный пункт меню, переживающий переконфиг и смену ядра? Суть следующая:
1. В обычном режиме дискретная видяха и usb захватывается vfio для проброса в виртуалки (хост живёт на встройке). Нужен соответствующий пункт меню.
2. Если я хочу поработать на хосте напрямую, то происходит обычная загрузка, встройка игнорируется (скармливается vfio). Нужен соответствующий пункт меню.
Эти пункты должны идти первыми двумя, переживать смену ядер и автоматический переконфиг grub.cfg. Вот, в раздумьях, как сделать.
Добрый день!
Подскажите, как сохранить изменения в файле /boot/grub/grub.cfg ?
Меняю название ОС в пункте menuentry, но изменение не сохраняется.
В каком из файлов можно поменять названия пунктов меню?