GRUB — загрузчик системы

GRUB (GRand Unified Bootloader 1) ) — программа-загрузчик операционных систем.
GRUB является эталонной реализацией загрузчика, соответствующего спецификации Multiboot и может загрузить любую совместимую с ней операционную систему. Среди них: Linux, FreeBSD, Solaris и многие другие. Кроме того, GRUB умеет по цепочке передавать управление другому загрузчику, что позволяет ему загружать Windows (через загрузчик NTLDR), MS -DOS, OS /2 и другие системы.
После настройки GRUB пользователь при включении компьютера видит список операционных систем, которые установлены на его компьютер и которые можно загрузить, выбрав подходящую и нажав Enter .
GRUB позволяет пользователю при загрузке задавать произвольные параметры и передавать их в ядро Multiboot-совместимой ОС для дальнейшей обработки.
GRUB — самый популярный загрузчик в мире Linux и является загрузчиком по умолчанию в большинстве известных дистрибутивов.
Первые шаги
При первом сравнении GRUB со старым GRUB Legacy самым весомым различием оказывается измененная структура файлов конфигурации.
Настройка GRUB производится теперь принципиально иным способом — основным файлом конфигурации является «/boot/grub/grub.cfg«. Однако же, не торопитесь править его так, как привыкли это делать с «menu.lst» в GRUB Legacy. При внимательном прочтении мы видим в начале файла «grub.cfg» такие строки:
И об этом нас предупреждают не просто так. Ведь «grub.cfg» генерируется автоматически с использованием нескольких скриптов. Поэтому после следующего обновления GRUB ваш «grub.cfg» будет создан заново, и все ваши правки будут утрачены.
Кроме файла «grub.cfg», отвечающего за загрузочное меню, имеются файл «/etc/default/grub» и папка «/etc/grub.d«. Рассмотрим их подробнее.
/etc/default/grub
Данный файл содержит в себе основные настройки для GRUB. Через него, собственно, они и изменяются. Для наглядности ниже приводится примерное содержимое этого файла:
Файл представляет из себя набор опций в понятном формате ОПЦИЯ=ЗНАЧЕНИЕ.
Наиболее часто встречающаяся потребность при настройке GRUB — изменение стандартного пункта загрузки и/или времени показа меню. Рассмотрим же, как это делается.
Изменение стандартного пункта загрузки
По умолчанию стандартный пункт (выделенный при показе меню) — верхний в списке. После установки Ubuntu она окажется наверху, а Windows, например, будет последним пунктом.
Значением «GRUB_DEFAULT» является номер пункта меню, который должен быть выбран стандартным. Чтобы выбрать другой пункт, нам нужно узнать, каким по счету он будет в списке. Есть два варианта:
Пятому сверху пункту будет соответствовать значение 4, второму — 1, первому — 0. В вышеприведенном примере установлено значение 6, то есть стандартным задан седьмой пункт меню.
Или же можно указать значение идентификатора (id), оно должно быть именно таким, каким мы его видим в «/boot/grub/grub.cfg«. Данный способ удобен тем, что после обновления ядра не придется изменять настройки из-за сбившейся нумерации.
Пример
Если в «grub.cfg» пункт меню выглядит так:
То значение параметра «GRUB_DEFAULT» должно указываться именно в виде:
Изменение времени отображения меню
По умолчанию меню загрузки отображается 10 секунд (при наличии других установленных ОС, если система одна — GRUB по умолчанию не отображается и сразу начинает загрузку), после чего загружается стандартный пункт, если раньше не нажат Enter или не выбран другой пункт, что останавливает таймер. За эту задержку отвечает параметр «GRUB_TIMEOUT», значение задается в секундах.
Обратите внимание, что цифра указывается в кавычках. В нашем примере это значение — 2, то есть меню отображается две секунды.
"Скрытое" меню
В случае, если на компьютере установлена только Ubuntu, меню загрузки по умолчанию не будет отображаться, а GRUB будет загружать вас напрямую в систему. Однако же, иногда может возникнуть необходимость загрузиться с другим ядром или же запустить проверку памяти. Для этого предусмотрено «скрытое меню» за него отвечает параметр «GRUB_HIDDEN_TIMEOUT».
В случае, когда установлены другие ОС, этот параметр закомментирован (# в начале строки). Данное значение позволит приостановит загрузку на заданное количество секунд, давая пользователю возможность вызвать меню загрузки, нажав Esc .
Параметр «GRUB_HIDDEN_TIMEOUT_QUIET» отвечает за отображение таймера во время паузы. Если его значение «true» таймер отображаться не будет, а со значением «false» будет.
Чтобы GRUB отображал меню со списком установленных операционных систем, без нажатия клавиш вызова меню (например Shift или Esc ) необходимо:
Убираем подменю
Чтобы раскрыть все меню используем такой параметр:
Это бывает нужно если хотим загружаться не с первой строчки.
Особые случаи
Поведение меню отличается от заданного переменными GRUB_TIMEOUT и GRUB_HIDDEN_TIMEOUT когда предыдущая загрузка не завершилась успехом или предыдущаяя загрузка происходила в режиме восстановления. Подробно это описано далее, в разделе «Защита от зацикливания на перезагрузке». Полную справку по параметрам файла настроек можно дав команду:
Изменение стандартных параметров загрузки ядра
Иногда бывает необходимо загружать ядро системы с какими-либо особыми параметрами (например, для корректной работы специфического оборудования). В этом случае весьма полезен будет параметр «GRUB_CMDLINE_LINUX_DEFAULT» он отвечает за те параметры, с которыми запускаются ядра при загрузке. Его значение по умолчанию — «quiet splash»: происходит показ графической заставки при запуске системы без отображения какой-либо текстовой информации.
Вы можете добавить необходимые вам параметра запуска ядра, приведя это значение к виду «quiet splash your_param1 your_param2», то есть дописав через пробел нужные параметры.
Пример
Чтобы заменить графическую заставку во время загрузки на информацию о загрузке компонентов системы (это позволит проследить за процессом загрузки и выявить неполадки). Необходимо заменить строчку:
/etc/grub.d
Эта папка содержит в себе скрипты, которые используются для создания файла «grub.cfg». При обновлении GRUB они находят все установленные на компьютере системы и ядра и формируют в файле «grub.cfg» меню загрузки, которое мы и видим. Два основных из них:
Пример
Добавляем режим загрузки без графической заставки, с текстовым отображением процесса загрузки (verbose mode). Для этого мы немного отредактируем обычный пункт загрузки. допустим, он выглядит так (в «/boot/grub/grub.cfg«):
Для того, чтобы сделать из этого verbose mode, нам нужно убрать опции quiet и splash и изменим название самого пункта. В итоге получаем:
Все это и добавляем в «40_custom» в конец файла. Строка с echo не является обязательной она лишь будет сигнализировать нам о том, что наш пункт найден и добавлен при обновлении GRUB.
Команды консоли GRUB
Чтобы попасть в консоль, нужно нажать клавишу C во время отображения меню загрузки.
Довольно универсальная команда при использовании в чистом виде выдает список жестких дисков и разделов. Также она может быть использована как одноименная команда в Linux — для вывода содержимого папки. например:
Еще одно полезное свойство комадны «ls» — она позволят получить информацию о любом разделе:
Команда сообщит нам тип файловой системы на разделе, метку раздела (если таковая имеется), UUID и дату последнего изменения данных на разделе (в формате UTC).
Данная команда выводит содержимое заданного файла, используется в формате:
linux
Аналог команды «kernel» в GRUB Legacy. Загружает указанное Linux-ядро:
initrd
Загружает указанный initrd-образ. Используется так:
chainloader
Передает управление загрузкой по цепочке другому загрузчику (загрузчик ищется на заданном в качестве root разделе). В общем случае требует указания файла для загрузки:
Для (загрузчика Windows) можно использовать:
При использовании без параметров сообщает, какой раздел сейчас используется в качестве корневого и тип файловой системы на этом разделе, также команда может быть использована для задания другого root-раздела. Раздел задается в «grub device» — формате »(hd*,*)«. например:
После задания раздела команда сообщит новый root-раздел и тип файловой системы. Примечание: «root hd(*,*)» не всегда корректно срабатывает. более предпочтительным вариантом является «set root» (см. ниже)
Весьма универсальная команда для изменения различных параметров. Служит для задания значений переменных и используется в формате:
Наиболее необходимое ее применение — для задания root-раздела, например:
Также с ее помощью можно, например, «на лету» изменить цвет текста в меню и консоли, что позволяет опробовать цветовую схему перед установкой ее в качестве основной. Для этого изменяем переменные «color_normal» — для обычного пункта (и текста в консоли) и «color_highlight» для выделенного пункта соответственно. Например, попробуем такой вариант:
search
Служит для поиска раздела по UUID, метке или заданному файлу. Имеет следующие ключи:
lsfonts
Команда отобразит список загруженных в настоящий момент шрифтов.
При использовании в чистом виде выведет список доступных команд. В формате:
Выведет справку по всем командам, начинающимся на «r».
Отобразит справку по команде «search»
reboot
background_image
Позволяет «на лету» изменить фоновое изображение. Используется в формате:
Дает замечательную возможность посмотреть на выбранную картинку в действии, избегая лишних перезагрузок. В сочетании с заменой цветов через set позволит довольно быстро подобрать подходящий вариант оформления.
При использовании без параметров сбросит текущее фоновое изображение. Однако, заданные цвета останутся, так что если у вас черный цвет текста — на черном фоне вы его не увидите.
terminal_output.console
Позволяет переключиться на обычную черно-белую цветовую гамму. Весьма полезно при работе с консолью в том случае, если у вас установлено фоновое изображение. Картинка на фоне — это, конечно, красиво, но на некоторых участках фона может быть не виден текст.
Применение изменений
После того, как мы отредактировали и сохранили наши файлы. Нужно закончить дело, обновив файл «grub.cfg». Это довольно просто — нужно всего лишь выполнить команду:
После этого смело перезагружаемся и видим, что все работает как надо.
Нюанс с нумерацией дисков и разделов
В GRUB имеется еще одно важное отличие от старого GRUB Legacy, а именно изменилась нумерация разделов диска. Нумерация дисков идет с нуля, а нумерация разделов — с единицы!
Если в GRUB Legacy первый раздел первого диска (sda1) именовался «hd0,0». То в GRUB, первый раздел первого диска (sda1) теперь будет «hd0,1».
Создание дополнительного меню загрузки
Суть в том, что вместо уже знакомого «grub.cfg» можно загрузить свой файл настройки загрузочного меню со своей конфигурацией. Это позволяет создать дополнительное меню с другими пунктами, настройками, оформлением и т.д. Итак, создадим наш новый файл конфигурации. Создавать с нуля не будем, а скопируем «grub.cfg», дав новое имя:
Поскольку файл скопируется с правами 444, выставим ему права на запись:
Теперь открываем его в любимом текстовом редакторе и изменяем:
Для задания фонового изображения найдем строку с if background_image (подразумевается, что в вашем «grub.cfg» используется фоновое изображение. Если нет — смотрите пример файла в конце раздела). После команды background_image прописан путь к файлу картинки, поменяйте его на нужный файл.
Строкой ниже мы можем задать цвета текста. Изменяются они так же, как и в »/etc/grub.d/05_debian_theme« (см. Настройка внешнего вида загрузчика GRUB). Можно проделать один интересный трюк: уберите строки с set color_highlight и else теперь настройка будет такой:
Закончив с настройкой, перейдем к пунктам меню, они идут ниже. Измените их, удалите ненужные и добавьте новые, пересортируйте на свой вкус.
Настроив свой файл, сохраните его Ctrl + Shift и закройте.
Теперь необходимо добавить дополнительное меню. Для этого в файле »/etc/grub.d/40_custom« добавим запись такого вида:
Если ваш путь к файлу отличается — исправьте его.
Если вы хотите, чтобы ваше новое меню загружалось вместо стандартного «grub.cfg», установите новый пункт в качестве пункта по умолчанию, но перед этим проверьте новое меню на работоспособность.
Обновите свой «grub.cfg» выполнив команду:
В качестве образца пример файла «custom.cfg» (файл урезан до необходимого минимума):
Защита от зацикливания на перезагрузке
Если загрузка ОС не закончилась успешно, или осуществлялась загрузка в режим восстановления, то при следующей загрузке — меню выбора GRUB будет выводится и ждать явного вмешательства оператора (так же, как если бы вы выставили GRUB_TIMEOUT=-1). При этом последующие аппаратные сбросы системы — не помогут проскочить меню.
Зачем это сделано
При загрузке в лог файлы пишется информация и размеры логов растут. В нормально загруженной систем работают сервисы, которые архивируют и подчищают логи. В нормально работающей системе постоянно пополнение лог-файлов не требует внимания со стороны пользователя.
Совсем иная ситуация при загрузке — никакие сервисы по очистке логов не работают (они запускаются позже) и, если, в процессе загрузки система свалится и начнет перезагружаться, то лог будет только расти. И расти он будет до тех пор пока будут повторятся перезагрузки, и будет хватать места на том разделе диска, где расположен каталог /var/log. А когда на разделе с /var/log место кончится то система зависнет уже наглухо и даже в режим восстановления ее будет не загрузить. Загрузится можно будет только с LiveCD/USB (с Live системы и надо будет лечить систему, первым делом руками зачистив логи).
Защита встроенная в GRUB не позволит системе попасть в столь тяжелое положение.
А что если.
Функция (как видно) — безусловно полезная, однако она может быть неудобной для без-клавиатурных станций — на них «зависшее» меню GRUB-а — это не преимущество, а некоторые сложности (без подключения клавиатуры такая станция, попавшая в меню GRUB, никогда не загрузится вообще).
А что если отключить?
Собственно сами случаи, когда циклится загрузка — не так и часты, если машина работает без графики то там вообще мало чему падать на этапе загрузки, да еще так, что бы система вышла на перезагрузку. Разве что совсем кривой прикладной софт встроенный в процесс загрузки…
Гораздо чаще загрузка прерывается из за внешних условий — например пропадает питание, или кто-то сбрасывает грубо систему.
Отключаем.
Как это работает
Реализовано все достаточно просто — в скрипте /boot/grub/grub.cfg переменная окружения GRUB recordfail устанавливается в ходе каждой загрузки в 1. Скрипт /etc/init.d/grub-common запускается на финальных этапах загрузки (линки с именем S99grub-common есть в /etc/rc2.d, /etc/rc3.d, … /etc/rc5.d). grub-common сбрасывает переменную recordfail в 0. Если скрипт /etc/init.d/grub-common не отработает, то не сброшенное значение recordfail предотвращает автоматическую загрузку, меню GRUB появляется и потребуется явное интерактивное вмешательство со стороны оператора.
Для того, что бы убрать необходимость интерактивного вмешательства в процесс загрузки нужно установить переменную GRUB_RECORDFAIL_TIMEOUT в /etc/defaul/grub в то количество секунд, которые меню GRUB-а будет ждать ввода в случае когда recordfail=1. Сохранить изменения и обновить GRUB (sudo update-grub).
Финт с GRUB_RECORDFAIL_TIMEOUT может не сработать в некоторых (старых) версиях GRUB. Тогда нужно редактировать /etc/grub.d/00_header. Нужно найти функцию make_timeout (), которая выглядит примерно так:
и заменить в ней строчку
После этого финт с GRUB_RECORDFAIL_TIMEOUT заработает. Нужно сохранить изменения и обновить GRUB (sudo update-grub).
Grub2
GRUB 2 is the default boot loader and manager for Ubuntu since version 9.10 (Karmic Koala). As the computer starts, GRUB 2 either presents a menu and awaits user input or automatically transfers control to an operating system kernel. GRUB 2 is a descendant of GRUB (GRand Unified Bootloader). It has been completely rewritten to provide the user significantly increased flexibility and performance. GRUB 2 is Free Software.
In this guide, GRUB 2 is version 1.98 or later. GRUB legacy (version 0.97) will be referred to as GRUB. To determine your version, use grub-install -V. Grub version 1.99 became the default on Ubuntu 11.04 (Natty Narwhal) and introduced some major changes in the Grub file contents. This guide covers the use of Grub 1.98, the Grub release found in Ubuntu 10.04 LTS (Lucid Lynx). and Grub 1.99, packaged with Ubuntu 12.04 LTS (Precise Pangolin). Content reflecting other versions of Grub 2 will be noted in the appropriate entry.

Improvements
- Scripting support including conditional statements and functions
- Dynamic module loading
- Rescue mode
- Custom Menus
- Themes
- Graphical boot menu support and improved splash capability
- Boot LiveCD ISO images directly from hard drive
- New configuration file structure
- Non-x86 platform support (such as PowerPC)
- Universal support for UUIDs (not just Ubuntu)
GRUB vs GRUB 2
- On a new installation of Ubuntu 9.10 or later with no other installed operating systems, GRUB 2 will boot directly to the login prompt or Desktop. No menu will be displayed.
- Hold down (right) SHIFT to display the menu during boot. In certain cases, pressing the ESC key may also display the menu.
Upgrading to GRUB 2 From GRUB
GRUB 2 is the default bootloader for Ubuntu. Users who still have Grub 0.97 installed on their Ubuntu systems can upgrade to GRUB 2 by installing the currently-supported releases of Ubuntu or by enabling repositories which contain the GRUB 2 package grub-pc.
Please visit the Grub2/Upgrading community documentation for more information and instructions.
File Structure
GRUB 2 incorporates a totally revised directory and file hierarchy. The major GRUB 2 folders include /etc/grub.d, which contains the main GRUB 2 scripts, and /boot/grub, which contains the GRUB 2 modules and menu file (grub.cfg). User customization’s are normally made to the /etc/default/grub file.
The description of the major GRUB 2 folders and files is located on the Grub2/Setup community documentation page.
Configuring GRUB 2
Configuration changes are normally made to the /etc/default/grub file and to the custom scripts located in /etc/grub.d. No changes are made to the GRUB 2 menu until the update-grub command is run as root. This command runs the GRUB 2 configuration scripts and updates the /boot/grub/grub.cfg file.
Descriptions of the GRUB 2 options and how to change them are presented on the Grub2/Setup community documentation page.
Boot Display Behavior
GRUB 2 loads before any operating system. Its modular components are loaded on an as-needed basis. Menu display behavior is generally determined by settings in /etc/default/grub. Review the «Configuring GRUB 2» section above for specific entry and formatting guidance.
Initial Default
- If no other operating system is detected GRUB 2 will boot straight into the default operating system and no menu will be displayed.
- If another operating system is detected the GRUB 2 menu will display.
Timed Display
Hidden
-
Normal Hidden Operations Enabled:
- The user may be able to display the menu in one or more of the following ways:
- Holding down the SHIFT key early in the boot process until the menu displays.
- GRUB 2 searches for a depressed SHIFT key signal during boot. If the key is pressed or GRUB 2 cannot determine the status of the key, the menu is displayed.
Saved
Last Boot Failed or Boot into Recovery Mode
If the last boot failed or after a boot into Recovery Mode the menu will be displayed until the user makes a selection.
- For -1, there will be no countdown and thus the menu will display.
- For 0, menu will not display even for a failed startup.
Run update-grub after the change have been made.
In some cases trick with GRUB_RECORDFAIL_TIMEOUT doesn’t work. In such a case edit /etc/grub.d/00_header and change value of timeout in line 236 (this line is in the make_timeout() function)
to the the value as described above.
Run update-grub after the change have been made. Special thanks to McCunha on Ubuntu Forums for the above tip.
The above change, however, still causes GRUB2 to boot into text graphics mode. Thus, an additional change is required. Edit /etc/grub.d/10_linux and change line 188 to
Once again, run update-grub after the change has been made.
Password Protection
GRUB 2 is capable of password-protecting menu editing, access to the GRUB 2 terminal, and specific or all menu entries. It can also limit access to specific entries for specific users, and can encrypt plain-text passwords for increased security. Please refer to the Grub2/Passwords community documentation.
Custom Menu Entries
GRUB 2 allows users to create customized menu selections which will be automatically added to the main menu when sudo update-grub is executed. A 40_custom file is available in /etc/grub.d/ for use or to serve as an example to create other custom menus. Information on building and using custom menus in GRUB 2 is located in the Grub2/CustomMenus community document.
Troubleshooting
GRUB 2 provides excellent capabilities for troubleshooting and correcting boot problems from the boot menu or GRUB 2 terminal. Troubleshooting and recovery procedures are detailed in the Grub2/Troubleshooting community document which also includes a section Selected_Problems_and_Bugs.
Fixing reboot/shutdown freezes
If your machine freezes upon attempts to shutdown or reboot, try modifying /etc/default/grub. Open the file with gksudo gedit /etc/default/grub (graphical interface) or sudo nano /etc/default/grub (command-line). Any other plaintext editor (Vim, Emacs, Kate, Leafpad) is fine too. Find the line that starts with GRUB_CMDLINE_LINUX_DEFAULT and add reboot=bios to the end.
If done properly it should result in something like GRUB_CMDLINE_LINUX_DEFAULT="quiet splash reboot=bios"
Then save the file, run sudo update-grub and reboot in any way that’s possible for you. After that, reboots and shutdowns should start working properly.
With certain hardware (notably DELL) the kernel parameter that you add needs to be reboot=pci (instead of reboot=bios), the procedure remains the same.
Displays
GRUB 2 can do more than provide a simple black & white menu. Its menu can be customized by the user to present a more visually-appealing menu by changing font colors, backgrounds and resolutions.
For information on using splash images and changing font colors and menu resolutions, please refer to the Grub2/Displays community documentation.
Themes
Installing/Reinstalling/Moving GRUB2
Please visit the Grub2/Installing community documentation. Information concerning upgrades from GRUB 0.97 (Legacy) to GRUB 2 is now located at Grub2/Upgrading.
Booting an ISO from a Menuentry
Ubuntu ISOs, as well as many utility ISOs and some other Linux operating systems, can be booted from a hard drive via a GRUB menuentry. This eliminates the need to create a CD/DVD and allows bootable image files to be stored only on the hard drive.
For information on this Grub 2 feature, please visit the Grub2/ISOBoot community documentation page.
Security
Preventing booting via Grub command-line
The ability to manually boot using the Grub command-line constitutes the biggest security risk in Linux. Any OS can be booted in this manner from any USB or CD/DVD drive, circumventing BIOS restrictions. Placing passwords or locking menu items (in the Grub configuration files) does not prevent a user from booting manually using commands entered at the grub command-line. (Once a foreign OS is booted, of course, it can be used to access any part of an unencrypted hard drive).
There are currently no options to prevent the command-line usage of Grub. Doing so would restrict boot-loading to just the menu options and that is not considered wise
Miscellaneous
Booting from a serial console
If you want GRUB to operate over a serial line, you will need to uncomment GRUB_TERMINAL in /etc/default/grub and set it to serial (instead of the console default). Alternatively, you can add GRUB_TERMINAL=»console serial» to have the grub menu on both serial and local console. The default serial console settings are to operate on the first serial port (ttyS0) at a 9600 bit/s transfer rate with 8 data bits, 1 stop bit and no parity.
If you want to use another serial port or if your console uses different settings, you must add a GRUB_SERIAL_COMMAND line to specify additional parameters to the serial command. The serial command in GRUB 2 uses the same syntax as its GRUB Legacy counterpart (documented here). For example, for a very common 9600 bit/s (baud) serial line with 8 data bits, 1 stop bit and no parity:
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1"
An example is a 4800 bit/s (baud) serial line with 7 data bits, 1 stop bit and even parity:
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=4800 --word=7 --parity=even --stop=1"
Настройка загрузчика Grub
Загрузчик системы выполняет очень важную функцию. Он позволяет выбрать какую операционную систему стоит загружать, также инициализирует параметры ядра Linux и подготавливает его к загрузке. В большинстве дистрибутивов Linux используется загрузчик Grub. Он поддерживает все необходимые функции, в том числе и UEFI, а также очень настраиваемый.
В одной из предыдущих статей мы рассматривали установку загрузчика Grub в Linux. В этой же будет будет продолжена тема и более детально рассмотрена настройка загрузчика Grub. Мы рассмотрим как графическую настройку с помощью Grub Customizer, так и более сложный, но более гибкий вариант с помощью ручного редактирования конфигурационных файлов.
Настройка Grub с помощью Grub Customizer
Это самый легкий путь конфигурации загрузчика. Графическая программа настройки Grub Customizer позволяет настроить все основные параметры загрузчика, например, фоновое изображение, шрифт, порядок пунктов загрузки, параметры ядра и многое другое. Все это делается в пару кликов.
Программа доступна в официальных репозиториях большинства дистрибутивов, и вы можете ее оттуда легко установить. Для установки в Ubuntu выполните:
sudo apt install grub-customizer
В Fedora, Red Hat и CentOS команда будет немного отличаться:
sudo yum install 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_DISTRIBUTOR=»» GRUB_DEFAULT=»saved» GRUB_HIDDEN_TIMEOUT=»0″ GRUB_HIDDEN_TIMEOUT_QUIET=»true» GRUB_TIMEOUT=»8″ GRUB_CMDLINE_LINUX_DEFAULT=»resume=/dev/sda7 splash=silent quiet»
Но как вы могли понять, этим способом вы не можете настроить порядок пунктов загрузки, а также некоторые другие параметры, поэтому давайте рассмотрим настройку непосредственно конфигурационного файла 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 — не искать в схемных носителях.
- Приметы устройства дают программе дополнительные подсказки для более быстрого поиска;
- Основной параметр — значение, по которому будем выполнять поиск.
Например, команда может выглядеть вот так:
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. Синтаксис этой команды такой:
Обычно, для нормальной загрузки операционной системы сначала необходимо установить корневой раздел, для этого, возможно, нужно загрузить некоторые модули, дальше нужно запустить ядро с нужными параметрами и добавить образ initrd если это требуется. Самый простой пример пункта меню:
Теперь давайте попробуем собрать всю информацию воедино и создадим самый просто конфигурационный файл для Grub вручную:
# Время показа меню 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
# Пункт меню для нашей операционной системы:
Теперь, когда вы знаете как примерно выглядит конфигурационный файл Grub, вы сможете разобраться с файлом, созданным автоматически. Пункты меню выводятся по порядку, поэтому чтобы поменять их местами будет достаточно поменять местами команды в файле. Программа настройки Grub — это хорошо, но также важно понимать как все работает на низком уровне.
Выводы
Настройка grub может показаться довольно сложной вещью, но если разобраться, то все вполне выполнимо. В этой статье мы рассмотрели несколько способов настройки загрузчика, для различных ситуаций, и я думаю, теперь у вас не возникнет проблем с этой программой. Если у вас остались вопросы, спрашивайте в комментариях!
Ubuntu GRUB Linux Bootloader and Configuration
Get a new level of security for your M365 data with immutable backup copies on any object storage. Try the new Veeam Backup for M365 v7.
Table of Contents
The GRUB Linux Bootloader is the most widely used bootloader for Linux. Every aspiring Linux user would benefit from learning about Ubuntu GRUB. In this tutorial, you will learn what GRUB is, how the booting process works, and dive into several helpful Ubuntu GRUB configurations.
Dive in to know more.
Prerequisites
If you’d like to follow along in this tutorial, ensure you have a Linux device that has GRUB as the bootloader. This tutorial will be based on Ubuntu 18.04.5 LTS, running on a virtual machine on Oracle VirtualBox.
Understanding the Ubuntu GRUB Boot Process
GRUB is an acronym for Grand Unified Boot Loader and is the primary and most crucial component for booting your device. GRUB also is the most prevalent bootloader for Linux. Your journey will start with you knowing a little more about GRUB’s booting process.
In the general booting process, the BIOS starts by invoking the POST step and then looks for the bootloader in the Master Boot Record (MBR).
The MBR is the information in the first sector of any hard disk. The MBR identifies where an Operating System is. The information stored in the MBR loads (boots) the OS into the device’s RAM.
This article only covers the MBR side of things. But you can also find disks using GPT, which stands for GUID Partition Tables. GPT is better if you plan to create more than four partitions as an MBR disk can hold a maximum of 4 primary partitions at most.
In the screenshot below, you can see a diagram of the booting process. You can see that Ubuntu GRUB loads the kernel you opted into the main memory: the Random Access Memory (RAM). After the kernel is loaded, users can log into the device.

The role of GRUB during the complete boot process in Linux
Comparing Ubuntu GRUB and LILO Bootloaders
The Linux World has three main boot loaders: LILO, GRUB, and GRUB2. GRUB2 is the latest and primary bootloader in Linux distributions. GRUB2 is the most used and demonstrated in this tutorial as it is the default Ubuntu bootloader, but LILO still has a presence in Linux. In this section, you will learn how they fare against each other.
Other Linux bootloaders are available in the market, such as GNU GRUB, which has outstanding support for memory management and an object-oriented framework. The other one is SYSLINUX which is a lightweight boot loader.
GRUB supports booting multiple operating systems. LILO, on the other hand, can only boot one OS.

GRUB allows opting among multiple OS
Ubuntu GRUB works with Windows, Linux, Unix, macOS, BSD, Solaris, whereas LILO supports primarily Linux operating systems.
If you update the configuration file in LILO, then LILO needs to be reinstalled to the MBR. If you change GRUB settings, it does not require reinstallation.
Selecting Different Kernels or Recovery Modes
This section will show how to select a kernel while booting the device recovering from a corrupted kernel.
A kernel works as an interface between hardware and software. It controls all the processes that users run on the device.
Here are the steps to select a kernel using a VM in Oracle VirtualBox.
1. Log in directly to the Ubuntu device console using Oracle VirtualBox.
2. Reboot your Ubuntu machine using the shutdown command as shown below.
Once your device restarts, press and hold Shift while loading Ubuntu GRUB, and you will see the GRUB bootloader menu. If you don’t select anything, GRUB will boot the system with the default kernel and proceed with the booting process.
You should select Advanced options for Ubuntu either when you need to boot with a different kernel other than the default kernel. Or if you face any issues within the system like file corruption, kernel not loading correctly.

GRUB loading process
4. After you select the Advanced options for Ubuntu, a Ubuntu GRUB menu will show up. In the menu, you should see various kernels options you choose. If you don’t select an option, the first displayed kernel will load by default.
As you can see below in the image, there are two additional options for every kernel: upstart and recovery.
- (upstart): an event-based replacement for the /sbin/init daemon, which handles starting tasks and services during boot, stopping them during the shutdown, and supervising them while the system is running.
- (recovery mode): to recover the kernel from any failures in the system.

Selecting a kernel from the GRUB menu
5. Once logged into the device, the uname command verifies if the specified kernel is loaded. The -r option prints the kernel name.

Verifying the kernel from the console
Setting the Default Operating System
Now that you are more familiar with GRUB, you will tweak a few GRUB configurations options. You will start by configuring which Operating System will be loaded by default.
1. Log into your Ubuntu device using your favorite SSH client.
2. Now, list the GRUB boot menu entries by running the awk command as shown below. The awk command will display all the entries stored in /boot/grub/grub.cfg. The contents of the file will show up on the terminal. Pay attention to the lines. You will need the number associated with the line ahead, which starts with zero, i.e. the Ubuntu line is 0 and Ubuntu, with Linux 4.4.0-210-generic is 1 .

awk command filtering all the entries stored in /boot/grub/grub.cfg
3. Next, edit the GRUB configuration file. You can rely on vi to edit the file and change the value for GRUB_DEFAULT , but use your preferred editor as desired.
Now, set the value of GRUB_DEFAULT to the line number of the desired OS entry. Remember the awk command you ran? Those were the OS entries. If you set GRUB_DEFAULT to 0 , the first OS entry in the GRUB boot menu entry will boot if you set it to 1 , the device boots the second OS entry by default, and so on. In the screenshot below, the first OS Entry Ubuntu is set to boot by default.
By default, GRUB does not wait in the boot menu and starts booting immediately, in 0 seconds. You can change this timeout setting by changing the value for GRUB_TIMEOUT . The value will mean the number of seconds the menu is visible before booting starts. If the value is 5 , the boot menu will appear for 5 seconds so that you can select which OS you want to load when the system starts.

Editing the GRUB configuration file
4. Once you save the changes in the GRUB configuration file, make sure to run the update-grub command. The update-grub command takes the changed configuration file and applies it to the system.

Updating the GRUB configuration
Setting the Background Image in Ubuntu GRUB
Your GRUB configuration does not need to be bland. You can add a little flavor to GRUB by adding a background image to the GRUB menu. You can set pictures as the background into GRUB with the GRUB_BACKGROUND option. Follow the steps below to customize GRUB.
1. Edit the GRUB configuration file with vi , or your preferred text editor, and add the GRUB_BACKGROUND line as shown below. In this tutorial, the image is stored in a user home folder named UBUNTU , as GRUB runs as root, it can access images across the file system. Once modified save the configuration file.
The file shanky.jpeg image was already on the system. Replace that name with the file name you want as the background image.
2. Next, after making the changes in the GRUB configuration file, run the update-grub command.

Updating the grub configuration file
3. Further, verify if the image you added in the Grub file as the background is working as intended. To verify, restart your machine and hit the Shift key while GRUB is loading. As you can see below, GRUB now has a background image.

GRUB menu displaying the background image as specified in the grub configuration file.
Dual-booting with GRUB
One of the greatest features of Ubuntu GRUB is it allows you to choose between Windows and Linux when your device boots: also known as dual booting. Dual-booting allows you to use Linux and Windows together in one device and makes life easier for IT engineers working on multiple OSes.
As of early 2021, the default os_prober script which automatically adds in additional operating system menu entries was disabled, due to potential security concerns with automatic OS detection. You can re-enable this functionality via the following command, provided you are aware of what OS systems are installed.
Once you have configured dual-booting on your device, you should see a screen similar to the GRUB menu when your machine starts.

GRUB menu allows you to either login to Windows or Linux Instance
Conclusion
In this tutorial, you learned what GRUB is, and the article introduced you to GRUB’s booting process.
You also learned how to tweak some Ubuntu GRUB configurations, load different kernels, and even learned about Dual-booting.
Now that you have sound knowledge of GRUB, what are some of the configuration options you will change?
Hate ads? Want to support the writer? Get many of our tutorials packaged as an ATA Guidebook.
More from ATA Learning & Partners
Recommended Resources!
Recommended Resources for Training, Information Security, Automation, and more!
Get Paid to Write!
ATA Learning is always seeking instructors of all experience levels. Regardless if you’re a junior admin or system architect, you have something to share. Why not write on a platform with an existing audience and share your knowledge with the world?
ATA Learning Guidebooks
ATA Learning is known for its high-quality written tutorials in the form of blog posts. Support ATA Learning with ATA Guidebook PDF eBooks available offline and with no ads!
- Holding down the SHIFT key early in the boot process until the menu displays.
-
No menu entries are displayed. The splash screen, if configured, will be displayed.
-
Once the menu displays, the GRUB_TIMEOUT counter begins. Pressing any key stops the countdown.