: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:
- Datenträger partitionieren[2] und formatieren[3]
- Den Bootmanager[4]
GRUB 2
[5, 6, 7, 8] installieren - Die ISO-Dateien[9] auf den Datenträger kopieren und die Konfigurationsdatei
GRUB.CFG
erstellen und anpassen
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.
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.
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:
- Installation-CDs/-DVDs die nur
GRUB 1
beinhalten, dürfte es heute kaum noch geben - Verbreitet sind aber zahlreiche Live-CDs, die sowohl
GRUB 1
(dort üblicherweise als GRUB legacy bezeichnet) als auchGRUB 2
beinhalten. Daher ruft dort der Befehlgrub-install
dummerweise häufigGRUB 1
auf.GRUB 1
wird aber anders konfiguriert und kann zudem keine ISOs booten, was euch somit nicht weiter hilft. Das folgende bezieht sich daher ausschließlich aufGRUB 2
und der zugehörige Befehl lautet demnach meistens (aber nicht bei allen Distributionen!)grub2-install
(mit fortschreitender Entfernugn vonGRUB 1
wiedergrub-install
). Eine mögliche Lösung ist es dannGRUB 1
virtuell von der Live-CD zu deinstallieren, damitGRUB 2
dann greift.
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)!
- Wenn euer Stick z.B. auf den Namen
/dev/sdb
hört, legt ihr einen Mountpunkt permkdir /media/sdb1
an. - Mountet den Stick dorthin, also z.B. mit
mount /dev/sdb1 /media/sdb1
. - Nun installiert ihr
GRUB 2
pergrub2-install --no-floppy \
.
--root-directory=/media/sdb1 /dev/sdb
Achtung: Wenn ihr die FehlermeldungYour embedding area ist unusally small. core.img won't fit in it.
bekommt, bedarf es mehr Platz vor Beginn der ersten Partition. Wenn ihr die Partition z.B. mit dem grafischen Toolgparted
erstellt, könnt ihr diesen angeben (2MB reichen), so dass an dieser Stelle dann etwas unallocated space verbleibt. - Wenn das glatt durchgelaufen ist (was eine kleine Weile dauern kann), kopiert ihr die gewünschten ISOs auf den Datenträger.
: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