Ist ein hybrider Linux USB-Stick für UEFI & Legacy BIOS möglich?

14

Meine Idee ist es, mit Lubuntu einen USB-Boot-Stick zu erstellen, der auf einem älteren BIOS-Laptop und einem neueren UEFI-System booten kann.

Dies wäre recht einfach, wenn der Stick als Legacy-Startgerät eingerichtet wäre, aber ich möchte, dass es sich um ein UEFI-fähiges Gerät handelt.

  1. Macht das überhaupt Sinn ?! Oder habe ich das UEFI-Konzept fürchterlich falsch verstanden?
  2. Bei Bedarf kann es zwei verschiedene Linux-Installationen geben (eine für UEFI, eine für Legacy, aber beide auf demselben Laufwerk).
  3. Starten Sie ein GPT-Gerät auf einem älteren BIOS - funktioniert das?

Ich kann nicht klar sehen, es ist vielleicht eine bessere Idee, einen separaten älteren Linux-Boot-Stick zu haben, aber ich bin neugierig, die Grenzen zu erkunden :)

Ist meine Idee eines hybriden Linux-UEFI-Boot-USB-Sticks, der mit älteren BIOS-Versionen funktioniert, möglich?


(3) scheint unter Linux mit grub http://www.rodsbooks.com/gdisk/booting.html möglich zu sein

Außerdem habe ich eine EF00-Partition auf dem Stick, abgesehen von einer Swap-, Fat32- und zwei Ext4-Partitionen.


(1) scheint auch möglich zu sein http://www.rodsbooks.com/bios2uefi/

Diese Anleitung ist jedoch seit 2012 einige Zeit vergangen - hat jemand ein Arbeitsbeispiel, das einfacher ist?


Für andere Forscher dieses Themas:

Booten von Windows 7 von einer GPT-Festplatte auf einem Nicht-EFI-Motherboard Gibt es eine Möglichkeit, Windows 7/8 über das BIOS unter GPT zu booten?

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


AKTUALISIEREN:

Ich habe es geschafft, den UEFI-Teil einschließlich des sicheren Boot-Setups mit rEFInd zu erstellen.

Nach den gegebenen Ratschlägen habe ich auf mein Laufwerk ddkopiert gptmbr.bin, was nun zumindest auf einem BIOS-System etwas zu bewirken scheint: "Dies ist keine bootfähige Diskette"

Ich habe jedoch den Rat befolgt und das pmbrFlag für die Festplatte und das Gpt- legacy bootFlag gesetzt. Erhalten Sie immer noch diesen Fehler, irgendwelche Ideen?

Meine ESP-Partition ist die zweite Partition auf der Festplatte und wird mit EFI-Dateien eingerichtet.

Die Einrichtung:

  • 64 GB Speicherplatz
  • GPT-Partitionstabelle
  • Auf dem Datenträger ist das PMBR-Flag gesetzt
  • Die erste Partition beginnt bei 16 MB und hat ungefähr 45 GB, eine fat32-Primärgröße für Daten
  • Die 2. Partition startet um die 45 GB und ist das EFI-System (fat32) mit einem funktionierenden RefInd-Setup
  • Die 3. - 5. Partition ist das Zuhause (ext4), Swap und Root (ext4) meines arbeitenden Lubuntu 14.04.1

Mit habe ddich das gptmbr.binvon mir kompilierte 6.02 Syslinux auf die ersten 440Byte kopiert.

Unter Teil 3.2 kann ich sehen, dass meine Partition 2 ein bootund legacy_bootFlag hat.

Während des Startvorgangs erhalte ich keine Boot - Diskette gefunden - wenn ich mein 5. anstelle der zweiten Partition festgelegt, dass legacy_bootich bekommen OS fehlt

Es lebt!

