Universal stand-alone grub für BIOS und EFI auf USB flashkey und internen HDD und SSD

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Achtung!

Sicherheitshinweis:
Ein wie hier beschrieben verwendeter grub ist in Bezug auf Sicherheit wie ein Fremdpaket zu betrachten, da die Patches nicht mehr automatisch einfließen. Im Internet lassen sich Hinweise auf eine Sicherheitslücke 🇩🇪 in grub Versionen 1.98 (12/09) bis 2.02 (12/15) finden.

Für den gefahrlosen Umgang mit den Partitionierungswerkzeugen empfiehlt sich die Verwendung eines LiveSystems bei gleichzeitiger Entfernung aller Datenspeichermedien.

An verschiedenen Stellen ist die Bezeichnung für den verwendeten flashkey explizit mit sdd angegeben. Bei Verwendung der hier genannten Befehle ist unbedingt die jeweils den eigenen Gegebenheiten entsprechende Device-Bezeichnung zu wählen.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Partitionierung von Datenträgern

  3. Im Terminal arbeiten

  4. Mit dem Texteditor arbeiten

  5. Einbinden von Dateisystemen

  6. mit Root-Rechten arbeiten

Inhaltsverzeichnis
  1. Vorwort
  2. Zweck
  3. Voraussetzungen
  4. Vorbereitung
    1. Partitionieren des flashkey
    2. Hybrid MBR anlegen
  5. grub installieren
    1. weitere Partition(en) für die iso-Datei ...
    2. grub.cfg vervollständigen
    3. Hintergrundbild in grub
  6. Hinweis zum Gebrauch als Installationsmedi...
  7. Verwendung im PC als stand-alone grub
    1. Vor- und Nachteile
    2. Installation
    3. Hinzufügen von O/Sen
  8. Benutzung des stand-alone grub und Einschr...
  9. Problembehebung
  10. Anhang
  11. Links
      1. intern
      2. extern

Vorwort

Wiki/Icons/usb.png Grub ist ein sehr vielseitiger Bootloader für PC-Betriebssystem - vornehmlich Linux -, und findet u.a. Einsatz bei Ubuntu. Dabei wird er während der Installation automatisch mit installiert und über Skripte konfiguriert.

Allerdings hat Grub durchaus weitere Fähigkeiten:

Diese Eigenschaften kommen hier zum Einsatz.

Die Einführung von EFI und Grubs Fähigkeit, auch bei solchen Konfigurationen, welche ganz andere Voraussetzungen als bei BIOS/MBR erfordern, booten zu können, führt bei den gängigen USB-Bootstick Erstellern zur Notwendigkeit, sich entscheiden zu müssen: Entweder EFI oder BIOS.

Für das Erzeugen eines Live-USB flashkey werden (hier bei ubuntuusers.de) meistens zwei Vorgehensweisen empfohlen:

  1. Basis O/S Windows: ▶ Rufus 🇩🇪 ( -> Download ⮷)

    • kann fast alles, außer Persistenz (kann man aber bequem unter Linux LiveSystem einrichten). Anmerkung: Das Einrichten einer casper-rw Datei gem. externem Link konnte nicht erfolgreich nachvollzogen werden.

  2. Basis O/S Linux: ▶ dd ( -> Live-USB-Stick-erstellen)

    • gesamter verfügbarer Speicherplatz ist belegt.

Zweck

Im Artikel wird beschrieben, wie man einen Live-USB flashkey erstellen kann, der sowohl auf BIOS, wie auch auf EFI Sytemen lauffähig ist. Ferner kann der flashkey um Persistenz erweitert werden, ggf. vorhandener freier Speicherplatz kann nach Belieben Verwendung finden, u.a. natürlich für verschiedene iso-Dateien.

Voraussetzungen

Vorbereitung

Hinweis:

Anbei eine Liste der bei der Erstellung und Erprobung dieser Seite verwendeten Hardware

Partitionieren des flashkey

Zum Partitionieren eignet sich sowohl das im aktuellen Ubuntu-LiveSystem vorhandene GUI-Programm gparted wie auch das CLI-Programm gdisk. Für die Einrichtung des virtuellen MBR wird gdisk benötigt.

