: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 Live-CD 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, nur um sich alleine zu installieren („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 (Stand: 2017) 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 inzwischen recht gut, es gibt aber einige „Baustellen“, die ich noch abarbeiten werde (z.B. Passwortschutz). Ich „befürchte“ allerdings, dass der Text möglicherweise niemals fertig wird. :-) Zwei Jahre weiter (Stand: 2019) ist die Anleitung in einem weitestgehend konsistenten Zustand. :-)

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[10], da sie im Gegensatz zu USB-Sticks[11] einen Schreibschutz-Schalter haben. Mit einem entsprechenden Adapter kann man sie am USB-Port wie einen USB-Stick betreiben. Zudem es zahlreiche Rechner gibt, die zwar von USB[12], aber nicht über den eingebauten Kartenleser[13] 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[14]-Distribution[15, 16] beim Bootvorgang aus irgendeinem Grund abstürzt[17] und das Dateisystem[18, 19, 20] auf dem Datenträger „dirty“[21] 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[22, 23, 24], welches sich auf zahlreichen Live-CDs befindet partitionieren. Ich persönlich bevorzuge das Konsolenwerkzeug cfdisk[25, 26], 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[27] fest. Z.Zt. kommt ihr mit dem klassischen DOS-Schema („Legacy-MBR“[28]) gut klar (hat nichts mit der Wahl des installierten Betriebssystems[29] zu tun). Bei Datenträgern größer als 2TB werdet ihr zukünftig auf die neuere GUID-Tabelle[30] (GPT) setzen müssen, welche hier aber noch nicht beachtet werden soll. Das klassische fdisk[31, 32] kann allerdings nicht mit GUID umgehen! Vermutlich auch nicht mit aktiviertem (U)EFI[33] (wozu ich nichts sagen kann, da ich diesen Unfug stets abschalte (was auf neueren Rechnern wiederum zu Folgeproblemen führen kann) – es gibt bessere und vor allem restriktionsärmere Methoden, um den Bootvorgang des Rechners abzusichern!) Eine GUID/GPT kann mit gdisk[34] 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 (im Falle von „legacy MBR“) keinesfalls, dass „Boot flag“[35] 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 ihr 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[36, 37, 38] Datenträger z.B. per mkfs.ext3 /dev/GERAET oder mkfs.vfat /dev/GERAET. Bedenkt bitte, dass vfat[39, 40] keine Journalingfunktion[41] besitzt, so dass ihr das Dateisystem im Falle eines Absturzes vor dem nächsten Neustart überprüfen[42, 43] 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 (aufgrund des gesetzten „Dirty flags“) weigern zu booten. Damit sollte meine Empfehlung zur Wahl des favorisierten Dateisystems wohl ziemlich klar sein! ext3[44] (oder das neuere und in den meisten Aspekten modernere ext4[45]) 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[46, 47] 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 sollten Geschwindigkeitsaspekte eher zweitrangig sein. Aber Vorsicht: tune2fs[48] 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 Live-CD (z.B. „Ubuntu“[49, 50, 51] oder „Knoppix“[52, 53]) den Bootloader GRUB 2. 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[54] („\“) 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! Dies könnt ihr mit touch /media/MOUNTPUNKT/boot/grub/grub.cfg erledigen. Ich habe als Basis für eigene Experimente hier meine grub.cfg eingefügt, in der ich nur jene Distributionen aufliste, die bei mir 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“ schreiben zwar wilde Warnungen, booten dann aber doch. Aus hier nicht relevanten Gründen befinden sich dabei auch einige historische Distributionen, die ihr gerne auslassen könnt. 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, so dass ein Unterverzeichnis manchmal zu lang ist und die jeweilige Distribution trotz korrekter Pfadangabe nicht bootet. Wenn genügend Arbeitsspeicher[55] vorhanden ist, lassen sich einige Distributionen vollständig in den Speicher 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).

 

