13

Моя идея состоит в том, чтобы создать 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 для диска и флаг загрузки gpt legacy boot - все еще получаю эту ошибку, есть идеи?

Мой раздел 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 моего скомпилированного Syslinux 6.02 в первые 440 байт.

В разделе parted 3.2 я вижу, что мой раздел 2 имеет флаг boot и legacy_boot .

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

Оно живое!

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


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

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


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

Обновить:

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

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

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

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

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

2 ответа2

9

Это возможно, и очень часто это делается как с внешними 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 . Все загрузчики ОС и приложения будут храниться в подкаталоге ниже EFI под названием BOOT . Для каждой поддерживаемой архитектуры процессора в каталоге BOOT должен быть только один исполняемый образ EFI. Чтобы съемные носители были загрузочными в соответствии с EFI, они должны быть собраны в соответствии с правилами, изложенными в разделе 3.4.1.1.

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


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

1

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

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

  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

Вуаля.

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