MultiBoot-CD

MultiBoot-CDs aus mehreren Disketten erstellen

Einführung

Diese Seite beschreibt das Zusammenfassen von mehreren bootfähigen Disketten auf einer CD, so daß diese Disketten bzw. deren Abbilder frei wählbar gebootet werden können.

Zweck

Eine solche CD könnte zum Beispiel die Boot-Disketten mit den Programmen zur Überprüfung der Festplatte oder des Hauptspeichers enthalten und es damit ermöglichen, die persönliche Diskettensammlung weiter aufzulösen. Diese CD ist bei Notebooks ohne Diskettenlaufwerk besonders hilfreich. Oder man nutzt das Image einer solchen CD oder einer (zusammengefaßten) Diskette um Server zu booten. Wer sich diese Arbeit sparen möchte, findet auf Seiten wie http://www.ultimatebootcd.com das Abbild einer CD mit fast allen erdenklichen Programmen.

Was nicht

Dieser Artikel beschreibt nicht die verschiedenen Verfahrensweisen um unterschiedliche Betriebsysteme auf CD zu brennen und davon zu booten.

Varianten von MultiBoot-CDs

Der "El Torito"-Standard beschreibt das Booten von CD. Dabei können drei unterschiedliche Methoden zum Einsatz kommen.

Booten einer Diskette
Beim Booten vom Abbild einer Diskette simuliert das BIOS eine physisch nicht vorhandene Diskette, daher muß die Größe des Abbildes genau der Größe einer Diskette entsprechen. Zulässig sind die Größen von 1,2MB, 1,44 MB und 2,88 MB. Alle Zugriffe werden auf die CD umgeleitet und die Daten aus dem Abbild gelesen. Mit dieser Methode können unterschiedliche Systemkonfigurationen gebootet werden. Jede davon kann individuelle Einstellungen enthalten und auf die CD zugreifen, als wäre es eine normal gebootete Umgebung.
Booten einer Festplatte

Hierbei wird das Abbild einer Festplatte von CD gestartet. Dabei sollte beachtet werden, daß dieses Abbild einen Master Boot Record (MBR) enthält und in der Partitionstabelle nur eine Partition eingetragen ist und diese an erster Stelle steht.

Hinweis: Die Zugriffe auf das Abbild erfolgen über das BIOS via INT13h. Daher funktioniert diese Bootvariante nur mit DOS-basierten Abbildern.

No Emulation Booting
Diese Methode lädt Programmcode direkt von der CD, schreibt ihn in einem Bereich des Hauptspeichers und führt ihn aus. Interessant ist dieses Verfahren für Bootloader oder rein binäre Anwendungen. Die Größe des Programmcodes ist auf 640k beschränkt.

ISOLINUX und MEMDISK

Als Bootloader wird ISOLINUX verwendet. Er wird via No Emulation Booting geladen und bietet neben der Möglichkeit, eigene einfache textbasierte Menüs und Grafiken anzuzeigen, verschiedenen Modulen mit Erweiterungen. Mit einem dieser Module davon lassen sich komfortable Textmenüs im Stil der unter DOS verbreiteten "Turbo Visions"-Oberfläche erzeugen. Ein anderes Module - MEMDISK - erzeugt eine RAM-Disk, in die das Abbild vor dem Starten geladen wird. Damit lassen sich verschiedenste Abbilder einfach und schnell booten. ISOLINUX wird in diesem Beispiel verwendet, da es im Gegensatz zu anderen Bootloadern schlank ist, sich einfach bedienen und konfigurieren läßt und dadurch übersichtlicher ist.

Begriffe

