Multiboot USB Stick
Hint: If you are not familiar with German language, but you are an experienced Linux user: the only thing you really need is: (multiboot055.sh
Have fun!
Updates:
- 3 Jan 2010:
- Redesign of multiboot-script (multiboot055.sh)
- SliTaz distribution added
- SystemRescueCD updated to 1.3.4
Zielsetzungen
- Es soll ein USB-Stick erstellt werden, von dem verschiedene LiveCDs / Betriebssystem-Installationen / Tools gebootet werden können.
- Der USB-STick soll mit einem Standard vfat-Dateisystem formatiert werden, damit er problemlos sowohl unter Linux als auch unter anderen Betriebssystemen (z. B. Apple, Windows) gelesen werden kann.
- Die verschiedenen bootbaren Systeme sollen als iso-Dateien auf dem Stick abgelegt werden, sodass sie problemlos aktuell gehalten werden können und keine komplizierteren Operationen zum entpacken usw. erforderlich sind.
- Das Dateisystem auf dem USB-Stick soll schön übersichtlich sein: Es soll einen Ordner “data” enthalten, in den beliebige Daten gespeichert werden können, und einen Ordner “boot”. Dieser wiederum soll einen Ordner “iso” enthalten, indem die iso-Dateien abgelegt werden können und einen Ordner “grub”, indem die Dateien des bootloaders grub2 abgelegt werden.
USB-Stick/data /boot/grub /iso - Der USB-Stick soll möglichst einfach aktuell gehalten werden können, hierfür soll ein Shell-Script erstellt werden.
Hardware
Ende März 2009 habe ich mich ein wenig schlau gemacht über die Vorzüge und Nachteile verschiedener USB-Sticks. Wichtig war mir insbesondere eine gute Performance sowohl bei Schreib- als auch bei Lesezugriffen. Ich habe mich dann für den OCZ Rally 2 16GB entschieden, weil er zu diesem Zeitpunkt mit 40 Euro ein optimales Preis-Leistungsverhältinis bot. Die Preise für den Stick sind seitdem im Übrigen überraschenderweise gestiegen, ich habe wohl zum rechten Zeitpunkt gekauft
. Die Geschwindigkeit des Sticks wird mit Lesen: 28MB/s und Schreiben: 15MB/s angegeben und nach meinen eingenen Messungen mit hdparm -t auch knapp eingehalten (Lesen: knapp 26MB/s). Die angegebenen Lese- und Schreibraten werden auch von anderen Nutzern z. B. auf heise.de überwiegend bestätigt. Ich kann den Stick guten Gewissens empfehlen. Einziger Nachteil: Ich verliere immer die blöde Kappe. Also eher ein Stick für ordentliche Nutzer. Bezugsquellen und Preise finden sich z. B. auf heise.de/preisvergleich.
Ersteinrichtung des Sticks
Es sind eigentlich nur zwei (bis drei) Schritte erforderlich:
- Der USB-Stick muss formatiert werden (ein Dateisystem aufgespielt werden).
- Sofern nicht schon vorhanden, müssen die Grub2-Tools auf dem Rechner installiert werden.
- Es muss Grub2 auf dem Stick installiert werden.
# Sofern nicht bereits vorhanden, Grub2 (Version 1.9.7) auf dem Rechner installieren sudo apt-get install grub2 # Device des USB-Sticks (z. B. mit "df -h" ermitteln) DEVICE=/dev/sdb USB_LABEL=MultibootUSB # Dateisystem auf USB-Stick erstellen sudo mkfs.vfat -n $USB_LABEL ${DEVICE}1 # USB-Stick mounten mount ${DEVICE}1 /media/$USB_LABEL # Grub2 auf USB-Stick installieren grub-install --no-floppy --root-directory=/media/$USB_LABEL ${DEVICE}
Distributionen und Tools
Es sollen die folgenden Linux-Distributionen und Tools auf dem Stick installiert werden und gebootet werden können:
Ubuntu (Distrowatch, Wikipedia de en)
Ubuntu ist ein Debian-basiertes Linux, dass sich insbesondere auch für Linux-Anfänger eignet. Es soll in zwei Geschmacksrichtungen auf den Stick:- Ubuntu Desktop 9.10 Karmic Koala 32bit (Oktober 2009)
Die aktuelle 32bit Version von Oktober 2009 – zur direkten Nutzung vom Stick sowie zur Installation - Ubuntu Desktop 8.04.3 LTS Hardy Heron 32bit (April 2008)
Die aktuelle 32bit Version mit Longterm Support – die nächste LTS erscheint im April 2010 (Lucid Lynx)
- Ubuntu Desktop 9.10 Karmic Koala 32bit (Oktober 2009)
Debian (Distrowatch, Wikipedia de en) in der Version 5.03 (Netinstall, Version vom September 2009)
Die Mutter sehr vieler Linux-Distributionen, sehr solide, sehr stabil, sehr frei und auf sehr vielen Plattformen verfügbar … aber deswegen manchmal etwas langsam bei der Einpflege der neuesten, hippen Features.
Auf den Stick soll eine minimale Version, von der aus über das Internet die für eine Installation erforderlichen Pakete nachgeladen werden können.
GRML (Distrowatch, Wikipedia de en) in der Version Hello-Wien vom Oktober 2009
GRML (sprich: “grummel”) ist die eierlegende Wollmilchsau für Systemadministratoren, Geeks, Konsolen-Fans und reisende PC-Doktoren. “GRML eignet sich hervorragend für typische Systemadministratortätigkeiten. Darunter fallen Arbeiten wie Dateisystemchecks, Bootloader-Reparaturen, Hardware-Untersuchungen und Netzwerkdebugging. Aber auch für forensische Untersuchungen kommt grml zum Einsatz.” (Michael Prokopp: grml – Linux für Systemadministratoren und Texttool-User, S. 4)
Parted Magic (Distrowatch, Wikipedia de) mit Clonecilla in der Version 4.7, Dezember 2009
zum einfachen Partitionieren, Vergrößern, Verkleinern, Sichern und Wiederherstellen von Partitionen bzw. ganzen Festplatten (auch von Windows NTFS Partitionen!)
sidux (distrowatch, Wikipedia de en) – Debian hot and spicy
(xfce-Version 2009-03 vom November 2009)
Sidux basiert auf Debians unstable brunch – und versucht, diesen “stabil”, d. h. auch für den produktiven Einsatz nutzbar zu machen. Dazu wird ein eigenes Script zur Verfügung gestellt, das bekannte Bugs und Probleme löst bzw. “work-around”et.
Slax (distrowatch, Wikipedia de en) Version 6.1.2, August 2009
Slackware basiertes Mini-Linux mit modularem Konzept, dass Änderungen auf dem USB-Stick speichern kann. Auf den Webseiten kann man sich seine eigene Version von Slax zusammenklicken – und nur die Applikationen auswählen, die man wirklich braucht (Slax Module Konfiguration).
Linux Mint (Wikipedia de en) – Version 8.0 Helena vom 28. November 2009
Mint basiert auf Ubuntu. Zielsetzung der Distribution: Alles soll möglichst out-of-the-box lauffähig sein. Daher sind Multimedia-Codecs bereits integriert, ebenso SUN-Java, NDIS-Wrapper Unterstützung für WLAN-Karten ist enthalten. Auf der Mint-Webseite wird die weitgehende Nutzer-Beteiligung herausgestellt: “It’s one of the most community driven distributions. You could literally post an idea in the forums today and see it implemented the week after in the “current” release.”
netboot.me (Beschreibung auf heise.de)
Sehr coole Idee: erlaubt es, beliebige Distributionen über das Internet zu booten, man hat die aktuellste Version der Distribution quasi immer in der Hosentasche. Derzeit stehen standardmäßig für eine Installation zur Verfügung: FreeBSD, Debian, Fedora, OpenSuse, Ubuntu und außerdem Tools wie memtest 86+, HDT, GParted, Parted Magic.
Tiny Core Linux (distrowatch, Wikipedia en) – Version 2.7 vom Dezember 2009
Wirklich winziges Linux (10Mbyte) mit grafischer Benutzeroberfläche! Es ist unglaublich, was sich in 10MB alles unterbringen lässt. Zum Surfen in Internet für zwischendurch absolut ausreichend.
SystemRescueCD (distrowatch, Wikipedia de en) – Version 1.3.4
Ein Rettungssystem um zerschossenen Linux- und Windows-Systemen wieder auf die Sprünge zu helfen, bzw. zu retten, was noch zu retten ist. Das Live-System basiert auf Gentoo. Enthält neben anderem die Tools TestDisk zum wiederherstellen verlorener Partitionen und PhotoRec zum wiederherstellen verlorener Daten.
SliTaz (distrowatch, Wikipedia de en) – Version Cooking vom 4. November 2009
Eine wirklich sehr kleine Desktop Distribution (32MB), mit grafischer Benutzeroberfläche (LXDE), wird vollständig ins Ram geladen und ist daher sehr schnell. SliTaz verfügt über einen eigenen Paketmanager, der auf ein eigenes Software Repository zugreift. SliTaz stellt mit TazLito ein Tool bereit, mit dem sich schnell und einfach angepasste, um zusätzliche Pakete erweiterte SliTaz-Live-Cds (ISOs) erzeugt werden können. Wenn ich einmal viel Zeit habe, möchte ich eine SliTaz Live ISO mit den Virtualisierern qemu/KVM, VirtualBox und VMware-Player erstellen. Mit diesen können dann alle Images geladen werden, die sich über Grub2 wiederspenstig zeigen bzw. garnicht als Live-Medium verfügbar sind (wie z. B. Google Chromium OS).
xPUD (Distrowatch, Heise, Heise zur Version 0.92 Golem zur Version 0.92)
xPUD ist insbesondere für Netbooks gedacht: “Die Benutzeroberfläche Plate – gebaut auf der Basis von Mozillas Runtime-Engine Gecko und XUL [der technische Unterbau des Web-Browsers Firefox] – kann Websites nun im Web-App-Modus direkt in der GUI öffnen.” (heise.de, s. o.)
memtest86+ (Wikipedia de en) Version 4.00 vom 22. September 2009
Testet den Arbeitsspeicher eines Rechners mittels Stresstests auf Fehler.
Multiboot USB-Stick via grub.cfg konfigurieren
Was bleibt noch zu tun?
- Download der iso-Dateien der Distributionen und Tools
- Konfiguration des Boot-Menüs von Grub2 über die grub.cfg
Beides erledigt das Shell-Script multiboot055.sh. Im Konfigurations-Block zu Beginn des Skripts müssen ggf. einige Anpassungen vorgenommen werden (z. B. muss das Verzeichnis angegeben werden, das als Mount-Point für den USB-Stick dient). Der Rest des Skripts besteht einerseits aus einem ISO-Konfigurations-Block, in dem für jede Distribution die zum Schreiben der grub.cfg benötigten Variablen gesetzt werden und andererseits aus dem Grub2-Boot-Block, mit dem die Datei “grub.cfg” geschrieben wird. “grub.cfg” ist die neue Konfigurationsdatei, die bei Grub2 die “menu.lst” von Grub ersetzt. Sie wird beim Boot-Prozess aus dem Ordner “/boot/grub” gelesen und u. a. zur Erstellung des Boot-Menüs verwendet.
Hier ein Auszug aus dem Skript:
...
# Ubuntu
UBUNTU_TITLE="Ubuntu Desktop 9.10 Karmic Koala 32bit"
UBUNTU_URL="http://ftp.uni-kl.de/pub/linux/ubuntu.iso/9.10/ubuntu-9.10-desktop-i386.iso"
[ $DOWNLOAD ] && wget $UBUNTU_URL -P $DOWNLOADPATH
UBUNTU_ISO=`basename $UBUNTU_URL`
...
cat <<EOF> $MOUNTDIR/$GRUBPATH/grub.cfg
menuentry "$UBUNTU_TITLE" {
loopback loop $ISOPATH/$UBUNTU_ISO
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$ISOPATH/$UBUNTU_ISO noeject noprompt --
initrd (loop)/casper/initrd.lz
}
...
EOF
Wie unschwer zu erkennen ist, werden im ISO-Konfigurations-Block die Variablen $UBUNTU_TITLE, $UBUNTU_URL und $UBUNTU_ISO gesetzt, die im folgenden Grub2-Boot-Block verwendet werden. Bei einem Update müssen Anpassungen lediglich im ersten Block vorgenommen werden und das Skript erneut ausgeführt werden. Das Skript erstellt beim Ausführen in jedem Fall eine neue “grub.cfg”, die es auch gleich im richtigen Verzeichnis auf dem USB-Stick ablegt und lädt – sofern die Variable DOWNLOAD=1 gesetzt wurde – die ISO-Dateien entsprechend der Konfiguration in den *_URL-Variablen von den Webseiten der Projekte und speichert sie im Verzeichnis $ISOPATH des USB-Sticks.
Die von multibootXX.sh erstellte grub.cfg (update 0.55: grub055.cfg) erzeugt beim booten das nachfolgend abgebildete Boot-Menü:
Boot Menü anhübschen
Grub2 (nicht aber die Dokumentation, die man sich zu diesem Stichwort googlen kann!) macht es leicht, ein angepasstes Boot Menü mit eigenm eingebundenen Bildern zu erstellen. Was wird für ein solches Boot Menü mit eingebundenen Splash Image gebraucht?
- Ein passendes Bild: Dieses kann man sich mit GIMP erstellen. Wenn man die Standardauflösung von 640×480 Pixel verwenden will (und das empfiehlt sich für ein USB Flash Drive, von dem man nicht weiß, auf welcher Hardware es gebootet wird), dann skaliert man sich das Bild entsprechend, und speichert es im *.tga-Format ab (z. B. pmt.tga). Das Bild muss im Grub-Verzeichnis (/boot/grub auf dem Stick) abgespeichert werden. Im selben Verzeichnis muss ein angepasster UTF-8-Zeichensatz abgelegt werden (unicode.pf2).
Ein paar geeignete Bilder habe ich für Sie vorbereitet (nur für den Fall, das Sie Angelina Jolie, Brett Pitt oder Marilyn Monroe meinem Konterfei vorziehen – was ich eigentlich nicht wirklich verstehen kann
- Angelina Jolie (joli.tga)

- Brett Pitt (pitt.tga)

- Marilyn Monroe (monroe.tga, monroe2.tga)
- Angelina Jolie (joli.tga)
- Außerdem muss grub.cfg entsprechend angepasst werden, die folgenden Zeilen sind zu Beginn einzufügen:
if loadfont /boot/grub/unicode.pf2 ; then set gfxmode="640x480" insmod gfxterm insmod vbe terminal_output gfxterm if terminal_output gfxterm; then true ; else terminal gfxterm fi fi insmod tga background_image /boot/grub/pmt.tgaDie Auflösung habe ich konservativ gewählt: der Stick soll ja auch auf alter Hardware problemlos laufen.
Tipps
- Einen Teil der erforderlichen Bootparameter (z. B der Name des Kernels oder der initialen Ramdisk) lassen sich durch einen Blick in das iso-image leicht ermitteln. Hierfür einfach das image mounten:
sudo mount -o loop image.iso /mnt - Manchmal wurde bei meinen Versuchen ein Eintrag in der grub.cfg einfach nicht angezeigt, ich bin nicht dahinter gekommen, warum nicht. Möglicherweise hat mein Editor irgendwelche unfreundlichen unsichtbaren Zeichen an unpassender Stelle eingefügt. Geholfen hat in solchen Fällen jedenfalls, den kompletten Eintrag zu löschen und neu zu schreiben. Ich hasse sowas! Wenn jemand eine Idee hat, was da vor sich geht, er oder sie lasse mich bitte nicht dumm sterben!
- Es macht nicht wirklich Spaß, zum Testen von Änderungen am USB Stick jedesmal den Rechner neu zu booten. Ist auch nicht nötig. Einfach den Emulator und Virtualisierer Qemu benutzen (ubuntuusers.de zu Qemu) Installation von Qemu:
sudo apt-get install qemu-kvmDann den Stick einstecken, z. B. mit “df -h” das Device feststellen, als das seine Partitionen eingebunden sind (z. B. /dev/sdb1), und dann das Device mit dem folgenden Befehl in Qemu booten:
sudo qemu -m 512 -hda /dev/sdbMit qemu kann man übrigens nicht nur Devices booten (wie eine Festplatte oder einen USB-Stick), sondern auch CD-Roms oder ISO-images. Also, man kann bequem die ISO-Images auch direkt mit qemu starten:
sudo qemu -m 512 -cdrom slitaz-cooking.isoBei SliTaz gibt es allerdings ein kleines Problem mit dem Netzwerk. SliTaz erkennt die standardmäßig von qemu emulierte Netzwerkkarte (rtl8139) nicht. Man muss daher von qemu eine andere Netzwerkkarte emmulieren lassen, z. B. eine e1000:
sudo qemu -m 512 -net nic,model=e1000,vlan=0 -net user,vlan=0 -cdrom slitaz-cooking.iso… dann klappt’s auch mit dem Netzwerk
… Das gilt natürlich genauso, wenn man in qemu den USB-Stick bootet und aus dem Boot-Menü des Sticks heraus SliTaz mit Netzwerkunterstützung starten möchte. - Werden Änderungen an der grub.cfg vorgenommen, reicht es nicht, das Qemu-Fenster zu schließen und qemu erneut aufzurufen. Änderungen an der grub.cfg werden dann nicht erkannt, ich habe keine Ahnung, warum nicht. Was hilft, ist, den Stick zu unmounten und erneut zu mounten (oder einfach rüpelhaft den Stick abziehen und neu einstecken). Wer eine Ahnung hat, was da vor sich geht, lasse mich bitte nicht dumm sterben!
Links
- Grub2 Manual (im Grub2 Wiki)
- ubuntu.com: Grub2
- ubuntuforums.org: The Grub 2 Guide
- ubuntuforums.org: Grub2 – 5 common Tasks (Unhide/Hide the Menu, Menu Default Entry, Timeout, Menu Resolution, Add a Splash Image)
- Linux Magazin Artikel “Schöner Booten” (mit Grub2) vom 6.11.2009
- ubuntuusers.de zu Grub2 / Grub2 Konfiguration
- Pawel Konczalski Blog-Eintrag zu Multiboot USB – Dies war für mich der entscheidende Artikel!
- ubuntuforums.org: HOWTO: Booting LiveCD ISOs from USB flash drive with Grub2
- Mikas blog: Boot an ISO via Grub2
- Joshua Price: Mastering Grub2 The Easy Way
- Dedoimedo: GRUB 2 bootloader – Full tutorial
- Forum Discussions

