cruzer-mit-bios_grub.png
cruzer flashkey mit bios_grub und weiterer 4. Partition

Auf dem Datenträger müssen Partitionen angelegt werden. Dazu ist zunächst eine Partitionstabelle notwendig, entweder MBR/MPT oder GPT (bei Wechsel des Partitionsschemas (MBR/MPT -> GPT) s. Problembehebung). Je nachdem unterscheiden sich die fertigen Datenträger um genau eine unformatierte Partition von 1M Größe am Anfang.

Die Partitionen können z.B. mit gparted angelegt werden.

# Dateisystem Größe Markierung Name GPT MBR/MPT
1 unformatiert 1M bios_grub - Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-cancel.png
2 fat32 50M esp - Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-ok.png
3 grub-lesbar 50M - beliebig Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-ok.png
4 und weitere Partition(en) z.B. für die iso-Datei, casper-rw usw. später Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-ok.png

-> siehe unter anderem: GRUB 2/Grundlagen (Abschnitt „MBR-mit-GUID-Partitionstabelle-GPT“)

Anmerkung: Die 50M sind in beiden Fällen etwas überdimensioniert, ~16MB sind aber erforderlich (eine fat16 Partition hat min. 16 MiB), mit Hintergrundbild entspr. mehr. In die 3. Partition werden im Falle MBR/MPT die grub-Dateien geschrieben --boot-directory=, sie darf aber auch weitere Dateien enthalten, z.B. die iso-Dateien. Die erforderliche Größe ist dann entsprechend zu wählen. Die grub- Dateien können aber auch auf die esp Partition - z.B. in ein eigenes Verzeichnis - geschrieben werden. Beide jeweiligen grub-Dateien belegen je mit einer simplen grub.cfg knapp 13 MiB.

Die jeweiligen Markierungen für die Partition 1 und 2 erreicht man nach dem Erstellen mittels rechte Maustaste und entsprechender Auswahl.

Alternative Einrichtung mit gdiskentspr._Terminalausgabe

Hybrid MBR anlegen

Hinweis:

Der folgende Abschnitt wird ausschließlich für einen Datenträger mit GPT gebraucht, für MBR/MPT ist er obsolet.

Damit man ein Speichermedium mit GPT-Partitionierung wie ein MBR-partitioniertes Gerät verwenden kann, wird ein sogenannter virtueller MBR benötigt. Dazu wird gdisk verwendet.

Der Programmaufruf erfolgt mit

sudo gdisk /dev/sdX  # X steht für den flashkey, zu ermitteln mit parted -l 

Befehl/Taste Ausführung/Ergebnis Übersetzung
r Recovery/transformation Untermenü für Wiederherstellung bzw. Transformation
h hybrid mbr erzeugen eines virtuellen MBR in einer GPT Umgebung
1 2 3 to be added to the hybrid MBR GPT-Partition(n) zum hybrid MBR hinzufügen
n Place EFI GPT (0xEE) partition first in MBR Partitionstyp "efi"
Partitionen 1-3 hinzufügen, Vorgaben verwenden, bootflag: für 1 und 2: n, 3: y
x Recovery/transformation Untermenü für Wiederherstellung bzw. Transformation
h hybrid mbr erzeugen eines virtuellen MBR in einer GPT Umgebung
w Final checks complete. About to write GPT data. letzte Überprüfung. GPT-Informationen werden geschrieben
y Do you want to proceed? wollen Sie weitermachen
OK; writing new GUID partition table (GPT) to /dev/sdd.

Eine entsprechende Befehlsfolge kann man sich hier ▶ Terminalausgabe_virtMBR ⮷ ansehen

grub installieren