Abbild (Neudeutsch: Image)
Ist die vollständige binäre Repräsentation eines Datenträgers in einer einzigen Datei.
Kernel
Ein Kernel ist ein eigenständiges Programm, das auf einer spezifischen Hardware läuft und die Basis für weitere Programme bildet. Er wird meist von einem speziellen Code, dem (Boot)-Loader, geladen und gestartet. Wenn der Kernel als Datei vorliegt, spricht man von einem "image" oder einem "kernel image".
Diskette
Disketten werden für das hier erklärte Verfahren mit dem DOS-Dateisystem formatiert. Für die meisten Beispiele wird dabei Bootfähigkeit vorausgesetzt.

Abbilder

Um die Disketten von einer CD zu booten, benötigt man ihre Abbilder. Auf diese kann während des Bootvorganges über den absoluten Pfad zugegriffen werden. Dadurch können die Abbilder an einer beliebigen Stelle im Verzeichnisbaum der CD abgelegt werden.

Abbild erzeugen

Ein Abbild läßt sich am einfachsten mit dem Programm dd auf der Kommandozeile herstellen. Dabei wird dd die Daten von einer Quelle ( if), in unserem Fall die Gerätdatei des Diskettenlaufwerkes, lesen und in das Ziel ( of) schreiben.

Beispiel: Sektorweises Kopieren einer Diskette in die Datei myfloppy.img:

dd if=/dev/fd0 of=meinediskette.img bs=512

Zusammenfassen von Disketten

Einige Programme sind auf 2 oder mehreren Disketten verteilt. Diese lassen sich meistens in einem größeren Abbild vereinen. Dieses Abbild läßt sich auf 4 verschiedenen Wegen erzeugen:

  1. Das gute alte DOS booten, eine 2,88MB-Diskette einlegen und bootfähig formatieren. (Ich gebe zu, daß dies ziemlich unwahrscheinlich ist, da 2,88MB-Laufwerke kaum verbreitet sind.)
  2. Mit Qemu, Bochs, VMWare o.ä. ein virtuelles Diskettenlaufwerk in der richtigen Größe anlegen, das passende Betriebsystem booten und die Diskette oder besser deren Abbild formatieren. (Schon besser!)
  3. Der Einsatz des Windowsprogrammes WinImage (Shareware) um ein passendes Abbild zu erzeugen.
  4. Das Abbild skriptgesteuert vergößern. mkfloppyimg.sh ist ein Shellskript, das ein größeres Abbild anlegt und den Inhalt der ersten Abbildes in das Neue kopiert. Das neu erzeugte Abbild ist ebenfalls bootfähig.

Der wahrscheinlich einfachste Weg ist das Skript mkfloppyimg.sh.

Beispiel: Vergrößern des 1440k großen Abbildes "AbbildDiskette1.img" auf 2880k.

./mkfloppyimg.sh -2880 AbbildDiskette1.img NeuesGroesseresAbbild.img

Je nach verwendeter Methode müssen alle Disketten oder alle außer der ersten Diskette in das neue Abbild kopiert werden. Unter Umständen sind dabei Änderungen an den Startdateien ( autoexec.bat und in seltenen Fällen config.sys) oder an anderen Batch-Dateien notwendig.

Abbilder komprimieren

Weiterhin ist es möglich die Abbilder mit zip oder gzip zu komprimieren, um Platz auf der CD zu sparen. Die Endung des Archives hat für MEMDISK keine Bedeutung, denn das Format wird automatisch erkannt, wenn das Abbild in die RAM-Disk kopiert wird. Das Entpacken erfolgt transparent und bei Bedarf.

Konfiguration von ISOLINUX und MEMDISK

Die Steuerung von SYSLINUX erfolgt über die Datei isolinux.cfg. ISOLINUX sucht sie während des Bootens im eignenen Verzeichnis, unter /boot/isolinux und /isolinux.

Dies ist eine funktionierendes isolinux.cfg-Beispiel:

# dieses Label automatisch booten
default 0
# 30 Sekunden warten
timeout 300
# immer "boot: " anzeigen
prompt 1
# Menue anzeigen
display boot.msg
# boote naechstes im Bios eingestelltes Geraet
label 0
    localboot -1
# memtest starten
label 1
     kernel memtest
