Inhaltsverzeichnis

Supergrub2disk

Supergrub2disk kann sehr hilfreich sein wenn man z.B. den Bootloader wiederherstellen muß.
Damit kann man aber auch div. ISOs booten, die auf einem USB-Stick liegen.

Im folgenden wird die installation von Supergrub2disk auf einem USB-Stick beschrieben.
Weitere Dokumentationen befinden sich unter https://www.supergrubdisk.org/wiki/SuperGRUB2Disk

USB-Stick vorbereiten

Zunächst partitionieren wir den Stick mit

parted /dev/<USB-Device>

Hier nun alle Partitionen löschen, dann eine neue Partitionen mit FAT32 (LBA) erstellen.
Der Boot-Partition setzt man noch die Flags „boot“ und „esp“ (für UEFI).
um Schluß die Einstellungen schreiben lassen und dann cfdisk verlassen.

Nun formatieren wir die neue Partition. Vorher müssen wir den Stick aber erst einmal entfernen und danach wieder einschieben, damit
Linux die neue Partition erkennt.
Nun folgendes eingeben um die Partition mit FAT32 zu formatieren

mkfs.vfat -F 32 -n USBBOOT /dev/<USB-Device-Partition>

Erneut den USB-Stick herausnehmen und wieder einstecken. Jetzt wird der Stick automatisch nach /media/<USER>/USBBOOT gemountet.

Grub installieren

Da wir Supergrub2disk verwenden müssen wir auch Grub2 auf dem Rechner installiert haben.

grub-install --version

Version muß größer „0,97“ sein. Grub2 kann folgendermaßen installiert werden

apt-get install grub2

Jetzt Grub installieren mittels

grub-install --root-directory=/media/<USER>/USBBOOT /dev/<USB-Device>

WICHTIG: Hier wird das unterverzeichnis boot nicht angegeben, da grub-install es selbst anlegt!

UEFI

Folgende Schritte für UEFI zusätzlich zu den oberen ausführen.

Für UEFI benötigt man eigentlich eine Partitionstabelle vom Typ GPT, und eine FAT32 Partition.
Dies war bisher bei mir nicht nötig, die MSDOS-Partitionstabelle funktioniert auch unter UEFI.
Wenn dies nicht der Fall sein sollte, einfach den USB-Stick leeren und mit einer GPT-Partitionstabelle sowie einer FAT32-Partition versehen.

Danach kann der Bootloader installiert werden.

apt-get install grub-efi-amd64
grub-install --target x86_64-efi --removable --boot-directory=/media/<USER>/USBBOOT/boot --efi-directory=/media/<USER>/USBBOOT /dev/<USB-Device>

Wenn grub-install „Installation finished. No error reported.“ ausgibt, kann man weitermachen.
Wenn man zusätzlich UEFI mit Secure Boot nutzen möchte, dann müssen noch diese Programme nachinstalliert werden.

apt-get install linux-signed-generic  grub-efi-amd64-signed  shim-signed

Nun kann dem Grub-Installationsbefehl noch einen Parameter mitgegeben.
Der Aufruf sieht dann wie folgt aus (die Installation des Bootloaders dauert dann etwas länger).

grub-install --target x86_64-efi --removable --boot-directory=/media/<USER>/USBBOOT/boot --efi-directory=/media/<USER>/USBBOOT /dev/<USB-Device>

Hierbei wird der Bootloader mit einem, für das UEFI Secure Boot, vertrauenswürdigen Schlüssel signiert.
Weiterhin muss auch der Kernel signiert werden, damit das Betriebsystem bootet.
Weitere Infos befinden sich für ubuntu unter Secure-Boot-nachruesten und EFI_Grundlagen#Secure-Boot.

Die folgenden Schritte zum kopieren der GRUB-Module sind ab der Supergrub2disk Version 2.01RC1 nicht mehr nötig.
(ACHTUNG: Versionierungnummer hat sich später von 2.01 wieder zu 2.00 geändert)
Damit man nun noch die diversen Module von Grub nutzen kann (loopback, lvm, ext3,…) kopiert man die UEFI-Kompatiblen Module in den Grub-Ordner.

cp -r /usr/lib/grub/x86_64-efi /media/USBBOOT/boot/grub

Diese Module lassen sich allerdings aktuell noch nicht im Secure Mode laden. Diesen Modus muss man also noch ausschalten.

Supergrub2disk anpassen

Das Supergrub2disk-ISO mounten und den Inhalt auf den USB-Stick kopieren.

mount <PFAD-ZU-ISO>/super_grub_disk_<VERSION>.iso /<ISO-MOUNTPOINT> -o loop
cp -r <ISO-MOUNTPOINT>/* /<Pfad zu USB-STICK-MOUNTPOINT>

Boot ISOs

Im Rootverzeichnis des USB-Sticks den Ordner boot/boot-isos erstellen
Loopfähige ISOs in diesen Ordner kopieren.

Zum Schluß den USB-Stick unmounten und dann damit booten

umount <Pfad-ZU-USB-STICK>

Tips zu Distries

Diverse ISOs brauchen einige Anpassungen in der „grub.cfg“ oder im Verlauf des Bootens.
Hier sind einige Tips aufgeführt.

Ubuntu Server

grub.cfg Zeilen

menuentry "Ubuntu Server 32bit" {
 loopback loop $root/ubuntu-12.04-server-i386.iso
 linux (loop)/install/vmlinuz file=$isofile/preseed/ubuntu-server.seed iso-scan/filename=$root/ubuntu-12.04-server-i386.iso quiet noeject noprompt splash --
 initrd (loop)/install/initrd.gz
}

Nachdem mit dem Stick gebootet wurde, zunächst die Sprache und das Tastatur-Layout auswählen.
Nun mit ALT+F2 in die Konsole wechseln und hier die Partition mounten in der sich die ISO-Dateien befinden.
nun folgendes mounten:

mount -o loop <PFAD_ZU_ISO> /cdrom

Danach mit exit wieder in abmelden und mit ALT+F1 in den Installer wechseln.
Dieser ist sicherlich schon fehlgeschlagen da er nach der Sprachauswahl die CD durchsuchen möchte.
Hier einfach mit „weiter“ bestätigen und danach den Punkt nach dem „CD-ROM Einbinden“ auswählen.

Memdisk

Manche Images lassen sich per memdisk starten. Es ist im Paket syslinux enthalten und kann in den ../boot/boot-isos Ordner kopiert werden.

apt-get install syslinux
cp /usr/lib/syslinux/memdisk <PFAD_ZU_USB-STICK-MOUNTPOINT>/boot/boot-isos

Testen mit qemu

Um den Stick mal eben zu testen, könnte man diesen in einen PC stecken und davon dann booten.
Dies ist zwar einfach, dauert aber länger und der Stick wird immer wieder abgezogen und wieder eingesteckt.

Man kann aber auch diesen Test virtuell z.B. mit qemu-kvm machen.

qemu installieren

apt-get install qemu-kvm

Nach der Installation verlinken wir das jew. qemu Architektur Binary.

ln -s /usr/bin/qemu-system-<ARCHITEKTUR> /usr/bin/qemu

Virtuelle Maschine starten

Zunächst muss der Stick unmountet werden.

umount /dev/<GERÄTEPARTITIONEN>

Danach einfach so starten

qemu -hda /dev/<GERÄT>

qemu mit UEFI

sudo apt-get install ovmf qemu-kvm

Danach wie folgt starten:

qemu-system-x86_64 --bios /usr/share/qemu/OVMF.fd -hda /dev/<GERÄT>