:Der Superstachel:

Erstellung eines „Multi-Distro-USB-Sticks“

Ihr kennt sicher das lästige Herumschleppen von zahlreichen Live- bzw. Rettungs-CDs. In Zeiten von großen USB-Sticks und Rechnern, welche diese booten können, sind die Silberlinge so überflüssig wie die B..dzeitung von morgen.
Fast jede LiveCD beinhaltet ein Skript, um deren Inhalt auf einen USB-Stick zu verfrachten. Die meisten von ihnen haben aber die dumme Eigenschaft, dass sie den USB-Stick vollständig löschen („Du sollst keine Götter neben mir haben“). Da der Bootmanager GRUB 2 sogar ISOs booten kann, ist es nicht sonderlich schwer mehrere Distributionen parallel auf einen Stick (oder eine schnelle SDHC-/SDXC-Karte!) zu bekommen.

Zur Information: Nach rund 3 Jahren seit der letzten Aktualisierung war die grundlegende Überarbeitung dieser Anleitung nötig, da sich nicht nur lästige Fehler eingeschlichen, sondern inzwischen auch einige Details geändert haben bzw. obsolet wurden. Das geschilderte Verfahren funktioniert (irgendwie), es gibt aber einige „Baustellen“, die ich noch abarbeiten werde. Ich vermute aber, dass der Text möglicherweise niemals fertig wird. :-)

Die folgenden Schritte müssen im root[1]-Kontext durchgeführt werden! Die Agenda ist folgende und sollte nicht in der Reihenfolge vertauscht werden, da das Verfahren sonst nicht funktioniert:

Ich persönlich favorisiere SD-Karten, da sie im Gegensatz zu USB-Sticks einen Schreibschutz-Schalter haben. Mit einem entsprechenden Adapter kann man sie am USB-Port betreiben. Zudem es zahlreiche Rechner gibt, die zwar von USB, aber nicht über den eingebauten Kartenleser booten können. Aber: nicht alle Adapter übertragen die Schreibschutz-Funktion der SD-Karte, so dass Karten oft beschrieben werden können, obwohl der Schreibschutz per Schiebeschalter aktiviert ist! Das ist dann besonders ärgerlich, wenn die Live-Distribution[2] beim Bootvorgang aus irgendeinem Grund crasht und das Dateisystem auf dem Datenträger „dirty“[3] ist. Da hilft es dann nur ein Kartenleser-Modell zu suchen, bei dem die Übertragung funktioniert. Ich besitze drei Adapter eines bekannten Herstellers, bei denen die Schreibschutz-Übertragung bei zwei von ihnen blöderweise nicht funktioniert! Außerdem sind die vom Hersteller behaupteten Geschwindigkeitsangaben bei SD-Karten im Gegensatz zu den Fantasiebeschreibungen bei USB-Sticks aufgrund der bindenden Klassifizierung halbwegs zutreffend.

:Partitionierung und formatierung des Datenträgers:

Zunächst partitioniert und formatiert ihr euren Datenträger. Ggfs. müsst ihr dessen Bezeichner zunächst per fdisk -l ermitteln. Normalerweise heißt eure Festplatte /dev/sda und der Wechseldatenträger /dev/sdb. Ihr könnt diesen z.B. mit dem grafischen Tool gparted[4, 5, 6], welches sich auf zahlreichen Live-CDs befindet partitionieren. Ich persönlich bevorzuge das Konsolenwerkzeug cfdisk[7][8], welches entsprechend diesem Beispiel per cfdisk /dev/sdb gestartet und da es interaktiv funktioniert eigentlich selbsterklärend ist.