submenu "System-Distributionen" {
    menuentry "SysRescCD v5.3.2 amd64" {
        loopback loop /images/systemrescuecd-x86-5.3.2.iso
        linux (loop)/isolinux/rescue64 \
        isoloop=/images/systemrescuecd-x86-5.3.2.iso setkmap=de docache
        initrd (loop)/isolinux/initram.igz
    }

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

    menuentry "GParted live v1.0.0-3 i686-pae" {
        loopback loop /images/gparted-live-1.0.0-3-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-1.0.0-3-i686-pae.iso
        initrd (loop)/live/initrd.img
        }

    menuentry "GParted live v1.0.0-3 i686" {
        loopback loop /images/gparted-live-1.0.0-3-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 \
        findiso=/images/gparted-live-1.0.0-3-i686.iso
        initrd (loop)/live/initrd.img
    }

    menuentry "GParted live v1.0.0-3 amd64" {
        loopback loop /images/gparted-live-1.0.0-3-amd64.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-1.0.0-3-amd64.iso
        initrd (loop)/live/initrd.img
    }

    menuentry "Parted Magic v4.10" {
        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" {
        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" {
        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" {
        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" {
        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 "Plop Linux 19.2 amd64" {
        echo Loading Plop Linux
        set isofile="/images/plop/ploplinux-19.2-x86_64.iso"
        loopback loop $isofile
        linux (loop)/syslinux/kernel/bzImage gfxpayload=text \
        iso_filename=$isofile
        initrd (loop)/syslinux/kernel/initramfs.gz
    }

    menuentry "Plop Linux 19.2 i486 Small" {
        echo Loading Plop Linux
        set isofile="/images/plop/ploplinux-19.2-S-i486.iso"
        loopback loop $isofile
        linux (loop)/syslinux/kernel/bzImage gfxpayload=text \
        iso_filename=$isofile
        initrd (loop)/syslinux/kernel/initramfs.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
    }
}

submenu "Live-Distributionen" {
    submenu "Knoppix" {
        menuentry "Knoppix amd64 v8.2 GUI" {
            loopback loop /images/knoppix/KNOPPIX_V8.2-2018-05-10-DE.iso
            linux (loop)/boot/isolinux/linux64 \
            bootfrom=/dev/sdb1/images/knoppix/KNOPPIX_V8.2-2018-05-10-DE.iso no3d
            initrd (loop)/boot/isolinux/minirt.gz
        }

        menuentry "Knoppix amd64 v8.2 Konsole" {
            loopback loop /images/knoppix/KNOPPIX_V8.2-2018-05-10-DE.iso
            linux (loop)/boot/isolinux/linux64 \
            bootfrom=/dev/sdb1/images/knoppix/KNOPPIX_V8.2-2018-05-10-DE.iso 2
            initrd (loop)/boot/isolinux/minirt.gz
        }

        menuentry "Knoppix i686 v8.2 GUI" {
            loopback loop /images/knoppix/KNOPPIX_V8.2-2018-05-10-DE.iso
            linux (loop)/boot/isolinux/linux \
            bootfrom=/dev/sdb1/images/knoppix/KNOPPIX_V8.2-2018-05-10-DE.iso no3d
            initrd (loop)/boot/isolinux/minirt.gz
        }

        menuentry "Knoppix i686 v8.2 Konsole" {
            loopback loop /images/knoppix/KNOPPIX_V8.2-2018-05-10-DE.iso
            linux (loop)/boot/isolinux/linux \
            bootfrom=/dev/sdb1/images/knoppix/KNOPPIX_V8.2-2018-05-10-DE.iso 2
            initrd (loop)/boot/isolinux/minirt.gz
        }
    }

    submenu "Ubuntu" {
        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 "Linux Mint v18.3 XFCE amd64" {
            loopback loop /images/linuxmint/linuxmint-18.3-xfce-64bit-de-20171214.iso
            linux (loop)/casper/vmlinuz boot=casper \
            iso-scan/filename=/images/linuxmint/linuxmint-18.3-xfce-64bit-de-20171214.iso
            initrd (loop)/casper/initrd.lz
        }

    submenu "Mandrake" {
        menuentry "OpenMandriva v3.03 KDE Plasma (64 bit)" {
            set isofile=/images/OpenMandrivaLx.3.03-PLASMA.x86_64.iso
            set isoname=OpenMandrivaLx_3.03
            loopback loop $isofile
            linux (loop)/boot/vmlinuz0 root=live:LABEL=${isoname} \
            iso-scan/filename=${isofile} rd.live.image toram --
            initrd (loop)/boot/liveinitrd.img
        }
    }
}

submenu "Text-Installer" {
    submenu "Debian" {
        menuentry "Debian v9.9 'Stretch' Mini-Installer 'official' 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.9 'Stretch' Mini-Installer 'official' 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 v10.0 'Buster' Mini-Installer 'official' amd64" {
            loopback loop /images/debian-buster-mini-official/amd64/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/debian-buster-mini-official/amd64/mini.iso --
            initrd (loop)/initrd.gz
        }

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

        menuentry "Debian 'd-i' Mini-Installer 'official' 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" {
            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" {
            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" {
            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 "Devuan v2.0 'ASCII' Mini-Installer 'official' amd64" {
            loopback loop /images/devuan-ascii-mini-official/amd64/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/devuan-ascii-mini-official/amd64/mini.iso --
            initrd (loop)/initrd.gz
        }

        menuentry "Devuan v2.0 'ASCII' Mini-Installer 'official' i686" {
            loopback loop /images/devuan-ascii-mini-official/i386/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/devuan-ascii-mini-official/i386/mini.iso --
            initrd (loop)/initrd.gz
        }

        menuentry "Devuan v3.0 'Beowulf' Mini-Installer 'official' amd64" {
            loopback loop /images/devuan-beowulf-mini-official/amd64/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/devuan-beowulf-mini-official/amd64/mini.iso --
            initrd (loop)/initrd.gz
        }

        menuentry "Devuan v3.0 'Beowulf' Mini-Installer 'official' i686" {
            loopback loop /images/devuan-beowulf-mini-official/i386/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/devuan-beowulf-mini-official/i386/mini.iso --
            initrd (loop)/initrd.gz
        }

        menuentry "Devuan 'Testing' Mini-Installer 'official' amd64" {
            loopback loop /images/devuan-testing-mini-official/amd64/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/devuan-testing-mini-official/amd64/mini.iso --
            initrd (loop)/initrd.gz
        }

        menuentry "Devuan 'Testing' Mini-Installer 'official' i686" {
            loopback loop /images/devuan-testing-mini-official/i386/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/devuan-testing-mini-official/i386/mini.iso --
            initrd (loop)/initrd.gz
        }

        menuentry "Devuan 'Sid' Mini-Installer 'official' amd64" {
            loopback loop /images/devuan-sid-mini-official/amd64/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/devuan-sid-mini-official/amd64/mini.iso --
            initrd (loop)/initrd.gz
        }

        menuentry "Devuan 'Sid' Mini-Installer 'official' i686" {
            loopback loop /images/devuan-sid-mini-official/i386/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/devuan-sid-mini-official/i386/mini.iso --
            initrd (loop)/initrd.gz
        }

        menuentry "PureOS 'Green/Landing' Mini-Installer 'official' amd64" {
            loopback loop /images/pureos-mini-official/amd64/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/pureos-mini-official/amd64/mini.iso --
            initrd (loop)/initrd.gz
        }

        menuentry "gNewSense v3.1 'Parkes' Mini-Installer 'official' amd64" {
            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" {
            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 "gNewSense v4.0.1 'Ucclia' (alpha)  Mini-Installer 'official' amd64" {
            loopback loop /images/gnewsense-ucclia-mini-official/amd64/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/gnewsense-ucclia-mini-official/amd64/mini.iso --
            initrd (loop)/initrd.gz
        }

        menuentry "gNewSense v4.0.1 'Ucclia' (alpha) Mini-Installer 'official' i686" {
            loopback loop /images/gnewsense-ucclia-mini-official/i386/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/gnewsense-ucclia-mini-official/i386/mini.iso --
            initrd (loop)/initrd.gz
        }
    }

    submenu "Ubuntu" {
        menuentry "Ubuntu v18.04.2 'Bionic Beaver' Mini-Installer amd64" {
            loopback loop /images/ubuntu-bionic-mini/amd64/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/ubuntu-bionic-mini/amd64/mini.iso --
            initrd (loop)/initrd.gz
        }

        menuentry "Ubuntu v18.04.2 'Bionic Beaver' Mini-Installer i686" {
            loopback loop /images/ubuntu-bionic-mini/i386/mini.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/ubuntu-bionic-mini/i386/mini.iso --
            initrd (loop)/initrd.gz
        }
        menuentry "Trisquel v8.0 'Flidas' Mini-Installer 'official' amd64" {
            loopback loop /images/trisquel-mini-official/amd64/trisquel-netinst_8.0_amd64.iso
            linux (loop)/linux boot=isolinux \
            iso-scan/filename=/images/trisquel-mini-official/amd64/trisquel-netinst_8.0_amd64.iso --
            initrd (loop)/initrd.gz
            }

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

    submenu "Sonstige" {
        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
        }
    }
}

submenu "Sonstige Distributionen" {
    menuentry "Ubuntu v10.04 'Lucid Lynx' Netbook Remix" {
        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" {
        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 "Reboot" {
    reboot
}

menuentry "Power off" {
    halt
}

Abschließend hängt ihr den Datenträger via umount /media/sdb1 wieder aus. Ich wünsche euch viel Spaß und Erfolg beim testen, Live-Betrieb, Daten retten, System konfigurieren bzw. installieren oder was auch immer ihr mit diesem „Superstachel“ anstellen wollt. :-)

 

:Stolperfalle „Loop Device“:

Die Unterstützung des sog. „Loop Device“[56, 57] ist essentiell, um die ISOs so mounten zu können. Distributionen denen dieses Feature fehlt, können nicht nach der hier beschriebenen Methode verwendendet werden. Allenfalls können sie als „Hybrid-ISOs“[58] per dd[59, 60, 61, 62, 63] einzeln auf einen USB-Datenträger geschrieben werden, und belegen diesen dann vollständig. „Ubuntu“-ISOs beispielsweise beinhalten diese Fähigkeit. Warum aber die Mini-ISOs von „Debian“ diese Eigenschaft besitzen, die großen DVD- und CD-Abbilder dagegen nicht, erscheint unverständlich. Daher ist die Installation auf einem Rechner ohne Internetverbindung mit der „Multi-Distro“-Methode leider nicht möglich. Dort gelingt die Installation nur nach der dd-Methode oder klassisch per Silberscheibe.

 

:Weitere Schwierigkeiten:

Bei den umfangreichen Tests zahlreicher Distributionen auf zahlreichen Rechnern verschiedener Hersteller kam es immer wieder zu teils sprachlos machenden Problemen. Aus eigener Erfahrung (und ich bekomme kein Geld dafür, dass ich das hier schreibe) rate ich zu älteren Lenovo[64, 65] „Thinkpads“[66, 67, 68], da diese in der Regel problemlos allgemein mit Linux und im speziellen mit Live-Systemen und Text-Installern[69, 70] zusammen arbeiten.

Es gibt Distributionen (z.B. die oben eingepflegte „OpenMandriva“[71, 72, 73], bei der die 64 Bit-Variante[74] problemos funktioniert, die 32 Bit-Version[75] dagegen aber nicht problemlos bootet) mit merkwürdigem Startverhalten. Einige Distributionen (z.B. „Ubuntu“, „Linux Mint“[76, 77, 78], „Plop“[79]) lassen sich auf einigen Rechnern nicht „toram“ booten – auf „Thinkpads“ aber schon. Das führt dazu, dass beim herunter fahren der Datenträger nicht sauber ausgehängt wird, was zu einem inkonsistenten Dateisystem und bei Neustart ohne vorherigen Dateisystemcheck im schlimmsten Falle zu Datenverlust führen kann. „Plop“ lädt mit der „toram“-Option zwar alles schön in den Arbeitsspeicher, hängt den Datenträger aber nicht aus, so dass dieser nicht gezogen werden kann. Ich hatte sogar einen (Nicht-Lenovo)-Rechner dabei, bei dem die ansonsten hervorragende Hardwareerkennung von „Knoppix“ versagte, und ausgerechnet die LAN-Verbindung[80] nicht herstellen konnte. Bei einer anderen Distribution konnte auf dem gleichen Rechner der X-Server[81, 82] nicht gestartet werden. Auch kam es schon vor, dass auf manchen Rechnern sich die aktuelle Version des „Memtest 86+“[83, 84] nicht starten ließ – die ätere Version dagegen schon.

Manche der geschilderten Probleme lösen sich mit neueren Versionen des jeweiligen Systems auf oder können durch setzen geeigneter Optionen am Boot-Promt[85] umgangen werden. Häufig empfiehlt sich aber nur der Austausch des Rechners.

Status: stable