# mein Abbild booten
label 2
    kernel memdisk
    append initrd=/images/testdisk/testdisk.img

Neben den nachfolgend aufgeführten Optionen gibt es noch weitere. Diese werden in der SYSLINUX-Dokumentation beschrieben.

ISOLinux-Optionen

label <NAME>
Kennzeichnet die Optionen mit einem eindeutligen Namen, über den der Kernel aufgerufen wird. Die Label werden intern auf ein Schema umgesetzt, daß DOS-Dateinamen entspricht. Daher sollte man darauf achten, daß die Label immer eindeutig sind. Innerhalb des 8.3-Schemas sind alle Freiheiten erlaubt.
default <LABEL> [Optionen]
Über default wird die Kommandozeile angegeben, die automatisch nach Ablauf der Zeit ausgeführt wird. Hinweis: Wenn ISOLINUX keine Konfigurationsdatei findet, oder wenn default nicht gesetzt ist, wird automatisch linux auto ausgeführt.
kernel <IMAGE>
Hierüber wird der zu startende Kernel spezifiziert. Dabei ist es möglich beliebige Kernel zu starten. Dies können auch spezielle binäre Programme wie MemTest86 sein. MEMDISK lädt das über initrd angewählte Abbild in eine RAM-Disk mit passender Größe und bootet es. Das Kernelimage wird aus dem gleichen Verzeichnis geladen, in dem sich auch isolinux.bin befindet. Ein anderes Verzeichnis ist nicht wählbar.
append <PARAMETER>
Über diese Option können einem Kernel verschiedene Parameter übergeben werden. Der wahrscheinlich wichtigste Parameter dabei ist initrd. Er enthält den Namen inklusive des vollen Pfades zu dem Abbild, das in die RAM-Disk geladen werden soll. Der Pfad bezieht sich dabei auf die Wurzel des Dateisystems auf der CD und nicht auf der Festplatte.
timeout <ZEIT>
Zeit in 1/10 Sekunden, die ISOLINUX am Bootprompt (boot:) auf eine Benutzereingabe wartet. Hinweis: Ein Wert on 0 deaktiviert diese Option. Das ist auch die Standardeinstellung.
#
Alle Zeilen, die mit einer Raute ("#") oder auch Doppelkreuz genannt, anfangen, sind Kommentarzeilen und werden ignoriert. Leerzeilen werden ebenfalls übergangen.
localboot <TYP>

Bootet das über den Typ spezifizierte Gerät. ISOLINUX kennt folgende Typen:

  • -1 Meldet den BIOS einen Fehler während des Bootvorganges. Neuere BIOSe versuchen danach vom nächsten Gerät in der Bootreihenfolge zu booten.
  • 0x00 bootet vom primären Diskettenlaufwerk
  • 0x80 bootet von der primären Festplatte

MEMDISK-Optionen

Die Optionen für MEMDISK werden via append übergeben. Zum Booten von virtuellen Disketten mit der Standardgröße von 1,2 MByte, 1,44 MByte oder 2,88 MByte werden keine zusätzlichen Parameter benötigt.

initrd </Pfad/zum/Abbild>
Spezifiziert das zu ladende Abbild. Wenn dies im gleichen Verzeichnis wie MEMDISK liegt, kann auf die Pfadangabe verzichtet werden.
floppy
das angegebene Abbild ist eine Diskette.
harddisk
das angegebene Abbild ist eine Festplatte
c=<xx> h=<yy> s=<zz>
Für nicht standardisierte Abbilder von Disketten und Festplatten benötigt MEMDISK Angaben zur virtuellen Geometrie.`c=xx` Anzahl der Zylinder (maximal 1024) h=yy Anzahl der Köpfe (maximal 256) s=zz Anzahl der Sektoren (maximal 63) Hinweis: MS-DOS erlaubt nur maximal 255 Köpfe und 255 Zylinder bei Disketten.

Syntaxvergleich LILO und ISOLINUX

