Если ваша система поддерживает UEFI и вы хотите загрузить LFS с
помощью UEFI, вам следует пропустить инструкции на этой странице,
но все равно изучить синтаксис grub.cfg
и способ указания раздела в файле с этой
страницы, а также настроить GRUB с поддержкой UEFI используя
инструкции, приведенные на
странице BLFS.
При неправильной настройке 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
GRUB использует собственную структуру именования дисков и разделов
в виде (hdn,m), где
n — номер жесткого диска, а
m — номер раздела. Номера
жестких дисков начинаются с нуля, а номера разделов начинаются с
единицы для обычных разделов (с пяти для расширенных разделов).
Обратите внимание, что это отличается от более ранних версий, где
оба номера начинались с нуля. Например, раздел sda1
это (hd0,1) в GRUB, а sdb3
(hd1,3). В отличие от Linux, GRUB не
считает приводы CD-ROM жесткими дисками. Например, если
используемый CD-привода определяется как hdb
, а второй жесткий диск как hdc
, этот второй жесткий диск все равно будет
(hd1).
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
к приведенной выше команде.
Создайте файл /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.4.12-lfs-12.0" {
linux /boot/vmlinuz-6.4.12-lfs-12.0 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=
, но для этого требуется initramfs,
которая не рассматривается в LFS.
<UUID
раздела>
Имя узла устройства для раздела в /dev
также может измениться (хотя это менее
вероятно, чем изменение указателя GRUB). Вы можете заменить пути
к узлам устройств, таким как /dev/sda1
на PARTUUID=
, в <UUID
раздела>
/etc/fstab
, чтобы избежать потенциального сбоя
загрузки в случае, если имя узла устройства изменилось.
GRUB - чрезвычайно мощная программа, предоставляющая огромное количество вариантов загрузки с самых разных устройств, работающих систем и типов разделов. Существует также множество опций настройки, таких как графические экраны-заставки, воспроизведение звука, ввод с помощью мыши и т. д., детали этих опций выходят за рамки этой инструкции.
Существует команда grub-mkconfig, которая может автоматически записывать файл конфигурации. Она использует набор скриптов из каталога /etc/grub.d/ и уничтожит любые сделанные вами настройки. Эти скрипты предназначены в первую очередь для обычных дистрибутивов и не рекомендуются для LFS. Если вы устанавливаете коммерческий дистрибутив Linux, есть вероятность, что эта программа будет запущена. Обязательно создайте резервную копию файла grub.cfg.