Возможен ли гибридный USB-накопитель Linux для UEFI и устаревшего BIOS?

14

Моя идея состоит в том, чтобы создать USB-загрузочную флешку с Lubuntu, которая может загружаться на старом ноутбуке с BIOS и более новых системах UEFI.

Это было бы довольно легко, когда Stick был бы настроен как устаревшее загрузочное устройство, но я хочу, чтобы это было устройство с поддержкой UEFI.

  1. Это имеет хоть какой-то смысл ?! Или я неправильно понял концепцию UEFI?
  2. При необходимости возможны две разные установки Linux (одна для UEFI, одна для устаревшего, но обе на одном диске)
  3. Загрузите устройство GPT на устаревшем BIOS - это сработает?

Я не вижу ясности, возможно, было бы лучше иметь отдельную устаревшую загрузочную флешку Linux, но мне любопытно изучить границы :)

Итак, возможна ли моя идея гибридной linux-uefi-boot-usb-stick, которая будет работать с устаревшими BIOS?


(3) представляется возможным для Linux с Grub http://www.rodsbooks.com/gdisk/booting.html

Кроме того, у меня есть готовый раздел EF00, кроме свопа, Fat32 и двух разделов Ext4.


(1) тоже возможно http://www.rodsbooks.com/bios2uefi/

Эта инструкция, однако, с 2012 года, прошло некоторое время с тех пор - есть ли у кого-нибудь рабочий пример, который легче?


Для других исследователей этой темы:

Загрузка Windows 7 с GPT-диска на материнской плате без EFI. Есть ли способ загрузить Windows 7/8 с помощью BIOS на GPT?

http://www.borncity.com/blog/2012/07/25/uefi-emulation-auf-pcs/


ОБНОВИТЬ:

Мне удалось создать часть UEFI, включающую безопасную настройку загрузки с помощью rEFInd.

Следуя данному совету, я использовал ddдля копирования gptmbr.binна свой диск, который теперь, по-видимому, делает что-то в BIOS-системе: «Это не загрузочный диск»

Тем не менее, я последовал совету и установил pmbrфлаг для диска и legacy bootфлаг gpt - все еще получаю эту ошибку, есть идеи?

Мой раздел ESP является вторым разделом на диске и настроен с файлами EFI.

Настройка:

  • 64 ГБ пространства
  • GPT Partitiontable
  • На диске установлен флаг pmbr
  • 1-й раздел начинается с 16 МБ и составляет около 45 ГБ, основной FAT32 для данных
  • 2-й раздел начинается с 45 ГБ и представляет собой систему EFI (fat32) с рабочей настройкой rEFInd
  • 3–5-й раздел - это домашний (ext4), swap и root (ext4) моего рабочего Lubuntu 14.04.1

Используя, ddя скопировал gptmbr.binмой скомпилированный 6.02 Syslinux в первые 440 байтов.

Под Parted 3.2 можно видеть , что мой раздел 2 имеет bootи legacy_bootфлаг.

Во время загрузки я не могу найти загрузочный диск - если я установлю 5-й вместо 2-го раздела, legacy_bootя получу отсутствующую ОС

Оно живое!