Die Konfigurationsstile von LILO und SYSLINUX ähneln sich sehr. Die folgende Tabelle stellt den Syntax von LILO und ISOLINUX gegenüber:

Ausschnitt aus /etc/lilo.conf:

image = /Pfad/zu/meinKernel
  label = meinLabel
  append = "meineKernelParameter"

Ausschnitt aus isolinux.cfg:

label meinLabel
  kernel meinKernel
  append meineKernelParameter

Um nochmals darauf hinzuweisen, bei SYSLINUX muß der Kernel im gleichen Verzeichnis wie isolinux.bin liegen. LILO dagegen akzeptiert ein absoluten Pfad zum Kernelimage. Bei beiden Programmen wird das zu bootende Abbild über den absoluten Pfad angesprochen.

ISO-Abbild erzeugen

Verzeichnisstrukturen

Folgende Verzeichnistruktur dient als Basis dieser Beispiel-CD:

./data
./data/isolinux
./data/isolinux/boot.msg
./data/isolinux/isolinux.cfg
./data/isolinux/memdisk
./data/isolinux/isolinux.bin
./data/images
./data/images/myfloppy.img

Unterhalb von ./data/isolinux/ befindet sich ISOLINUX selbst ( isolinux.bin), das Modul MEMDISK ( memdisk), die Konfigurationsdatei für ISOLINUX ( isolinux.cfg) sowie eine beliebig gestaltbare Meldung ( boot.msg), die beim Booten angezeigt wird.

Alle Dateien und Verzeichnisse unterhalb von data werden auf auf die CD gebrannt. Die Struktur des Verzeichnisbaumes kann beliebig an die eigenen Bedürfnisse und Wünsche angepaßt werden. Dabei sollte darauf geachtet werden, daß die Dateien boot.msg, isolinux.cfg, isolinux.bin sowie memdisk im selben Verzeichnis liegen.

Alle Datei- und Verzeichnisnamen folgen dem 8.3-Schema, denn der ISO 9660-Standard beruht in seiner untersten Ebene auf 8.3-Dateinamen (8 Zeichen für den Dateinamen und 3 für die Dateiendung).

Mastern des ISO-Image

Das bootfähige Image wird mit mkisofs erzeugt. Dabei sind die im Beipiel aufgeführten Optionen zwingend erforderlich. Zusätzlich können zum Beispiel noch mit -J Joliet-Verzeichniseinträge und mit -r Rock-Ridge-Verzeichniseinträge angelegt werden. Selbstverständlich können auch alle weiteren Optionen von mkisofs verwendet werden.

Beispiel: Erzeugen des bootfähigen Abbildes MeinAbbild.iso mit dem Inhalt der Verzeichnisstruktur unter data.

mkisofs -b isolinux/isolinux.bin \
        -no-emul-boot -boot-load-size 4 \
        -boot-info-table -o MeinAbbild.iso data

Hinweis: Das Verzeichnis isolinux muß sich unterhalb von data befinden.

In der Manpage von mkisofs sind die Optionen und deren Zusammenspiel ausführlich erklärt.

Test des Abbildes

Nachdem das Abbild erfolgreich mit mkisofs erzeugt wurde, kann man es vor dem Brennen in das Dateisystem einbinden, um die Vollständigkeit der CD zu überprüfen.

Beispiel: Einbinden des Abbildes MeinAbbild.iso unterhalb des Verzeichnisses /mnt

mount -o loop MeinAbbild.iso /mnt

und das Lösen dieser Bindung

umount /mnt

Hinweis: Für das Einbinden sind root-Rechte erforderlich. Für das Lösen auch.

Vor und nach dem Brennen der CD kann man mit einer virtuellen Maschine wie Bochs, VMWare oder QEMU die CD testweise booten und die Funktionsweise sowie das gewünschte Verhalten und Aussehen testen. Damit kann man sich häufiges Herunterfahren und wieder Neustarten des Rechners sparen. Diese Tests können wahlweise mit dem ISO-Abbild oder mit der fertig gebrannten CD erfolgen. Weiterhin können die ersten Versuche auch mit CD-RWs durchgeführt werden, da man bei Fehlschlägen keinen Rohling geopfert hat.

