Multiboot USB Stick
Die Anleitung kann veraltet sein und kann als Inspiration genutzt werden!
Multiboot USB Stick bauen
Oft benötigt man verschiedene Betriebssysteme als Bootstick, möchte aber nicht für jedes einen eigenen USB Stick bereithalten, oder den einen dauernd überschreiben.
Um das Chaos zu vermeiden, lässt sich relativ schnell ein Multi-Boot-Stick erstellen, der Betriebssysteme wie Linux, Windows und auch diverse Boot CDs bereithält.
In dieser Anleitung wird folgendes getan:
- Partitionstabelle erstellen und Flags setzen
- Partitionen formatieren
- Images herunterladen und auf den Stick kopieren
- Grub (Bootloader) konfigurieren
Folgende Betriebssysteme sind angedacht:
- Ubuntu 22.04 Desktop
- Archlinux
- Windows 10
Vorab möchte ich erwähnen, dass diese Anleitung für Linux gedacht ist. Falls gerade kein Linux zur Hand ist, einfach einen Stick mit Ubuntu vorbereiten und diesen booten.
Alle Befehle sind mit Vorsicht zu verwenden, bei fehlerhafter Handhabung können Daten gelöscht werden. Man sollte also sicher sein, welche Festplatte / USB-Device man verwendet. In diesem Beispiel ist stets von /dev/sda die Rede, weil mein Laptop eine NVME nutzt. Je nach eigener Hardware kann dies anders sein und der USB-Stick z.B. /dev/sd[b,c,d,e…] lauten.
Die meisten Befehle benötigen Root-Rechte, deswegen wurde das oft vorangestellte “sudo” weg gelassen…
USB-Stick ermitteln
# Ubuntu
apt-get update && apt-get install util-linux parted ntfs-3g dosfstools wget
# Archlinux
pacman -Syu util-linux parted ntfs-3g dosfstools wget
# Auflistung aller Disks
lsblk -d
# bei Unsicherheit (auch Partitionen anzeigen)
lsblk
Partitionierung
# -s sorgt für "script"-Modus (keine Rückfragen)
# GPT-Partionstabelle anlegen (für UEFI Boot nötig)
parted -s /dev/sda mklabel gpt
parted -s /dev/sda mkpart primary 1m 2m
# ESP//dev/sda Boot Partition
parted -s /dev/sda mkpart primary 2m 100m
# EXT4 Partition für GRUB (Bootloader) und Isos
parted -s /dev/sda mkpart primary 100m 30g
# Windows Partition
parted -s /dev/sda mkpart primary 30g 40g
Formatierung
# UEFIs ESP Partition muss FAT32 formatiert sein
mkfs.vfat -F 32 /dev/sda2
# Grub liest ext4-Dateisysteme
mkfs.ext4 /dev/sda3
# -f (fast, quick) (für Windows)
mkfs.nfts -f /dev/sda4
Dateisysteme mounten
mount /dev/sda3 /mnt/
cd /mnt/
# Isos werden unter /mnt/boot/iso gelegt (Grub sucht in seinem Root-Dir)
mkdir -p /mnt/boot/{EFI,iso}
# EFI Partition
mount /dev/sda2 /mnt/boot/EFI
# temporärer Ordner für GPT-Parittion 4 (Windows)
mkdir -p /tmp/windows_part
mount /dev/sda4 /tmp/windows_part
Images laden & kopieren
Die Links können und werden nach einiger Zeit veraltet sein. Die aktuellen findet man in Suchmaschinen…
cd /mnt/boot/iso
# Die Links werden zukünftig veraltet oder nicht mehr verfügbar sein, einfach aktuelle Images suchen!
wget https://releases.ubuntu.com/22.04/ubuntu-22.04-desktop-amd64.iso
wget https://mirror.fra10.de.leaseweb.net/archlinux/iso/2022.07.01/archlinux-2022.07.01-x86_64.iso
# Windows Image runterladen (und unter /tmp/ legen)
https://www.microsoft.com/en-in/software-download/windows10
# das Windows.iso liegt nun unter /tmp/windows10.iso
mkdir -p /tmp/win_iso_mount
# ISO read-only unter /tmp/win_iso_mount mounten
mount -o loop /tmp/windows.iso /tmp/win_iso_mount
# Dateien auf die 4. Partition des USB Sticks kopieren
cp -R /tmp/win_iso_mount/* /tmp/windows_part
# danach kann die 4. Partition wieder unmounted werden
umount /tmp/windows_part
Grub installieren
Es wird davon ausgegangen, dass Grub im System installiert ist…
grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sda
grub-install --target=x86_64-efi --recheck --removable --efi-directory=/mnt/boot/EFI/ --boot-directory=/mnt/boot/
Grub-Config schreiben
Vorgefertige Templates findet man im Internet, zum Beispiel hier: https://github.com/hackerncoder/multibootusb/blob/master/grub.cfg.example
Diese kopiert man und legt die Datei unter /mnt/boot/grub/grub.cfg:
wget https://raw.githubusercontent.com/hackerncoder/multibootusb/master/grub.cfg.example -O /mnt/boot/grub/grub.cfg
Danach werden weitere Einträge angelegt, zur Orrientierung habe ich die Stelle mit ### markiert. Darüber und darunter sind die Einstiegspunkte zu erkennen:
# Load MBUSB configuration
if [ -e "$prefix/mbusb.cfg" ]; then
source "$prefix/mbusb.cfg"
fi
### HIER EINFUEGEN
# die UUID des aktuellen RootFS wird ermittelt und in rootuuid gespeichert
probe -u $root --set=rootuuid
# die Disk wird anhand der ermittelten UUID referenziert (für Arch relevant)
set imgdevpath="/dev/disk/by-uuid/$rootuuid"
menuentry "ubuntu-22.04-desktop-amd64.iso" {
insmod ext2
# Die ISO-Datei sollte im Pfad liegen, pruefen!
set isofile="/boot/iso/ubuntu-22.04-desktop-amd64.iso"
loopback loop $isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash
initrd (loop)/casper/initrd
}
menuentry 'archlinux-2022.07.01-x86_64.iso' {
# Die ISO-Datei sollte im Pfad liegen, pruefen!
set isofile='/boot/iso/archlinux-2022.07.01-x86_64.iso'
loopback loop $isofile
linux (loop)/arch/boot/x86_64/vmlinuz-linux img_dev=$imgdevpath img_loop=$isofile earlymodules=loop
initrd (loop)/arch/boot/x86_64/initramfs-linux.img
}
menuentry "Windows 10 (20H2) UEFI" {
# die 4. Partition ist fuer Windows vorgesehen!
set root=(hd0,gpt4)
insmod part_gpt
insmod ntfs
insmod chain
chainloader /efi/boot/bootx64.efi
}
### ENDE
# Grub options
submenu "GRUB2 options ->" {
Dateisysteme umounten
Wenn alles fertig ist, sollte man die Ordnerstruktur verlassen, falls man sich noch in dieser befindet (/mnt/…).
# Wenn alles fertig ist, sollte man die Ordnerstruktur verlassen, falls man sich noch in dieser befindet (/mnt/...).
cd
umount /mnt/boot/EFI
umount /mnt/
sync
Und im Anschluss sollte der Stick genutzt werden können.
Links
MultibootUSB Projekt für Beispielkonfigurationen
Archlinux Wiki
Beispielkonfigurationen für GRUB