(Как мой старый вопрос был удален /ubuntu//q/516730/319747 )


Я предполагаю, что мне нужно скопировать некоторые из этих *.c32файлов и другие в папку syslinux на моем EFI (где ?!) или в моем корневом разделе ( /boot/syslinux?!), Чтобы заставить его работать - я прав? Какие файлы необходимы?

Кроме того, я думаю, мне тоже понадобится этот syslinucx.cfgфайл - верно?


Моей целью будет хотя бы прямая загрузка системы lubuntu в корневой раздел ext4.

Обновить:

Хотя я понятия не имею почему, у меня все заработало - но не с ручной установкой.

  • pmbrфлаг был плохим и запретил мою систему UEFI от загрузки палки , как UEFI
  • legacy_bootфлаг был необходим для моего 5 - я раздела (Linux корневого)
  • Я должен был использовать extlinux --install /path/to/root/parition
  • Мне пришлось создать syslinux.cfgв папке syslinux при загрузке моего корневого раздела

Я сделал все это на вторую меньшую флешку, затем попытался скопировать только папку syslinux, но безуспешно - это extlinux --installкажется обязательным.

Кто-нибудь знает, что именно extlinux --installделает? Можно ли это сделать вручную или как еще можно установить более новую версию, например 6.02, не устанавливая ее в свою систему?

Получил мою работу с разделами, упомянутыми в BIOS, UEFI и UEFI SecureBoot, чертовски непросто, многому научился, чуть не убил 2TB с расставанием, будь осторожен и удачи.

Jook
источник
ваша ссылка не работает .. у вас есть другая история? Я хотел бы сделать то же самое. Благодарю.
Пвинис
1
@pvinis спасибо за информацию, я объединил вопрос / результат от askubuntu здесь, так как он был удален
Jook

Ответы:

11

Это возможно, и очень часто это делается как с внешними USB-накопителями, так и с внутренними накопителями.

Относительно типов таблиц разделов:

  • BIOS обычно не требует таблицы разделов. Его интересует только часть кода начальной загрузки, которая является первыми 440 байтами вашей MBR. (Хотя есть исключения. Некоторые реализации BIOS действительно ломаются, если они не могут найти MBR с одним из обычных типов разделов. Надеемся, что они редки.)

    Таблица разделов GPT физически не заменяет MBR - она ​​всегда начинается в секторе 1, в то время как MBR находится в секторе 0 - поэтому диск может иметь и то, и другое. На самом деле, большинство GPT дисков у есть «защитный MBR» , содержащего только один раздел , который охватывает весь диск, чтобы предотвратить старые MBR только разбиения на разделы инструментов от случайного уничтожения данных.

    Например, вы можете установить загрузочный сектор Syslinux в MBR, и он загрузится. (  syslinux-install_updateСценарий сделает это за вас, но вы можете найти его gptmbr.binв пакете syslinux, чтобы сделать это вручную.)

    Как и флаг «active» на разделах MBR, Syslinux будет искать флаг «legacy BIOS boottable» на разделах GPT (бит 2 - спецификация 2.4 UEFI, раздел 5.3.3, таблица 20); вышеупомянутый скрипт также устанавливает этот флаг автоматически, если у вас установлен sgdisk(из gptfdisk).

    Можно также использовать GRUB, но это немного раздражает. Поскольку GRUB 2 хочет «встроить» свои части в традиционно неиспользуемые сектора 1–62, он перезапишет GPT, хранящийся в том же месте. Поэтому вам может потребоваться создать выделенный раздел размером 2–4 МБ и пометить его как загрузочный BIOS, чтобы grub-installон оказался местом для встраивания.

  • С другой стороны, спецификация UEFI делает требуется поддержка типов MBR разделов (раздел 12.3.1) и присвоить тип MBR раздела 0xEFв системный раздел EFI (раздел 5.2.2).

    Поэтому, если по какой-то причине вы не можете заставить свой диск работать с GPT, вы все равно можете создать системный раздел EFI на MBR, и он будет использоваться, если у него правильная файловая система и все необходимые файлы (раздел 12.3.1.3):

    Для устройств со съемными носителями должен быть только один системный раздел, совместимый с UEFI, и этот раздел должен содержать определенный в UEFI каталог в корневом каталоге. Каталог будет назван EFI. Все OS погрузчики и приложения будут сохранены в поддиректории ниже EFIназываются BOOT. Для каждой поддерживаемой архитектуры процессора в BOOTкаталоге должен быть только один исполняемый образ EFI . Чтобы съемные носители могли загружаться в EFI, они должны быть собраны в соответствии с правилами, изложенными в разделе 3.4.1.1.

Что касается операционных систем, Linux, как правило, не заботится ни о том, загружается ли он из BIOS сегодня или из UEFI завтра. Мне пришлось перезагрузить свой ноутбук из режима UEFI в режим «совместимости с BIOS» и обратно, возможно, сто раз на этой неделе, пытаясь найти ошибку в поддержке UEFI 3.17 ...


Обратите внимание, что статья «Преобразование BIOS в UEFI» - это совсем другое. В нем описывается, как установить сам UEFI - реализацию UEFI под названием «DUET» - для запуска из системы только с BIOS. Это не имеет ничего общего с загрузкой операционной системы непосредственно из BIOS.

user1686
источник
+1 - syslinux_install Я посмотрю на это, спасибо за подтверждение, заверение и новый вклад
Jook
Я последовал вашему совету, но застрял с настройкой, мой, mbrкажется, в порядке, но не находит мой EFI Systemраздел. Проблема в том, что это второй раздел на диске, начинающийся с 45 ГБ на диске? Должен ли я настроить спектральную секцию на EFI в дополнение к настройке EFI, работающей на Alreadz?
Джук
Работаю :) так что, спасибо! syslinux довольно хорош и привел меня к gPxe и plopkexec, которые я рассмотрю в другой раз. Для других исследователей: askubuntu.com/q/516730/319747
Jook
2

Да, это возможно

Основная идея состоит в том, чтобы разделить GPT на USB-накопителе следующим образом:

  1. Загрузочный раздел BIOS (тип GPT 1686148-6449-6E6F-744E-656564454649) - 1 МБ, без файловой системы
  2. Системный раздел EFI (тип GPT C12A7328-F81F-11D2-BA4B-00A0C93EC93B) - 200 МБ, файловая система VFAT
  3. Загрузочный раздел Linux (тип GPT 0FC63DAF-8483-4772-8E79-3D69D8477DE4) - 1 ГиБ, файловая система ext4
  4. Корневая / домашняя файловая система Linux (тип GPT 0FC63DAF-8483-4772-8E79-3D69D8477DE4) - оставшееся пространство, файловая система XFS или Btrfs

Такое разбиение позволяет нам загружаться на устаревших системах, поскольку в GPT все еще есть место для MBR (из соображений обратной совместимости), а у Grub2 достаточно места для установки некоторой средней ступени в загрузочный раздел BIOS. Устаревшие BIOS не заботятся о схеме разбиения, и у ядра Grub2 / Linux нет проблем с пониманием GPT в устаревших системах.

В системах UEFI прошивка UEFI игнорирует MBR и использует системный раздел EFI в качестве точки входа.

Например, с Fedora вам в основном нужно сделать следующее:

Убедитесь, что файловая система Linux Boot смонтирована, /bootа файловая система EFI - /boot/efi.

(Повторно) Установите как старые, так и UEFI загрузчики:

grub2-pc grub2-efi-x64 shim-x64 efibootmgr

(Повторно) Создайте конфигурационные файлы grub как для устаревшей, так и для загрузки UEFI:

# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfg

В зависимости от того , ваша система загружается в наследство или в режиме UEFI , вы должны установить либо первый или второй файл и заменить (linux|initrd)16с (linux|initrd)efiили наоборот.

Установите grub в MBR:

# grub2-install --target=i386-pc /dev/sd_your_usb_stick_device

Вуаля.

maxschlepzig
источник
PS: я написал сценарий обеспечения, который реализует этот гибридный подход и, таким образом, может использоваться для автоматического создания такой флешки.
maxschlepzig