CD brennen

Eine CD läßt sich auf unterschiedliche Weisen brennen. Eine komfortable Möglichkeit bieten grafische Werkzeuge wie k3b. Eine andere Variante ist, die CD direkt auf der Kommandozeile via cdrecord zu brennen.

Beispiel: MeinAbbild.iso auf eine CD schreiben.

cdrecord -v dev=SCSIBUS,ID,LUN -data MeinAbbild.iso

Hinweis: Die genauen Werte für SCSIBUS, ID und LUN lassen sich mit cdrecord -scanbus ermitteln.

Alternativen

Mit CD Shell und Bootable CD Wizard bieten sich zwei weitere Programme an, um menü-basierende bootfähige CDs zu generieren. Die Menüs lassen sich einfach und mit viel Gestaltungsfreiraum skriptbasiert erzeugen und steuern.

Auch der "El Torito"-Standard bietet die Möglichkeit über ein einfaches Menü beim Booten aus mehreren Abbildern auszuwählen. Zwei Einschränkungen sind dabei allerdings zu beachten:

  1. Das BIOS muß den kompletten El Torito-Standard unterstützen, damit nicht nur das erste Abbild gebootet wird. (Zum Beispiel unterstützen die BIOS-Simulation von QEMU und verschiedene Laptops dies nicht.)
  2. Das vom BIOS dargestellte Menü enthält keine Dateinamen, somit muß man sich die Position der Abbilder merken, um das Richtige ohne zusätzliche Versuche zu booten.

Beispiel: Mit mkisofs kann man eine solche CD einfach erstellen. In diesem Beispiel werden beim Booten 4 unterschiedliche Abbilder zur Verfügung stehen.

mkisofs -J -r -b bootdisk1.img \
 -eltorito-alt-boot -b bootdisk2.img \
 -eltorito-alt-boot -b bootdisk3.img \
 -eltorito-alt-boot -b bootdisk4.img \
 -c boot/boot.catalog -o bootcdiso data

Hinweis: Die Datei boot.catalog wird automatisch erzeugt.

Eine weitere Möglichkeit bietet das DOS-Programm makebt, mit dessen Hilfe einem ISO-Image die Fähigkeit zum Booten gegeben werden kann. Dieses Abbild ist danach ebenfalls konform mit dem "El Torito"-Standard und den damit verbundenen Einschränkungen bei mehreren bootfähigen Abbildern.

Hinweise zum Booten von anderen Wechselmedien

ISOLINUX wurde geschrieben um von CD zu booten. Für den Einsatz auf USB-Sticks und anderen Wechselmedien sind andere Bootloader wie GNU GRUB oder LILO besser geeignet, denn der Zugriff auf beide Medien gleicht dem auf Festplatten. Wichtig ist, daß die Hardware das Booten von einem solchen Wechselmedium unterstützt.

Viele Schritte die in diesem Artikel aufgeführt sind, kann man auch zum Erstellen eines derartigen bootfähigen Mediums verwenden. Die Schritte zum Erzeugen des Abbildes entfallen dabei und es muß ein anderer Bootloader verwendet werden. Das Internet hält dafür eine Menge Tips und Tricks bereit.