(Als meine alte Frage gelöscht wurde /ubuntu//q/516730/319747 )


Ich vermute, dass ich einige der *.c32und andere Dateien auf meinem EFI (wo ?!) oder auf meiner Root-Partition ( ?!) In einen Syslinux- Ordner kopieren muss /boot/syslinux, damit es funktioniert - habe ich recht? Welche Dateien sind wichtig?

Außerdem werde ich diese syslinucx.cfgDatei wohl auch brauchen - oder?


Mein Ziel wäre zumindest ein direkter Start des Lubuntu-Systems auf der root ext4-Partition.

Aktualisieren:

Ich habe zwar keine Ahnung warum, habe es aber nicht mit einer manuellen Installation zum Laufen gebracht.

  • Die pmbrFlagge war schlecht und mein UEFI-System konnte den Stick nicht als UEFI booten
  • Das legacy_bootFlag wurde für meine 5. Partition benötigt (Linux Root)
  • Ich musste benutzen extlinux --install /path/to/root/parition
  • Ich musste syslinux.cfgim Syslinux-Ordner unter Boot meiner Root-Partition einen erstellen

Ich habe das alles auf einem zweiten kleineren Stick gemacht und dann versucht, nur den Syslinux-Ordner zu kopieren, hatte aber kein Glück - der extlinux --installscheint obligatorisch zu sein.

Weiß jemand was genau extlinux --installmacht? Kann es manuell gemacht werden oder wie sonst könnten Sie eine neuere Version wie 6.02 installieren, ohne sie auf Ihrem System zu installieren?

Habe meinen Stick mit den im BIOS, UEFI und UEFI SecureBoot erwähnten Partitionen arbeiten lassen, verdammt viel gelernt, fast 2 TB mit dem Abschied getötet, sei vorsichtig und viel Glück.

Scherz
quelle
Dein Link ist kaputt. Hast du deine Geschichte woanders? Ich möchte das gleiche tun. Vielen Dank.
Pvinis
1
@pvinis danke für die Info, ich habe die Frage / das Ergebnis von askubuntu hier zusammengeführt, da es gelöscht wurde
Jook

Antworten:

11

Dies ist möglich und wird häufig sowohl mit externen USB-Sticks als auch mit internen Laufwerken durchgeführt.

In Bezug auf Partitionstabellentypen:

  • BIOS normalerweise nicht braucht jede Partitionstabelle. Es interessiert sich nur für den Bootstrap-Code- Teil, der die ersten 440 Bytes Ihres MBR enthält. (Obwohl es Ausnahmen gibt. Einige BIOS-Implementierungen brechen tatsächlich ab, wenn sie keinen MBR mit einem der üblichen Partitionstypen finden. Hoffentlich sind diese selten.)

    Die GPT-Partitionstabelle ersetzt einen MBR nicht physisch. Sie beginnt immer bei Sektor 1, während sich der MBR in Sektor 0 befindet. Auf einer Festplatte können also beide vorhanden sein. Tatsächlich verfügen die meisten GPT-Festplatten über einen "schützenden MBR", der nur eine einzige Partition enthält, die die gesamte Festplatte abdeckt, um zu verhindern, dass ältere Partitionierungstools nur für MBR die Daten versehentlich zerstören.

    So können Sie zum Beispiel den Syslinux-Bootsektor in Ihrem MBR installieren und booten. (Das  syslinux-install_updateSkript gptmbr.binerledigt dies für Sie, aber Sie können in Ihrem Syslinux-Paket danach suchen , um es manuell zu erledigen.)

    Ähnlich wie das Flag "active" auf MBR-Partitionen sucht Syslinux auf GPT-Partitionen nach dem Flag "legacy BIOS bootable" (Bit 2 - UEFI-Spezifikation 2.4, Abschnitt 5.3.3, Tabelle 20). Das oben genannte Skript setzt dieses Flag auch automatisch, wenn Sie sgdisk(von gptfdisk) installiert haben.

    GRUB kann auch verwendet werden, ist aber etwas nerviger. Da GRUB 2 Teile von sich selbst in die traditionell nicht verwendeten Sektoren 1-62 "einbetten" möchte, würde es eine GPT überschreiben, die am selben Ort gespeichert ist. Daher müssen Sie möglicherweise eine dedizierte Partition von 2 bis 4 MB erstellen und als BIOS-bootfähig markieren, damit grub-installsich eine Einbettungsstelle ergibt.

  • Auf der anderen Seite, die UEFI - Spezifikation hat die Unterstützung für MBR - Partitionstypen erfordern (Abschnitt 12.3.1) und den MBR - Partitionstypen zuweisen 0xEFauf die EFI - Systempartition (siehe Abschnitt 5.2.2).

    Wenn Ihre Festplatte aus irgendeinem Grund nicht mit GPT funktioniert, können Sie dennoch eine EFI-Systempartition auf dem MBR erstellen. Diese wird verwendet, solange das richtige Dateisystem und alle erforderlichen Dateien vorhanden sind (Abschnitt 12.3.1.3):

    Für Wechselmediengeräte darf es nur eine UEFI-kompatible Systempartition geben, und diese Partition muss ein UEFI-definiertes Verzeichnis im Stammverzeichnis enthalten. Das Verzeichnis wird benannt EFI. Alle Betriebssystem-Lader und -Anwendungen werden in einem Unterverzeichnis gespeichert, das nachfolgend EFIals bezeichnet wird BOOT. Für jede unterstützte Prozessorarchitektur im BOOTVerzeichnis darf nur ein ausführbares EFI-Image vorhanden sein . Damit Wechselmedien unter EFI bootfähig sind, müssen die in Abschnitt 3.4.1.1 festgelegten Regeln eingehalten werden.

In Bezug auf Betriebssysteme ist es Linux im Allgemeinen egal, ob es heute vom BIOS und morgen von UEFI gebootet wird. Ich musste meinen Laptop in dieser Woche vielleicht hundert Mal aus dem UEFI-Modus in den "BIOS-Kompatibilitäts" -Modus und zurück neu starten, während ich versuchte, einen Fehler in der 3.17-UEFI-Unterstützung zu finden ...


Beachten Sie, dass der Artikel "BIOS to UEFI Transformation" etwas ganz anderes behandelt. Es wird beschrieben, wie UEFI selbst - eine UEFI-Implementierung mit dem Namen "DUET" - installiert wird , um von einem Nur-BIOS-System aus gestartet zu werden. Es hat nichts damit zu tun, ein Betriebssystem direkt vom BIOS zu booten.

user1686
quelle
+1 - syslinux_install Ich werde das untersuchen, danke für Bestätigung, Bestätigung und neue Eingabe
Jook
Ich habe Ihren Rat befolgt, bin aber beim Setup hängen geblieben, mein mbrscheint in Ordnung zu sein, findet aber meine EFI SystemPartition nicht. Ist es ein Problem, dass es sich um die zweite Partition auf der Festplatte handelt, die ungefähr 45 GB auf der Festplatte startet? Muss ich zusätzlich zum alreadz-funktionierenden EFI-Setup einen spektralen Bereich auf dem EFI einrichten?
Jook
Habe es funktioniert :) Also, danke! syslinux ist ganz nett und hat mich zu gPxe und plopkexec geführt, die ich ein andermal weiter untersuchen werde. Für alle anderen Forscher: askubuntu.com/q/516730/319747
Jook
2