Als erstes legt ihr den Typ der Partitionstabelle[9] fest. Z.Zt. kommt ihr mit dem klassischen DOS-Schema („Legacy-MBR“[10]) gut klar (hat nichts mit der Wahl des installierten Betriebssystems zu tun). Bei Datenträgern größer als 2TB werdet ihr zukünftig auf die neuere GUID-Tabelle[11] (GPT) setzen müssen, welche hier aber noch nicht beachtet werden soll. Das klassische fdisk[12, 13] kann allerdings nicht mit GUID umgehen! Vermutlich auch nicht mit aktiviertem (U)EFI[14] (wozu ich nichts sagen kann, da ich diesen Unfug stets abschalte – es gibt bessere und vor allem restriktionsärmere Methoden, um den Bootvorgang des Rechners abzusichern!) Eine GUID/GPT kann mit gdisk[15] gesetzt werden, was derzeit aber wohl noch die Ausnahme sein sollte und daher hier (noch) nicht behandelt wird.

(c) www.linux-praktiker.de: CFDISK Wahl des Partitionsschemas

Wahl des Partitionsschemas

Im zweiten Schritt legt ihr die Partitionen an und könnt diese formatieren (aufgrund der größeren Flexibilität empfehle ich aber, dass lieber anschliessend per Konsole zu tun). Vergesst keinesfalls, dass Bootflag auf der zum booten vorgesehenen Partition zu setzen.

(c) www.linux-praktiker.de: CFDISK Partitionierung

Partitionierung des Datenträgers. Im gezeigten Beispiel wurde eine zweite für Verschlüsselung vorgesehene Datenpartition angelegt.

Aufgrund der flexibleren Möglichkeiten verpasst dem Stick (oder der SD-Karte) per Konsole ein neues Dateisystem. Macht die Wahl des Dateisystems abhängig davon, von welchen Betriebssystemen aus ihr auf den Datenträger zugreifen wollen. Das neue Dateisystem (die alten Daten gehen dabei verloren!) erzeugt ihr auf dem ungemounteten Datenträger z.B. per mkfs.ext3 /dev/GERAET oder mkfs.vfat /dev/GERAET. Bedenkt bitte, dass vfat keine Journalingfunktion[16] besitzt, so dass ihr das Dateisystem im Falle eines Crashs vor dem nächsten Neustart überprüfen solltet, um das Risiko eines Datenverlusts zu minimieren. vfat ist allerdings so wenig fehlerresistent, dass es beim Dateisystemcheck „gerne“ mal vollständig zerlegt wird. Führt ihr den Dateisystemcheck aus Furcht davor aber nicht aus, wird der Datenträger sich höchstwahrscheinlich weigern zu booten. Damit sollte meine Empfehlung zur Wahl des favorisierten Dateisystems wohl ziemlich klar sein! ext3[17] (oder ext4[18]) muss nach einem Crash vor dem nächsten Gebrauch ebenfalls dringend – z.B. per Live-CD – überprüft werden, ist aber aufgrund seiner Journalingfunktion und seines moderneren Aufbaus resistenter gegenüber Beschädigungen und stellt somit eindeutig die bessere Wahl dar – dafür kann es aber auf minderwertigen proprietären Betriebsystemen nicht gelesen/geschrieben werden!

Wer wie ich „wahlparanoid“ ist, tuned sich die Journalfunktion mit dem Befehl tune2fs -o journal_data_ordered,block_validity. Das verringert zwar deutlich die Geschwindigkeit des Dateisystems, dafür sollten Datenverluste aber nahezu ausgeschlossen sein. Auf modernen SDHC- oder gar SDXC-SD-Karten[19] sollten Geschwindigkeitsaspekte eher zweitrangig sein. Aber Vorsicht: tune2fs ist ein sehr mächtiges Tool, welches ohne Rückfrage grundlegende Änderungen am Dateisystem durchführt. Wenn ihr also nicht genau wisst was ihr tut, solltet ihr lieber die Finger davon lassen!

:Installation des Bootmanagers GRUB 2:

Nachdem ihr den Stick formatiert habt, installiert ihr von einer aktuellen LiveCD (z.B.Ubuntu[20, 21, 22] oder Knoppix[23, 24]) den Bootloader GRUB 2[25, 26, 27, 28]. Aber auch hier gibt es Stolperfallen:

