10.4. Использование GRUB для настройки процесса загрузки

[Примечание]

Примечание

Если ваша система поддерживает UEFI и вы хотите загрузить LFS с помощью UEFI, вам следует пропустить инструкции на этой странице, но все равно изучить синтаксис grub.cfg и способ указания раздела в файле с этой страницы, а также настроить GRUB с поддержкой UEFI используя инструкции, приведенные на странице BLFS.

10.4.1. Введение

[Предупреждение]

Предупреждение

При неправильной настройке GRUB ваша система перестанет загружаться без вспомогательно загрузочного CD-ROM или USB-накопителя. Для загрузки системы LFS этот раздел необязателен. Вы можете просто использовать существующий загрузчик, например Grub-Legacy, GRUB2 или LILO.

Убедитесь, что аварийный загрузочный диск готов к «спасению» компьютера, если он перестанет загружаться. Если у вас еще нет загрузочного диска, вы можете создать его. Для этого необходимо перейти в раздел BLFS и установить программу xorriso из пакета libisoburn.

cd /tmp
grub-mkrescue --output=grub-img.iso
xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso

10.4.2. Соглашения об именовании GRUB

GRUB использует собственную структуру именования дисков и разделов в виде (hdn,m), где n — номер жесткого диска, а m — номер раздела. Номера жестких дисков начинаются с нуля, а номера разделов начинаются с единицы для обычных разделов (с пяти для расширенных разделов). Обратите внимание, что это отличается от более ранних версий, где оба номера начинались с нуля. Например, раздел sda1 это (hd0,1) в GRUB, а sdb3 (hd1,3). В отличие от Linux, GRUB не считает приводы CD-ROM жесткими дисками. Например, если используемый CD-привода определяется как hdb, а второй жесткий диск как hdc, этот второй жесткий диск все равно будет (hd1).

10.4.3. Настройка

GRUB записывает данные на первый физический сектор жесткого диска. Эта область не является частью какой-либо файловой системы. Программа в загрузочном разделе имеет доступ к модулям GRUB расположенным по умолчанию в /boot/grub/.

Расположение загрузочного раздела - это выбор пользователя, который влияет на конфигурацию. Одна из рекомендаций заключается в том, чтобы иметь отдельный небольшой раздел (примерно 200 МБ) исключительно для загрузочной информации. В этом случае каждая сборка, будь то LFS или другой дистрибутив, может обращаться к тем же загрузочным файлам, а доступ может быть получен из любой загруженной системы. Если вы решите так сделать, вам необходимо примонтировать отдельный раздел, переместить все файлы из текущего каталога /boot (например, ядро Linux, которое вы создали на предыдущем этапе) в новый раздел. Затем нужно отмонтировать раздел и примонтировать его заново в каталог /boot. Когда вы это сделаете, обязательно обновите данные в файле /etc/fstab.

Оставить /boot на текущем разделе LFS это тоже рабочее решение, но его настройка для загрузки нескольких систем сложнее.

Используя информацию выше, определите соответствующие точки монтирования для корневого раздела (или загрузочного раздела, если используется отдельный). В следующем примере предполагается, что корневым (или отдельным загрузочным) разделом является sda2.

Установите файлы GRUB в каталог /boot/grub и настройте загрузочный сектор:

[Предупреждение]

Предупреждение

Следующая команда перезапишет текущий загрузчик. Не выполняйте эту команду, если это не нужно, например, если вы используете сторонний менеджер загрузки для управления главной загрузочной записью (MBR).

grub-install /dev/sda
[Примечание]

Примечание

Если система была загружена с использованием UEFI, grub-install попытается установить файлы для x86_64-efi, но эти файлы не были установлены в Глава 8. Если это так, добавьте --target i386-pc к приведенной выше команде.

10.4.4. Создание файла конфигурации GRUB

Создайте файл /boot/grub/grub.cfg:

cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod part_gpt
insmod ext2
set root=(hd0,2)

menuentry "GNU/Linux, Linux 6.10.5-lfs-12.2-rc1" {
        linux   /boot/vmlinuz-6.10.5-lfs-12.2-rc1 root=/dev/sda2 ro
}
EOF

Команды insmod загружают модули GRUB с именами part_gpt и ext2. Несмотря на название, ext2 фактически поддерживаются файловые системы ext2, ext3 и ext4. Команда grub-install встроила некоторые модули в основной образ GRUB (установленный в MBR или раздел GRUB BIOS) для доступа к другим модулям (в /boot/grub/i386-pc), поэтому в стандартной конфигурации эти два модуля уже встроены и эти две команды insmod ничего не будут делать. В любом случае, от них нет никакого вреда, но они могут понадобиться в некоторых редких конфигурациях.

[Примечание]

Примечание

С точки зрения GRUB, файлы ядра относятся к используемому разделу. Если вы используется отдельный раздел /boot, удалите /boot из приведенной выше строки linux. Вам также потребуется изменить строку set root так, чтобы она указывала на загрузочный раздел.

[Примечание]

Примечание

Наименование раздела для GRUB может измениться, если вы добавили или удалили некоторые диски (это могут быть как съемные диски, так и USB-устройства). Изменение может привести к сбою загрузки, потому что grub.cfg ссылается на «старые» указатели. Чтобы не столкнуться с этой проблемой, необходимо использовать UUID раздела и файловой системы вместо указателя GRUB для указания устройства. Запустите команду lsblk -o UUID,PARTUUID,PATH,MOUNTPOINT, чтобы посмотреть UUID ваших файловых систем (в столбце UUID) и разделов (в столбце PARTUUID). Затем замените set root=(hdx,y) на search --set=root --fs-uuid <UUID файловой системы, в которой установлено ядро>, и замените root=/dev/sda2 на root=PARTUUID=<UUID раздела, в котором собрана LFS>.

Обратите внимание, что UUID раздела и UUID файловой системы на этом разделе это совершенно разные вещи. Некоторые онлайн-ресурсы могут предлагать вам использовать root=UUID=<UUID файловой системы> вместо root=PARTUUID=<UUID раздела>, но для этого требуется initramfs, которая не рассматривается в LFS.

Имя узла устройства для раздела в /dev также может измениться (хотя это менее вероятно, чем изменение указателя GRUB). Вы можете заменить пути к узлам устройств, таким как /dev/sda1 на PARTUUID=<UUID раздела>, в /etc/fstab, чтобы избежать потенциального сбоя загрузки в случае, если имя узла устройства изменилось.

GRUB - чрезвычайно мощная программа, предоставляющая огромное количество вариантов загрузки с самых разных устройств, работающих систем и типов разделов. Существует также множество опций настройки, таких как графические экраны-заставки, воспроизведение звука, ввод с помощью мыши и т. д., детали этих опций выходят за рамки этой инструкции.

[Внимание]

Внимание

Существует команда grub-mkconfig, которая может автоматически записывать файл конфигурации. Она использует набор скриптов из каталога /etc/grub.d/ и уничтожит любые сделанные вами настройки. Эти скрипты предназначены в первую очередь для обычных дистрибутивов и не рекомендуются для LFS. Если вы устанавливаете коммерческий дистрибутив Linux, есть вероятность, что эта программа будет запущена. Обязательно создайте резервную копию файла grub.cfg.