Как UEFI обнаруживает загрузочные устройства?

Если я просто установлю linux на какой-то раздел, скажем /dev /sda2, как uefi сможет распознать его как загрузочную запись?

BIOS проверяет каждый раздел? Как ?

1 ответ1

5

Обычный ПК BIOS не понимает разделы. Он читает только сектор 0 (MBR), запускает начальный bootcode найденный там (который должен быть установлен в ОС), и что сам bootcode должен анализировать таблицу разделов.

(Не все загрузочные сектора MBR выполняют эту задачу одинаково. Те, что установлены в Windows или Syslinux, просто ищут раздел, помеченный как «активный», тогда как GRUB и LILO вместо этого ищут файл конфигурации в каком-то жестко закодированном месте. Некоторые загрузочные секторы понимают только MBR, другие могут читать GPT.)

Таким образом, в меню загрузки BIOS будут только диски, а не разделы, а причудливое меню загрузки, в котором перечислены операционные системы, отображается загрузчиком ОС (например, GRUB), а не BIOS. Поиск раздела ядра ОС и запуск самой ОС также выполняется этим загрузчиком, а не BIOS.


В отличие от BIOS, прошивка UEFI фактически понимает таблицы разделов MBR и GPT. Однако UEFI все еще не распознает разделы Linux или Windows и не может напрямую запустить ОС оттуда.

Вместо этого прошивка UEFI ищет только определенный "системный раздел EFI", раздел FAT32, содержащий программы загрузчика. Микропрограмма также хранит список операционных систем в NVRAM, и каждая установленная ОС добавляет туда свою запись, указывая на собственный файл *.efi в системном разделе.

Например, Windows всегда добавляет запись под названием "Диспетчер загрузки Windows", которая указывает на файл «\EFI\Microsoft\Bootmfgw.efi», который является загрузчиком Windows.

Таким образом, меню загрузки UEFI может иметь несколько типов загрузочных записей:

  1. Вручную добавленные записи хранятся в NVRAM - с пользовательской меткой и указанием на определенный файл в системном разделе EFI;
  2. Автоматически обнаруживаемые диски, которые имеют системный раздел \EFI\Boot\BootX64.efi в системном разделе EFI - на них нет настраиваемой метки, только «UEFI:», за которой следует модель диска;
  3. Если включено - диски с BIOS MBR (для загрузки в режиме совместимости).

Как вы можете видеть, прошивка UEFI использует только один раздел (системный раздел EFI), но остальное (поиск раздела ядра ОС) по-прежнему выполняется собственным загрузчиком операционной системы.

Даже в UEFI графические меню загрузки, позволяющие выбрать версию ОС или ядра, также обычно отображаются загрузчиком ОС, а не самим UEFI.


Тем не менее, загрузчик Linux до сих пор ничего не знает о корневом разделе. Основная задача загрузчика Linux - найти образ ядра (vmlinuz) и архив initramfs, а также предоставить ядру параметры командной строки, которые содержат имя корневого раздела в синтаксисе Linux, например root=/dev/sda2 или root=UUID=XYZ-ABC .

Наконец, после запуска ядра Linux оно само ищет раздел, соответствующий указанному имени, и монтирует его в / . (Это может быть сделано либо внутренним ядром, либо initramfs, если требуется большая гибкость.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .