====== GRand Unified Bootloader (GRUB) ======
===== Сведения =====
Загрузчик операционных систем, вторая реализация, первой был - **Grub Legacy**.\\
GRUB умеет по цепочке передавать управление другому загрузчику, что позволяет ему загружать Windows, MS-DOS и др.\\
Позволяет при загрузке задавать произвольные параметры и передавать их в ядро, для дальнейшей обработки (для Multiboot систем).\\
===== Конфигурация =====
Основным файлом конфигурации является **/boot/grub/grub.cfg**, но он **генерируется автоматически**, скриптами, расположенными в **/etc/grub.d/**\\
Так же, есть ещё файл один конфигурации - **/etc/default/grub**, он так же содержит в себе ряд полезных опций.\\
Такие как например:
* Стандартный пункт загрузки (**grub_default**). Можно указать порядковый номер либо текстовый идентификатор (как в файле **/boot/grub/grub.cfg**)
* Время отображения меню (**grub_timeout**). '-1' для ручного выбора.
* Скрытое меню (**grub_hidden_timeout**)
* Параметры загрузки ядра (**grub_cmdline_linux_default**)
==== Установка пароля ====
Имея доступ к загрузчику, можно легко **[[security:reset_passwd|сбросить пароль]]** любого пользователя в системе, поэтому рекомендуется установить пароль на загрузчик (но имея возможность загрузки с **LiveCD**, можно обойти и эту защиту).\\
Сначала создаем и шифруем пароль с помощью утилиты **grub-mkpasswd-pbkdf2**\\
Затем открываем файл **/etc/grub.d/40_custom** и дописываем в конце две строки:\\
set superusers="root"
password_pbkdf2 root *сгенерированный хэш пароля (grub.pbkdf2.sha512.10000...)*
После изменений, нужно **обновить конфигурацию grub**
# grub-mkconfig -o /boot/grub/grub.cfg
или\\
# update-grub
**ПАРОЛЬ БУДЕТ УСТАНОВЛЕН НА ВСЕ ПУНКТЫ ЗАГРУЗКИ** в т.ч. и на обычную загрузку т.е. его нужно будет вводить при каждом запуске.\\
Для того что бы разрешить обычную загрузку без пароля, нужно отредактировать файл **/etc/grub.d/10_linux**, находим пункт и добавляем параметр **--unrestricted**, как на скриншоте:
{{ :linux:kernel:bootloader:grub_passwd.png?direct&800 |}}
PS: Имея возможность загрузится с LiveCD, **можно обойти защиту паролем**, отредактировав файл **/boot/grub/grub.cfg**.\\
===== Консоль GRUB =====
Что бы попасть в консоль, нужно нажать клавишу **C** во время отображения меню загрузки.
==== ls ====
Кроме стандартного назначения, можно получить список жестких дисков и разделов
==== cat ====
Содержимое указанного файла.
==== linux ====
Загружает указанное ядро.
linux файл_ядра опция1=значение опция2 опция3
==== initrd ====
Загружает указанный initrt-образ (должен соответствовать версии ядра).
initrd /boot/initrd.img-2.6.32-020632-generic
==== chainloader ====
Передает управление другому загрузчику (ищется в root разделе). Обычно требуется указание файла загрузки.
chainloader /путь/имя_файла
Для Windows можно использовать:
chainloader +1
boot
==== load_env / save_env ====
Загружает / Сохраняет переменные окружения из своего файла (**/boot/grub/grubenv**)\\
**GRUB environment block** можно использовать для хранения небольшого количества информации (1024 байт).\\
Утилита **grub_editenv** позволяет редактировать из работающей системы.\\
==== configfile ====
Позволяет загрузить другой файл конфигурации, вместо **/boot/grub/grub.cfg**
==== terminal_output ====
Перечисляет или выбирает выходной терминал. Без аргументов перечисляет активные и доступные терминалы.\\
**--append** добавляет терминал в список активных.\\
**--remove** удаляет из списка активных.\\
==== testspeed ====
Дает возможность протестировать скорость чтения файла с диска.\\
**-s, --size=ЧИСЛО** - объём данных каждой операции чтения.\\
testspeed [-s РАЗМЕР] [путь до файла]
==== time ====
Время выполнения любой команды.
time [команда] [аргументы]
==== sleep ====
Заморозка.\\
**-v, --verbose** - показывает отсчет.\\
**-i, --interruptible** - разрешает прерывание кнопкой ESC.\\
sleep [КЛЮЧИ] [СЕКУНДЫ]
==== root ====
Сообщает какой раздел используется в качестве корневого.
==== set ====
Используется для задания различных параметров.
set root=(hd0,5)
==== search ====
Поиск раздела по UUID, метке или файлу, имеет ключи:
* **u (–fs-uuid)** - поиск раздела по UUID
* **l (–label)** - поиск по метке раздела
* **f (–file)** - поиск по указанному файлу
* **n (–no-floppy)** - не проверять флоппи-дисковод (чтоб не трещал)
* **s (–set)** - установить найденный раздел в качестве значения заданной переменной.
==== vbeinfo ====
Список поддерживаемых видеорежимов.
==== halt / reboot ====
Выключение / перезагрузка