Как загрузчик grub efi находит правильный grub.cfg и загрузочный каталог?

9

Насколько я понимаю, биос uefi загружает grub.efi из раздела efi. Теперь он загружает кучу модулей grub и файл конфигурации из каталога / boot.

Но как grub находит правильное устройство, в котором находится загрузочный раздел? В grub legacy вы обычно устанавливаете grub на определенный раздел, используя

# grub-install --root-directory=/dev/sda

Так что совершенно ясно, где он будет искать загрузочный каталог. Как grub-efi определяет правильное устройство?

user128063
источник
насколько я понимаю, конфигурация для расположения ядра находится в разделе efi.
Джо
Понятно, что информация должна находиться в разделе efi, но вы никогда не указываете ее в любой момент (как раньше) при установке grub.
user128063
в файле .efi, который генерируется при запуске grub-efi
Joe

Ответы:

9

После использования ghex для проверки моего файла "BOOTX64.EFI" в разделе efi я нашел эту строку.

search.fs_uuid a43d1f11-6ebe-477d-8be3-321a33bc37f9 root hd2,gpt4 
set prefix=($root)'/boot/grub'

Это показывает, что информация о расположении grub (загрузочного раздела) была встроена grub2-install в файл BOOTX64.EFI, созданный для системы.

Grub2 затем запускается загрузчиком EFI, и вы получаете интерфейс grub для выбора операционной системы (ядра) для загрузки или загрузки ядра по умолчанию.

Просто для небольшого расширения: файлы .EFI являются своего рода приложениями, которые может выполнять подсистема UEFI. Предназначен для загрузки системы и предоставления удобного места для запуска программ защиты от выполнения и программ антивирусного типа.

Они помещают расширяемый в «Unified Extensible Firmware Interface»

Джо
источник
Было бы интересно посмотреть, сможете ли вы пропатчить этот файл и изменить свою конфигурацию и uuid и по-прежнему загружаться без переустановки Grub
Джо
Странно, я не могу его найти. В моем каталоге ubuntu efi есть grub.cfg (в ascii) с префиксом и корневой информацией внутри id. Но в моем каталоге archlinux efi просто есть grubx64.efi, в котором нет указаний на команды root и префиксы, о которых вы упоминали, даже когда я читаю их в ghex.
user128063
Не в ubuntu.efi ищите boot.efi. В разделе EFI есть папка. Называется efi и в нем папка с названием boot.
Джо
В папке efi есть несколько двоичных файлов efi, один для Windows, один для Ubuntu и так далее. Имя файла EFI не имеет значения. Причина, по которой я не смог найти строку uuid, заключается в том, что мой корневой раздел - это раздел lvm. Вместо этого он хранит lvmid!
user128063
1
Ой, извините, я неправильно прочитал ваш предыдущий пост. Stackexchange отключил ваш предыдущий пост в той части, где вы описали свою систему. Ваше описание одного образа загрузчика (grub) (BOOTX64.EFI), который, насколько я могу судить, загружает две операционные системы. Вот еще несколько возможностей: 1) У steamos также может быть свой отдельный загрузчик, для которого он будет иметь свой собственный файл EFI в разделе efi. 2) у вас есть гибридная EFI-унаследованная загрузочная система, где ваш загрузчик steamos хранится в MBR. Вы можете видеть, что efi bootorder используется sudo efibootmgr -vна gentoo, но я уверен, что вы это знаете
user128063