Леннарт Поттеринг продолжил публикацию идей по переработке компонентов для загрузки Linux и рассмотрел ситуацию с дублированием загрузочных разделов. Недовольство вызвало использование для организации начальной загрузки двух дисковых разделов с разными ФС, которые монтируются вложенно - раздела /boot/efi на базе ФС VFAT с компонентами прошивки EFI (EFI System Partition) и раздела /boot на базе ФС ext4, btrfs или xfs, на котором размещаются образы ядра Linux и initrd, а также настройки загрузчика.

Ситуация усугубляется тем, что раздел EFI является общим для всех систем, а загрузочный раздел с ядром и initrd создаётся отдельно для каждого установленного дистрибутива Linux, что приводит к необходимости создания лишних разделов при установке в системе нескольких дистрибутивов. В свою очередь необходимость поддержки разных ФС приводит к усложнению загрузчика, а использование вложенного размещения разделов мешает реализации автоматического монтирования (раздел /boot/efi может быть примонтирован только после монтирования раздела /boot).

Леннарт предложил по возможности использовать только один загрузочный раздел и на системах с EFI по умолчанию размещать образы с ядром и initrd в VFAT-разделе /efi. На системах без EFI или если во время установки раздел EFI уже существует (параллельно используется ещё одна ОС) и в нём недостаточно свободного места, можно использовать отдельный раздел /boot с типом XBOOTLDR (раздел /efi в таблице разделов имеет тип ESP). Разделы ESP и XBOOTLDR предлагается создавать в отдельных каталогах (раздельное монтирование /efi и /boot вместо вложенного монтирования /boot/efi), сделать их автоопределяемыми и автомонтируемыми через идентификацию по типу XBOOTLDR в таблице разделов (без прописывания раздела в /etc/fstab).

Раздел /boot будет общим для всех установленных на компьютере дистрибутивов Linux, а разделение специфичных для дистрибутивов файлов будет осуществляться на уровне подкаталогов (для каждого установленного дистрибутива свой подкаталог). В соответствии со сложившейся практикой и требованиями спецификации UEFI в разделе с компонентами EFI используется только файловая система VFAT. Для унификации и избавления загрузчика от усложнений, связанных с поддержкой разных ФС, предлагается использовать VFAT и в качестве файловой системы для раздела /boot, что значительно упростит реализацию работающих на стороне загрузчика компонентов, осуществляющих доступ к данным в разделах /boot и /efi. Унификация позволит равноценно поддерживать оба раздела (/boot и /efi) для загрузки образов ядра и initrd.

// cc-by opennet.ru
// converted with crypt’s opennet autoreposter <<<

  • cocucka
    link
    fedilink
    arrow-up
    0
    ·
    4 years ago

    А как ты иначе сделаешь мультизагрузку? Я всегда думал, что основной загрузчик должен быть в MBR, чтобы биос его дергал, а там уже он либо грузит свою систему, либо chainload’ит другой загрузчик из уже PBR.

    • X512
      link
      fedilink
      arrow-up
      0
      ·
      4 years ago

      Записать в MBR меню выбора загрузочного раздела, так что при выборе запускается соответствующий PBR раздела. Haiku так делает. Само меню влезает в 512 байт вместе с настройками так что не зависит от какой либо установленной операционной системы.

    • kmeaw
      link
      fedilink
      arrow-up
      0
      ·
      4 years ago

      В MBR (точнее в его IPL-области) в случае использования DOS или Windows обычно лежит стандартный загрузчик, который обходит таблицу разделов в этой MBR, находит среди них активный, читает его первый сектор (PBR) и передаёт туда управление.

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

      Если загрузчик большой и сложный, и не влезает в 446 байт IPL, то можно в IPL записать стандартный загрузчик, а большой и сложный код положить на отдельный раздел.

      Пока все придерживаются этой схемы, можно менять как операционные системы (создали новый раздел, прописали загрузчик в его PBR, сделали активным), так и загрузчики в IPL.

      Большинство дистрибутивов Linux в legacy-режиме ставят Grub на /dev/sda, затирая то, что там есть. Если пользователь захочет вернуть свой прежний загрузчик, то обнаружит, что в PBR его раздела с линуксом нет загрузчика, способного загрузить ядро.

      С загрузчиками SYSLINUX, например, такой проблемы не возникает - у него стартовый код помещается в PBR, а основная часть лежит в виде файла ldlinux.sys на ext[234] или FAT.