Tips und Tricks

  • Häufig wiederkehrende Aufgaben, wie das Mastern oder das Schreiben der CD lassen sich mit diesem Makefile vereinfachen. make help gibt eine kurze Übersicht aus.

  • Wenn ein Abbild mit MEMDISK gebootet wird, ist das erste physische Diskettenlauf unter B: zu erreichen. Ein eventuell vorhandenes weiteres physisches Diskettenlaufwerk ist nicht mehr zugreifbar.

  • Ein leeres und formatiertes Abbild kann man mit

    dd if=/dev/zero of=2880k.img bs=1k count=2880
    /sbin/mkfs -t msdos 2880k.img
    oder:
    /sbin/mkdosfs 2880k.img
    

    anlegen. Normale Benutzer (nicht root) müssen für mkfs und mkdosfs den kompletten Pfad angeben, da /sbin nicht in deren Suchpfad enthalten ist.

  • Jedes beliebige Abbild läßt sich über das loop device einhängen. Man erhält somit lesenden und schreibenden Zugriff auf den Inhalt des Abbildes. Änderungen an Dateien sowie das Kopieren und Löschen sind kein Problem. Das Einhängen kann nur als root erfolgen.

    mount -o loop 2880k.img /floppy
    

    Falls der Typ des Abbildes nicht automatisch erkannt wird, muß er mit -tmsdos angegeben werden.

  • Beim Einsatz von farbigen Menüs, werden nur die Zeichen eingefärbt, die neu geschrieben werden. Daher ist es sinnvoll die Zeilen bis zur Breite von 80 Zeichen (Steuerzeichen nicht mitgerechnet) mit Leerzeichen zu füllen, damit die Zeilen in einer einheitlichen Farbe dargestellt werden.

  • Zum Platzsparen, kann man bei kann man ab zwei gleichen Dateien, eine oder mehrere durch Hardlinks ersetzen. Auf dem Abbild verweisen danach alle Dateien mit den gleichen Inode auf demselben Datenbereich. Dadurch kann wertvoller Platz gespart werden. Die Option -cache- inodes steuert dies Verhalten von mkisofs und ist auf UNIX-artigen Betriebssystemen standardmäßig gesetzt. Abschalten läßt sich dies durch -no-cache-inodes.

  • Mit mkisofs können auf Basis des El-Torito-Standards maximal 63 bootfähige Abbilder auf einer CD untergebracht werden. Die meisten BIOSe unterstützen dagegen nur das Booten von den ersten 10 Abbildern.

Weiterführende Informationen

Veröffentlichungen

Software

  • CD Shell - bietet ein skriptbasiertes Menüsystem für CD-Boot-Menüs (Nachfolger von Boot Scriptor) http://www.cdshell.org

Anhang

Lizenz

images/cc-by-nc-sa_88x31.png

Dieses Werk ist unter einem Creative Commons Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenzvertrag lizenziert. Um die Lizenz anzusehen, gehen Sie bitte zu http://creativecommons.org/licenses/by-nc-sa/3.0/de/ oder schicken Sie einen Brief an Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.

Dokumentenversion und -verlauf

Version 12: 29.05.2014
  • Layout und einige Links aktualisiert
Version 11: 02.04.2010
  • Kleine Korrekturen in den Abschnitten "Veröffentlichungen" und "Software"
Version 10: 31.05.2009
  • Lizenz auf Creative Commons BY-NC-SA Version 3.0 geändert
Version 9: 18.08.2005
  • Lizenzsymbole rechts oben eingefügt
Version 8: 07.07.2005
  • Korrektur: Memtest kann nicht im No Emulation Mode gestartet werden (Dank an Gentscho)
Version 7: 28.03.2005
  • Neue Formulierung des Verweises auf die Lizenz, die Lizenz hat sich nicht geändert
  • Änderung des Titels in "MultiBoot-CDs aus mehreren Disketten erstellen"
Version 6: 04.01.2005
  • fehlerhafter Link korrigiert
Version 5: 16.11.2004
  • Hinweise zum Booten von anderen Wechselmedien hinzugefügt
Version 4: 10.11.2004
  • Schreibfehler Version durch Revision ersetzt
Version 3: 07.11.2004
  • fehlerhafte Verweise korrigiert
Version 2: 07.11.2004
  • Artikel unter Creative Commons-Lizenz gestellt
Version 1: 01.11.2004
  • Artikel veröffentlicht