Die Installationsdateien für grub unter EFI und grub unter legacy werden in getrennte Partitionen geschrieben, das hat den Vorteil, die jeweiligen grub.cfg-Dateien getrennt von einander konfigurieren zu können; z.B. durch unterschiedliche Hintergrundbilder zwecks Unterscheidung schon beim Start, ob sich der PC im EFI oder im legacy Modus befindet. Statt eines Bildes kann man auch einen quasi "leeren" menuentry verwenden (s.u.).

  1. für EFI

    • die esp (/dev/sdd2) Partition einhängen nach /mnt, nach Gebrauch aushängen.

    • im LiveSystem ist grub-efi nachzuinstallieren

    • grub installieren

      sudo grub-install --target=x86_64-efi --recheck --removable --efi-directory=/mnt --boot-directory=/mnt/boot 
    • mit einem Texteditor eine Datei grub.cfg anlegen und unter /mnt/boot/grub speichern

      • beispielhafter Inhalt, noch ohne Starteintrag für ein Ubuntu

        menuentry "efi/pc" {   # dieser Eintrag dient lediglich der Schnellen Erkennung, in welchem Modus auf dem Rechner gebootet wurde
        	set-root=(hd0,gpt2)  # ohne 'gültige' Zeile keine Anzeige
        }
        menuentry "stop" {
        	halt
        }
    • der flashkey kann so schon auf einem EFI-PC getestet werden, grub erscheint mit dem o.g. Menüeintrag "efi/pc"

  2. für legacy

    • die biosgrub-Dateien (/dev/sdd3) Partition einhängen nach /mnt, nach Gebrauch aushängen.

    • grub installieren

sudo grub-install --target=i386-pc --recheck --removable --boot-directory=/mnt/boot /dev/sdd 

weitere Partition(en) für die iso-Datei und z.B. Persistenz

Für die iso-Datei(en) wird eine ausreichend große Partition benötigt, vorzugsweise mit ntfs Dateisystem, weil sie dann auch von einem Windows aus nutzbar ist.

Soll ein persistenter Bereich (zum Speichern von Einstellungen, Programmen, Dateien..., Größe min. 300 MiB) geschaffen werden, benötigt man auch ein Partition mit dem Label "casper-rw". Eine solche wird nach Anlegen mit gparted mit diesem Befehl eingerichtet

sudo mkfs.ext3 -b 4096 -L casper-rw /dev/sdxy 

Im menuentry wird die Zeile linux (loop)/casper/vmlinuz boot=casper... durch den Kernelparameter "persistent" erweitert.

In dem unten aufgeführten Link Persistenten_USB-Live-Stick_im_BIOS-Modus_erstellen stehen sehr nützliche Hinweise zur Verwendung der Persistenz (Stichwort: Aktualisierung)

grub.cfg vervollständigen

Beispielhaft hier ein Menüeintrag für die aktuelle Ubuntu LTS-Version "Bionic Beaver"

menuentry "ubuntu-18.04-desktop-amd64 live " {
	set root=(hd0,gpt4)
	loopback loop /ubuntu-18.04-desktop-amd64.iso
	linux (loop)/casper/vmlinuz boot=casper  ramdisk_size=2097152 root=/dev/ram rw locale=de_DE bootkbd=de console-setup/layoutcode=de iso-scan/filename=/ubuntu-18.04-desktop-amd64.iso
	initrd (loop)/casper/initrd.lz 
}
# ramdisk_size=2097152 root=/dev/ram rw
und
#locale=de_DE bootkbd=de console-setup/layoutcode=de
sind optional

Hintergrundbild in grub

Wenn grub verschönert werden soll - z.B. mit einem Hintergrundbild -, sind eine Reihe Eintragungen in den jeweilige grub.cfg erforderlich. Sie werden jeweils vor die menuentry geschrieben.

Hinweis zum Gebrauch als Installationsmedium

Soll ein so per loopback gestartetes LiveSystem zu Installationszwecken auf dasselbe device benutzt werden, funktioniert das nur, wenn das /isodevice ausgehängt wird, anderenfalls stürzt ubuquity ab. Das Aushängen gelingt mittels

sudo umount -l -r -f /isodevice 

Trotz ausgehängentem /isodevice ist auch so eine nachträgliche Änderung an den Partitionen nicht möglich, für die Installation in so einem Fall müssen die gewünschten/erforderlichen Partitionen bereit vorher angelegt sein.

Verwendung im PC als stand-alone grub