Ihr installiert GRUB 2 nun wie folgt auf euren Datenträger. Aber Achtung: Verwechselt niemals Geräte- und Partitionsbezeichner! Den Backslash ("\") bei den folgenden Beispielen tippt ihr bitte nicht mit. Aus Platzgründen werden hier Zeilenumbrüche eingefügt, die ihr in eurer Konfiguration nicht mit einfügt, sondern einfach in der Zeile weiter schreibt (also ohne Backslash und ohne Umbruch)!

:Bearbeitung der Konfigurationsdatei GRUB.CFG:

Um von diesem Datenträger booten zu können, müsst ihr von Hand die Konfigurationsdatei /boot/grub/grub.cfg anlegen, da dies nicht automatisch bei der Installation des Bootmanagers geschieht! Ich habe als Basis für eigene Experimente hier meine grub.cfg eingefügt, in der ich nur jene Distributionen aufliste, die bei mir definitiv funktionieren. Im Netz findet ihr zahlreiche teils widersprüchliche Anleitungen, die trotz umfangreicher Experimente bei mir alle nicht funktioniert haben. Sobald ich weitere Distributionen gebootet bekomme, werde ich sie in diese Anleitung einpflegen. Knoppix und Ubuntu werfen wilde Warnungen, booten dann aber doch. Aus hier nicht relevanten Gründen befinden sich dabei auch einige historische Distributionen, die ihr gerne auslassen könt. Wundert euch bitte nicht darüber, dass sich nur einige ISOs im Verzeichnis /images befinden. Manche Distributionen lassen sich scheinbar nicht booten, wenn der Pfadname eine gewisse Zeichenanzahl überschreitet. Die kleineren Distributionen lasse ich vollständig in den Arbeitsspeicher booten („toram“), damit der USB-Stick gezogen werden kann und so der USB-Port wieder frei wird (um z.B. Daten auf einen anderen Datenträger retten zu können). Ich schreibe mir die Kernelversionen ganz gerne in die Menüeinträge, was ihr natürlich nicht so zu übernehmen braucht.

menuentry "Knoppix amd64 v7.7.1 GUI" {
    loopback loop /images/knoppix/KNOPPIX_V7.7.1DVD-2016-10-22-DE.iso
    linux (loop)/boot/isolinux/linux64 \
    bootfrom=/dev/sdb1/images/knoppix/KNOPPIX_V7.7.1DVD-2016-10-22-DE.iso no3d
    initrd (loop)/boot/isolinux/minirt.gz
}

menuentry "Knoppix amd64 v7.7.1 Konsole" {
    loopback loop /images/knoppix/KNOPPIX_V7.7.1DVD-2016-10-22-DE.iso
    linux (loop)/boot/isolinux/linux64 \
    bootfrom=/dev/sdb1/images/knoppix/KNOPPIX_V7.7.1DVD-2016-10-22-DE.iso 2
    initrd (loop)/boot/isolinux/minirt.gz
}

menuentry "Knoppix i686 v7.7.1 GUI" {
    loopback loop /images/knoppix/KNOPPIX_V7.7.1DVD-2016-10-22-DE.iso
    linux (loop)/boot/isolinux/linux \
    bootfrom=/dev/sdb1/images/knoppix/KNOPPIX_V7.7.1DVD-2016-10-22-DE.iso no3d
    initrd (loop)/boot/isolinux/minirt.gz
}

menuentry "Knoppix i686 v7.7.1 Konsole" {
    loopback loop /images/knoppix/KNOPPIX_V7.7.1DVD-2016-10-22-DE.iso
    linux (loop)/boot/isolinux/linux \
    bootfrom=/dev/sdb1/images/knoppix/KNOPPIX_V7.7.1DVD-2016-10-22-DE.iso 2
    initrd (loop)/boot/isolinux/minirt.gz
}

menuentry "Linux Mint v17.3 XFCE amd64" {
    loopback loop /images/linuxmint/linuxmint-17.3-xfce-64bit-de-20160924.iso
    linux (loop)/casper/vmlinuz boot=casper \
    iso-scan/filename=/images/linuxmint/linuxmint-17.3-xfce-64bit-de-20160924.iso
    initrd (loop)/casper/initrd.lz
}

menuentry "Parted Magic v4.10 (2.6.32.11)" {
    loopback loop /images/pmagic-4.10.iso
    linux (loop)/pmagic/bzImage boot=isolinux \
    iso-scan/filename=/images/pmagic-4.10.iso root=/dev/ram0 edd=off \
    noeject noprompt sleep=0 load_ramdisk=1 prompt_ramdisk=0 \
    gfxpayload=text loglevel=0 keymap=de-latin1
    initrd (loop)/pmagic/initramfs
}

menuentry "Parted Magic v4.10 grub4dos v4.10 (2.6.32.11)" {
    loopback loop /images/pmagic-grub4dos-4.10.iso
    linux (loop)/pmagic/bzImage boot=isolinux \
    iso-scan/filename=/images/pmagic-grub4dos-4.10.iso root=/dev/ram0 \
    edd=off noeject noprompt sleep=0 load_ramdisk=1 prompt_ramdisk=0 \
    gfxpayload=text loglevel=0 keymap=de-latin1
    initrd (loop)/pmagic/initramfs
}

menuentry "Parted Magic v6.3 (2.6.38.8)" {
    loopback loop /images/pmagic-6.3.iso
    linux (loop)/pmagic/bzImage boot=isolinux \
    iso-scan/filename=/images/pmagic-6.3.iso root=/dev/ram0 edd=off \
    noeject noprompt sleep=0 load_ramdisk=1 prompt_ramdisk=0 rw \
    gfxpayload=text loglevel=9 keymap=de-latin1 de_DE max_loop=256 \
    vmalloc=256MiB
    initrd (loop)/pmagic/initramfs
}

menuentry "Parted Magic v2013.08.01 64 Bit (3.10.4)" {
    loopback loop /images/pmagic_2013_08_01.iso
    linux (loop)/pmagic/bzImage64 boot=isolinux \
    iso-scan/filename=/images/pmagic_2013_08_01.iso root=/dev/ram0 edd=off \
    noeject noprompt sleep=0 load_ramdisk=1 prompt_ramdisk=0 rw \
    gfxpayload=text loglevel=9 keymap=de-latin1 de_DE max_loop=256 \
    vmalloc=288MiB
    initrd (loop)/pmagic/initrd.img
}

menuentry "Parted Magic v2013.08.01 32 Bit (3.10.4)" {
    loopback loop /images/pmagic_2013_08_01.iso
    linux (loop)/pmagic/bzImage boot=isolinux \
    iso-scan/filename=/images/pmagic_2013_08_01.iso root=/dev/ram0 edd=off \
    noeject noprompt sleep=0 load_ramdisk=1 prompt_ramdisk=0 rw \
    gfxpayload=text loglevel=9 keymap=de-latin1 de_DE max_loop=256 \
    vmalloc=288MiB
    initrd (loop)/pmagic/initrd.img

menuentry "SysRescCD v4.9.1 amd64" {
    loopback loop /images/systemrescuecd-x86-4.9.1.iso
    linux (loop)/isolinux/rescue64 \
    isoloop=/images/systemrescuecd-x86-4.9.1.iso setkmap=de docache
    initrd (loop)/isolinux/initram.igz
}

menuentry "SysRescCD v4.9.1 x86" {
    loopback loop /images/systemrescuecd-x86-4.9.1.iso
    linux (loop)/isolinux/rescue32 \
    isoloop=/images/systemrescuecd-x86-4.9.1.iso setkmap=de docache
    initrd (loop)/isolinux/initram.igz
}

menuentry "GParted live v0.27.0-1 i686-pae" {
   loopback loop /images/gparted-live-0.27.0-1-i686-pae.iso
   linux (loop)/live/vmlinuz boot=live union=overlay username=user config \
   components noswap nosplash noeject gfxpayload=text nox11autologin \
   toram=filesystem.squashfs locales=de_DE.UTF-8 keyboard-layouts=de \
   gl_batch findiso=/images/gparted-live-0.27.0-1-i686-pae.iso
   initrd (loop)/live/initrd.img
}

menuentry "GParted live v0.27.0-1 i686" {
   loopback loop /images/gparted-live-0.27.0-1-i686.iso
   linux (loop)/live/vmlinuz boot=live union=overlay username=user config \
   components noswap nosplash noeject gfxpayload=text nox11autologin \
   toram=filesystem.squashfs locales=de_DE.UTF-8 keyboard-layouts=de gl_batch 
   initrd (loop)/live/initrd.img
}

menuentry "Debian v7.10 'Wheezy' Mini-Installer 'official' amd64 \
(3.2.78-1-x86_64)" {
    loopback loop /images/debian-wheezy-mini-official/amd64/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/debian-wheezy-mini-official/amd64/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Debian v7.10 'Wheezy' Mini-Installer 'official' i686 \
(3.2.78-1-i486)" {
    loopback loop /images/debian-wheezy-mini-official/i386/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/debian-wheezy-mini-official/i387/myni.iso --
    initrd (loop)/initrd.gz
}

menuentry "Debian v8.4 'Jessie' Mini-Installer 'official' amd64 \
(3.16.7-ckt25-1-amd64)" {
    loopback loop /images/debian-jessie-mini-official/amd64/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/debian-jessie-mini-official/amd64/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Debian v8.4 'Jessie' Mini-Installer 'official' i686 \
(3.16.7-ckt25-1-i586)" {
    loopback loop /images/debian-jessie-mini-official/i386/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/debian-jessie-mini-official/i386/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Debian v9.0 'Stretch' Mini-Installer 'official' amd64 \
(4.3.3-5-amd64)" {
    loopback loop /images/debian-stretch-mini-official/amd64/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/debian-stretch-mini-official/amd64/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Debian v9.0 'Stretch' Mini-Installer 'official' i686 \
(4.3.3-5-i686)" {
    loopback loop /images/debian-stretch-mini-official/i386/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/debian-stretch-mini-official/i386/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Debian 'd-i' Mini-Installer 'official' amd64 (4.4.6-1-amd64)" {
    loopback loop /images/debian-d-i/amd64/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/debian-d-i/amd64/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Debian 'd-i' Mini-Installer 'official' i686 (4.4.6-1-i686)" {
    loopback loop /images/debian-d-i/i386/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/debian-d-i/i386/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Tanglu 'staging' Mini-Installer 'official' amd64 \
(4.4.2-3tanglu1 x86_64)" {
    loopback loop /images/tanglu/amd64/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/tanglu/amd64/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Tanglu 'staging' Mini-Installer 'official' i686 \
(4.4.2-3tanglu1 i686)" {
    loopback loop /images/tanglu/i386/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/tanglu/i386/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "gNewSense v3.1 'Parkes' Mini-Installer 'official' amd64 \
(2.6.32-5gnewsense1-x86_64)" {
    loopback loop /images/gnewsense-parkes-mini-official/amd64/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/gnewsense-parkes-mini-official/amd64/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "gNewSense v3.1 'Parkes' Mini-Installer 'official' i686 \
(2.6.32-5gnewsense1-i486)" {
    loopback loop /images/gnewsense-parkes-mini-official/i386/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/gnewsense-parkes-mini-official/i386/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Trisquel v7.0 'Belenos' Mini-Installer 'official' amd64 \
(3.13.0-37-x86_64)" {
    loopback loop /images/trisquel-mini-official/amd64/trisquel-netinst_7.0_amd64.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/trisquel-mini-official/amd64/trisquel-netinst_7.0_amd64.iso --
    initrd (loop)/initrd.gz
}

menuentry "Trisquel v7.0 'Belenos' Mini-Installer 'official' i686 \
(3.13.0-37-i686)" {
    loopback loop /images/trisquel-mini-official/i386/trisquel-netinst_7.0_i686.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/trisquel-mini-official/i386/trisquel-netinst_7.0_i686.iso --
    initrd (loop)/initrd.gz
}

menuentry "Ubuntu v12.04.5 'Precise Pangolin' Mini-Installer amd64 \
(3.2.0-67-generic)" {
    loopback loop /images/ubuntu-precise-mini/amd64/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/ubuntu-precise-mini/amd64/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Ubuntu v12.04.5 'Precise Pangolin' Mini-Installer i686 \
(3.2.0-67-generic-pae)" {
    loopback loop /images/ubuntu-precise-mini/i386/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/ubuntu-precise-mini/i386/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Ubuntu v14.04.1 'Trusty Tahr' Mini-Installer amd64 \
(3.13.0-77-generic)" {
    loopback loop /images/ubuntu-trusty-mini/amd64/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/ubuntu-trusty-mini/amd64/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Ubuntu v14.04.1 'Trusty Tahr' Mini-Installer i686 \
(3.13.0-77-generic)" {
    loopback loop /images/ubuntu-trusty-mini/i386/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/ubuntu-trusty-mini/i386/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Ubuntu v16.04 'Xenial Xerus' Mini-Installer amd64 \
(4.4.0-17-generic)" {
    loopback loop /images/ubuntu-xenial-mini/amd64/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/ubuntu-xenial-mini/amd64/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Ubuntu v16.04 'Xenial Xerus' Mini-Installer i686 \
(4.4.0-17-generic)" {
    loopback loop /images/ubuntu-xenial-mini/i386/mini.iso
    linux (loop)/linux boot=isolinux \
    iso-scan/filename=/images/ubuntu-xenial-mini/i386/mini.iso --
    initrd (loop)/initrd.gz
}

menuentry "Ubuntu v10.04 'Lucid Lynx' Netbook Remix (2.6.32-21)" {
    loopback loop /images/ubuntu-10.04-netbook-i386.iso
    linux (loop)/casper/vmlinuz boot=casper \
    iso-scan/filename=/images/ubuntu-10.04-netbook-i386.iso locale=de \
    bootkbd=de console-setup/layoutcode=de --
    initrd (loop)/casper/initrd.lz
}

menuentry "EasyPeasy 1.6 (2.6.32-21)" {
    loopback loop /images/EasyPeasy/EasyPeasy-1.6.iso
    linux (loop)/casper/vmlinuz boot=casper \
    iso-scan/filename=/images/EasyPeasy/EasyPeasy-1.6.iso locale=de \
    bootkbd=de console-setup/layoutcode=de --
    initrd (loop)/casper/initrd.lz
}

menuentry "NetBootCD v6.4.1" {
    loopback loop /images/NetbootCD/NetbootCD-6.4.1.iso
    linux (loop)/boot/vmlinuz boot=isolinux \
    iso-scan=/images/NetbootCD/NetbootCD-6.4.1.iso quiet base norestore \
    nolocal --
    initrd (loop)/boot/nbinit4.gz
}

menuentry "NetBootCD v7.0" {
    loopback loop /images/NetbootCD/NetbootCD-7.0.iso
    linux (loop)/boot/vmlinuz boot=isolinux \
    iso-scan=/images/NetbootCD/NetbootCD-7.0.iso quiet base norestore \
    nolocal --
    initrd (loop)/boot/nbinit4.gz
}

menuentry "Memtest v4.20" {
    linux16 /images/memtest/memtest420.bin boot=isolinux --
}

menuentry "Memtest v5.01" {
    linux16 /images/memtest/memtest501.bin boot=isolinux --
}

menuentry "Smart Boot Manager v3.7.1" {
    linux16 /images/sbm/memdisk
    initrd16 /images/sbm/sbm.bin boot=isolinux --
}

menuentry "Hardware Detection Tool 0.3.6" {
  linux16 /images/hdt/memdisk
  initrd16 /images/hdt/hdt-0.3.6.img
}

menuentry "Hardware Detection Tool 0.4.1" {
  linux16 /images/hdt/memdisk
  initrd16 /images/hdt/hdt-0.4.1.img
}

menuentry "Hardware Detection Tool 0.5.0" {
  linux16 /images/hdt/memdisk
  initrd16 /images/hdt/hdt-0.5.0.img
}

menuentry "Hardware Detection Tool 0.5.2" {
  linux16 /images/hdt/memdisk
  initrd16 /images/hdt/hdt-0.5.2.img
}

menuentry "Reboot" {
    reboot
}

menuentry "Power off" {
    halt
}

Status: testing