ubuntuusers.de

🛈 Aktuell gibt es im Wiki ca. 750 Artikel, die nur für Xenial getestet sind. Dies entspricht ca. 10 % aller Wikiartikel. Damit diese im nächsten Frühjahr nicht alle archiviert werden müssen, ist eure Mithilfe gefragt!

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.

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:

  • kann unabhängig vom O/S betrieben werden

  • kann mittels loop Funktion iso-Dateien direkt booten

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

  • laufendes Linux/Ubuntu (auch LiveSystem), ggf. mit Internetverbindung

  • ein für die gewünschte(n) Distribution(en) ausreichend großer flashkey

  • die Partitionstabelle kann GPT oder MBR/MPT sein

  • die Programme gparted und gdisk sind im LiveSystem vorhanden

  • grub-efi bzw. grub-pc ist je nach System (EFI - legacy) ggf. nachzuinstallieren

Vorbereitung

Hinweis:

Anbei eine Liste der bei der Erstellung und Erprobung dieser Seite verwendeten mit_gdisk_angelegte_Partitionen.png

Partitionieren des flashkey

Zum Partitionieren eignet sich sowohl das im aktuellen Ubuntu-LiveSystem vorhandene GUI-Programm gparted wie auch das CLI-Programm gdisk.

(Hinweis: gdisk funktioniert nicht wie hier erforderlich beim Anlegen von Partitionen → mit_gdisk_angelegte_Partitionen.png)

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 fat12/16/32 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, und dann auch nur, wenn von diesem Datenträger im CSM/"legacy" Modus gebootet werden soll. 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
                rmmod tpm  # erforderlich für das Booten mittels loopback 
        }
        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 
    • mit einem Texteditor eine Datei grub.cfg anlegen und unter /mnt/boot/grub speichern

      • beispielhafter Inhalt

        menuentry "legacy/pc" { # dieser Eintrag dient lediglich der schnellen Erkennung, in welchem Modus auf dem Rechner gebootet wurde
        	set-root=(hd0,gpt3) # ohne 'gültige' Zeile keine Anzeige
        }
        menuentry "stop" {
        	halt
        }
        menuentry "Neustart" {
        	reboot
        }
    • jetzt kann der flashkey auch auf einem PC mit legacy (resp. BIOS) getestet werden, grub erscheint mit dem Menüeintrag "legacy/pc"

Hinweis:

Zur Vermeidung möglicherweise eintretender Konflikte in der Verzeichnisstruktur der esp, wenn nämlich durch eine vorherige Installation im EFI-Modus bereits Verzeichnisse vorliegen, wählt man bei den beiden o.g. Befehlen entsprechend geeignete. Im EWMS (s.Anhang) sind dafür z.B. bios-efi und boot-bios verwendet worden.

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 " {
        insmod part_gpt
	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
}
# insmod part_gpt ist z.B. erforderlich, wenn der Datenträger mit einem GPT Schema versehen ist
# ramdisk_size=2097152 root=/dev/ram rw
und
#locale=de_DE bootkbd=de console-setup/layoutcode=de
sind optional

Hinweis:

Die Anweisung set root=(hd0,gpt4) kann unter Umständen - Wechsel der device Reihenfolge durch Einbau/Anstecken weiterer Geräte - nicht ausreichend sein. Es ist daher ratsam, eine Anweisung search --no-floppy --fs-uuid --set=root <UUID> anzufügen

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.

  • MBR/MPT

    • if loadfont /boot/grub/fonts/unicode.pf2 ; then
        set gfxmode=auto
        insmod gfxterm
        insmod vbe
        terminal_output gfxterm
        if terminal_output gfxterm; then true ; else
          terminal gfxterm
        fi
      fi
      
      #grub_gfxmode=1680x1050
      grub_gfxpayload_linux=keep
      #gfxpayload=1680x1050x32,1680x1050
      insmod jpeg
      
      background_image /boot/grub/sa_2.jpg
      
      
       set color_normal=dark-gray/black
       set menu_color_normal=light-gray/black
       set menu_color_highlight=red/black
    • Die Farben sollten sich geeignet von dem jeweiligen Hintergrund unterscheiden. ▶ Schriftfarben

  • GPT

    • if loadfont /boot/grub/fonts/unicode.pf2 ; then
        insmod gfxterm
        insmod efi_gop
        insmod efi_uga
        set gfxmode=auto
        set gfxpayload_linux=keep
        terminal_output gfxterm
        if terminal_output gfxterm; then true ; else
          terminal gfxterm
        fi
      fi
      insmod png
      background_image /boot/grub/pict3.png
       set color_normal=dark-gray/black
       set menu_color_normal=light-gray/black
       set menu_color_highlight=green/black
  • Man achte auf die unterschiedlichen zu ladenden Module:

    • ⇒ MBR/MPT insmod vbe, insmod jpeg

    • ⇒ GPT insmod efi_gop , insmod efi_uga , insmod png

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

  • Vorteile

    • frei gestaltbares Menü

    • besonders geeignet für Mehrbootsysteme

    • keine parallelen Bootloader bzw. umständliche "Scripterei", um in allen Systemen die kernel-updates zu erfassen

  • Nachteile

    • die entsprechenden Einstellungen sind selbst vorzunehmen

    • es ist etwas aufwendiger, unerwünschte Booteinträge zu vermeiden resp. wieder loszuwerden

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

  • EFI-Modus

    • alle O/S, die im EFI-Modus installiert wurden, können mit den üblichen Verfahren von grub aus geladen werden.

    • O/S, welche auf einer weiteren Platte im BIOS-Modus installiert wurden

      • Windows O/S: nein

      • Linux O/S: ja (insmod part_msdos erforderlich)

  • BIOS/legacy-Modus

    • nur im BIOS/legacy-Modus installierte O/S können gebootet werden

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/sdXxz). Ä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.

  6. mit der neuen Version grub 2.04 (Ubuntu Focal Fossa) ist zum Booten eines iso-files mittels loopback auf einem Rechner im EFI Modus eine Zeile rmmod tpm im entsprechenden menuentry zwingend erforderlich.

Anhang

Anbei ein minimales Image "EWMS.img" eines USB flashkey EWMS-1 ⮷ und EWMS-2 ⮷. Zu verwenden, wie in der Diskussion beschrieben. Achtung: Als Ergibnis sieht der flashkey anders aus, als im Artikel beschrieben. grub-efi und grub-legacy befinden sich beide in der esp in unterschiedlichen Verzeichnissen. Die zugehörigen grub.cfg haben jeweils nur einen Eintrag auf grub.cfg in Partition 2.

intern

extern

Diese Revision wurde am 8. Oktober 2020 11:22 von black_tencate erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Hybrid MBR, GPT auf USB, GRUB_2, stand-alone grub, Bootloader, Live-USB, BIOS, persistent, EFI