Die oben beschriebene Installation auf einem flashkey kann in gleicher Weise auch auf einer HDD/SSD zum internen Gebrauch auf einem EFI-System durchgeführt werden. Man erhält damit einen grub, der unabhängig von den Skripten eines installierten Linux betrieben werden kann.

Vor- und Nachteile

Installation

Zunächst wird für ein wie oben beschrieben installierten stand-alone grub ein neuer Booteintrag im nvram angelegt

sudo efibootmgr --create --disk /dev/sdX --part Y --label "stand-alone-grub" --loader \\boot\\grub\\x86_64-efi\\grub.efi # X und Y entsprechend anpassen 

efibootmgr -v gibt Auskunft über das Ergebnis. Ggf. ist dieser Eintrag zu "aktivieren" mit

sudo efibootmgr -b <hex#> -a 

Um die Benutzung des "efi" Bootmenüs zwecks Booten des gewünschten Eintrags zu vermeiden, setzt man die Reihenfolge entsprechend mit

sudo efibootmgr -o <hex#> 

Hinzufügen von O/Sen

Wird zu so einer Konstellation ein Windows hinzugefügt, läßt sich bezüglich Bootloader nur im Nachhinein eine entsprechende Anpassung bewerkstelligen

  1. Windows Boot Manager inaktiv setzen sudo efibootmgr -b <hex#> -A

  2. Reihenfolge wieder auf den stand-alone grub einstellen

Beim Hinzufügen eines Ubuntu kann man ganz auf die Installation des zugehörigen grub verzichten (ubiquity -b), dann kann man allerdings lediglich mittels der SymLinks booten und hat den Nachteil, nicht auf ältere als den unmittelbar vorletzten kernel zugreifen zu können. Leider wird bei dieser Vorgehensweise - anders als in einem MBR/MPT System - dabei nämlich kein grub.cfg-file erzeugt.

Bei einer grub-Installation in einen (partitionstechnisch freigehaltenen) "PBR" werden

  1. unerwünschten Einträgen im nvram nicht verhindert, somit sind die dann genau wie bei Windows nachträglich zu entfernen

  2. gibt es eine Fehlermeldung

    Fehler: Enviroment-Block ist zu klein
    Beliebige Taste drücken, um fortzusetzen...

    die allerdings bei 2MB freiem Platz vor der Partition nicht auftritt.

Benutzung des stand-alone grub und Einschränkungen

Je nach dem, in welchem Modus dieser flashkey oder die entsprechende Platte gestartet wird (EFI/legacy) kann man vom Menü aus unterschiedliche O/S starten

Problembehebung

  1. Beim Partitionieren - besonders wenn ein und derselbe flashkey wechselweise mit msdos und GPT Tabelle verwendet werden soll, ist ein vollständiges Löschen (dd if=/dev/zero...) opportun. Alternativ kann dazu auch gdisk verwendet werden (sudo gedisk /dev/sdX -> x -> z). Änderungen müssen dem kernel mitgeteilt werden; reboot oder partprobe /dev/sdx.

  2. der flashkey ID-2: USB /dev/sdb model: USB_DISK size: 4.0GB konnte mit gdisk nicht richtig partitioniert werden, Partitionen 2 und 3 blieben unformatiert trotz entsprechender Angabe. Wurde mit gparted nachgeholt.

  3. der flashkey ID-1: USB /dev/sda model: Cruzer size: 8.1GB bootet am Thinkpad 520 im EFI Modus, nicht aber im legacy Mode. Am TMH 4440 und auch an einem Acer Aspire 5670 bootet er im BIOS-Modus

  4. der flashkey ID-3: USB /dev/sdc model: Slim_Line size: 61.9GB bootet überhaupt nicht am Thinkpad 520, wohl aber im BIOS Modus am TMH 4440.

  5. bei einer Installation im EFI-Modus von Xerial Xenus auf einer leeren Platte wird nicht automatisch eine erforderliche esp angelegt, dieses ist entsprechend von Hand vorzubereiten.

Anhang

Anbei ein minimales Image "EWMS.img" eines USB flashkey EWMS-1 ⮷ und EWMS-2 ⮷. Zu verwenden, wie in der Diskussion beschrieben