Ja, das ist möglich.

Die Grundidee ist, Ihren USB-Stick wie folgt zu partitionieren :

  1. BIOS-Startpartition (GPT-Typ 1686148-6449-6E6F-744E-656564454649) - 1 MB, kein Dateisystem
  2. EFI-Systempartition (GPT-Typ C12A7328-F81F-11D2-BA4B-00A0C93EC93B) - 200 MiB, VFAT-Dateisystem
  3. Linux-Bootpartition (GPT-Typ 0FC63DAF-8483-4772-8E79-3D69D8477DE4) - 1 GiB, ext4-Dateisystem
  4. Linux-Root- / Home-Dateisystem (GPT-Typ 0FC63DAF-8483-4772-8E79-3D69D8477DE4) - verbleibender Speicherplatz, XFS- oder Btrfs-Dateisystem

Diese Partitionierung ermöglicht es uns, auf Legacy-Systemen zu booten , da bei GPT (aus Gründen der Abwärtskompatibilität) immer noch Platz für einen MBR vorhanden ist und Grub2 über genügend Platz verfügt, um eine mittlere Stufe in der BIOS-Boot-Partition zu installieren. Ältere BIOS kümmern sich nicht um das Partitionsschema und der Grub2 / Linux-Kernel hat keine Probleme, GPT auf älteren Systemen zu verstehen.

Auf UEFI-Systemen ignoriert die UEFI-Firmware den MBR und verwendet die EFI-Systempartition als Einstiegspunkt.

Mit Fedora müssen Sie beispielsweise im Grunde Folgendes tun:

Stellen Sie sicher, dass das Linux-Boot-Dateisystem unter /bootund das EFI-Systempartitions-Dateisystem unter gemountet ist /boot/efi.

Installieren Sie sowohl ältere als auch UEFI-Bootloader (neu):

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

(Neu-) Generieren Sie die Grub-Konfigurationsdateien für Legacy- und UEFI-Startvorgänge:

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

Je nachdem , ob Ihr System in Alt- oder UEFI - Modus gebootet Sie entweder die erste oder die zweite Datei zu reparieren haben und ersetzen (linux|initrd)16mit (linux|initrd)efioder umgekehrt.

Installiere grub in den MBR:

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

Voila.

maxschlepzig
quelle
PS: Ich habe ein Provisioning-Skript geschrieben , das diesen hybriden Ansatz implementiert und somit zur automatischen Erstellung eines solchen USB-Sticks verwendet werden kann.
Maxschlepzig