Леннарт Поттеринг продолжил публикацию идей по переработке компонентов для загрузки 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 как-то попроще было.

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

      С MBR как-то попроще было.

      Только вот Линукс в подавляющем числе случаев его неправильно использует, устанавливая загрузчик в MBR, а не PBR и ломая стандартную цепочку загрузки ещё времён IBM PC и DOS.

      • 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.