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

534
ransh

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

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

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

0
BIOS или UEFI? Они совершенно разные в методе загрузки. BIOS выполняет код в MBR, если на дисках с разделом, помеченным как «Active & Bootable», UEFI полностью отличается, за исключением режима Legacy. Google на самом деле может дать вам очень подробные ответы для каждого сценария. Какую проблему вы пытаетесь решить здесь или в чем проблема? acejavelin 5 лет назад 0
Я исправил вопрос только для UEFI ransh 5 лет назад 0

1 ответ на вопрос

5
grawity

Обычный ПК 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, если требуется большая гибкость.)

Очень хороший и понятный ответ! Hennes 5 лет назад 0

Похожие вопросы