В этой статье разберем по пунктам меню загрузчика GRUB для операционной системы Astra Linux.
- После запуска загрузчика, на экран выводится окно «Меню GRUB», из которого можно перейти в режим редактирования загрузочных записей (нажать клавишу «e») или в режим командной строки GRUB (нажать клавишу «с»).
- Механизм редактирования схож с таковым в обычном текстовом редакторе. Но в данном случае изменения сохранены не будут, она разово будут использоваться для загрузки.
- Чтобы после редактирования выполнить загрузку, следует нажать клавишу F10. Если изменения не были внесены, загрузка также будет осуществлена.
- Вернуться к выбору пункта меню можно с помощью клавиши Esc. Внесенные изменения будут отменены.
Командная строка GRUB
Для входа в GRUB shell следует нажать «c», пока отображается меню. Некоторые команды:
- help — информация о доступных командах
- xls — вывести список разделов
- ls (hd0, gpt2)/ — посмотреть оглавление раздела
- linux /vmlinuz root=/dev/sda2 ro parsec.max_ilev=63 quiet net.ifnames=0 — загрузить в память ядро, передав ему параметры
- initrd /initrd.img — загрузить в память образ initramfs
- boot — передать управление ядру linux
- Командный интерпретатор GRUB обладает широкими возможностями. Можно не только осуществлять навигацию по файловой системе, но и, например, просматривать содержимое файлов с помощью команды cat .
- /vmlinuz и /initrd.img — символические ссылки на последние версии ядра linux и образа initramfs в каталоге /boot соответственно.
Некоторые параметры GRUB, передаваемые ядру
- s — загрузить init в режиме восстановления (single)
- root = устройство — указание на имя устройства, UUID или метку раздела, которые следует смонтировать в корневой каталог («/»)
- ro — монтировать в корневой каталог устройство в режиме read-only
- rw — монтировать в корневой каталог устройство в режиме read-write
- quiet — заблокировать вывод большинства сообщений
- splash — разрешает отображение графической заставки
- 3 — загрузить init в режиме multi-user (без GUI)
- 5 — загрузить init в режиме graphical (с GUI)
- net.ifnames=0 — порядок именования сетевых интерфейсов (0 — в стиле eth0, eth1 и т.д.)
- parsec.max_ilev=63 — включить мандатный контроль целостности ОС.
- parsec.ccnr_relax=1 — дает непривилегированному пользователю возможность производить запись файлов с разным уровнем конфиденциальности в контейнер (каталог) с установленным флагом ccnr.
- parsec.strict_mode=1 загрузка ОС в расширенном режиме МКЦ.
- parsec.mac=0 — устанавливается при включении мандатного управления доступом.
- init=путь_init — полный путь к программе, выполняемой с PID=1
- init=/bin/sh — запустить вместо systemd /bin/sh (для восстановления).
Некоторые загрузчика GRUB
- Конфигурационный файл /boot/grub/grub.cfg — выполняется GRUB, формируя меню
- /etc/default/grub — установки переменных для GRUB
- /etc/grub.d содержит сценарии для формирования grub.cfg, должны иметь право на выполнение
- Для редактирования предназначен 40_custom
- Сборка GRUB:
- grub-mkconfig — создает сценарий, но не перезаписывает
- update-grub — пере собирает /boot/grub/grub.cfg
- Не следует редактировать вручную файл /boot/grub/grub.cfg, он создается при помощи команд grub-mkconfig из файлов /etc/grub.d и /etc/default/grub.
- В /etc/default/grub определяется поведение загрузчика GRUB (GRUB_DEFAULT), передача параметров ядру (GRUB_CMDLINE_LINUX) и т.д.
- Один из примеров настройки загрузчика GRUB: создание нового пункта меню (menuentry). Для этого следует добавить все новые строки в /etc/grub.d/40_custom, не удаляя существующие.
- При этом, в отличие от всех остальных сценариев в /etc/grub.d, в файле /etc/grub.d/40_custom не следует обрамлять команды GRUB в cat<<EOF…EOF, необходимый код будет добавлен в том виде, в каком вы его введете.
- sudo grub-mkconfig — использует настройки из /etc/default/grub и выполняет сценарии в /etc/grub.d/ по очереди, выводя в stdout наполнение, предназначенное для записи в grub.cfg, но /boot/grub/grub.cfg при этом не перезаписывается.
- Чтобы сгенерировать и перезаписывать /boot/grub/grub.cfg следует использовать sudo update-grub.
- Вместо update-grub можно использовать grub-mkconfig -0 /boot/grub/grub.cfg.
Более того, update-grub — сценарий, вызывающий данную команду:
sa@astra:~$ cat /usr/sbin/update-grub #! /bin/sh set -e exec grub-mkconfig -o /boot/grub/grub.cfg "$@" sa@astra:~$