Dies Bildnis ist bezaubernd schön

CD-Images erzeugen mit dd und mkisofs

01.01.2003 Ein Image (engl. "Bild, Abbild") ist die Abbildung eines Filesystems in einer Datei. Auf CD-ROMs sind Daten in einem speziellen Dateisystem organisiert, das sich von den auf Festplatten verwendeten unterscheidet; daher kann man die Daten nicht einfach einzeln auf die Scheibe kopieren. Die Kommandos dd und mkisofs helfen beim Erstellen dieser Images, die sich anschließend probeweise mounten und auf eine CD brennen lassen.

Zu Befehl

Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

CD-Image auslesen

Eigentlich steht die Abkürzung des Programmes dd für "convert and copy" – cc ist allerdings schon für den C-Compiler vergeben. Das Tool überträgt Daten zwischen verschiedenen Speichermedien und führt auf Wunsch auch Konvertierungen der Daten durch. Dabei kopiert dd nicht nur einzelne Dateien, sondern kann auch direkt auf Devices zugreifen. So lassen sich neben ganzen Festplatten oder Partitionen auch CD-ROMs kopieren.

Die Optionen werden ohne vorangehenden Bindestrich übergeben. Es lassen sich die Blockgrößefür die Ein- und Ausgabedatei und die Anzahl der zu kopierenden Blöcke bestimmen. Den Boot-Sektor von der ersten Festplatte sichern Sie beispielsweise mit:

asteroid:~# dd if=/dev/hda of=bootsektor bs=512 count=1

Die Option if ("infile") bestimmt die Eingabedatei (default ist die Standardeingabe); of ("outfile") bezeichnet die Zieldatei. Mit dem Parameter bs ("blocksize") geben Sie die Blockgröße an; count legt fest, wieviele Blöcke kopiert werden sollen. Im Klartext bedeutet der Aufruf also: Kopiere von der ersten IDE-Platte (/dev/hda) in eine Datei namens bootsektor den ersten Block (count=1), der 512 Bytes groß ist (bs=512).

Weitere Anwendungsmöglichkeiten sind z. B. das Erstellen einer Boot-Diskette, indem der Kernel (vmlinuz) auf eine Diskette kopiert wird:

asteroid:~# dd if=/vmlinuz of=/dev/fd0

Mit einer solchen Diskette lässt sich das Linux-System auch noch starten, nachdem eine spätere Windows-Installation den Boot-Sektor überschrieben hat. Der einfachste Weg zum Kopieren einer reinen Daten-CD ist:

asteroid:~# dd if=/dev/cdrom of=bla.iso
1349272+0 records in
1349272+0 records out

Hierfür muss die CD nicht gemountet sein – dd ist unabhängig von der Art der Daten auf der CD. Nur eine Audio-CD darf es nicht sein, Musik wird mit anderen Programmen ausgelesen (cdda2wav).

Mach Dir ein Bild!

Sollen Daten zunächst selbst gesammelt und dann auf eine CD geschrieben werden, muss aus diesen ein ISO-Image erstellt werden. Hier kommt das Kommando mkisofs ("make ISO9660 filesystem") ins Spiel. Das Programm erzeugt eine Datei nach den ISO9660-Richtlinien.

Der einfache Aufruf, um Daten aus einem Verzeichnis in ein Image zu schreiben, lautet:

mkisofs [parameter] -o datei.iso /tmp/daten

Die Option -o bestimmt die Ausgabedatei, in die das Image geschrieben wird (hier datei.iso); gelesen wird aus /tmp/daten. Die gängigsten Parameter, die Sie immer wieder verwenden werden, sind -r und -JRockridge- und Joliet-Erweiterungen. So stellen Sie sicher, dass die CD auch unter Windows-Betriebssystemen gelesen werden kann. Statt der Option -r darf auch -R an dieser Stelle stehen. Hier wird ebenfalls Rockridge genutzt, aber Rechte und Dateieigentümer bleiben erhalten – die richtige Wahl also, wenn beispielsweise ein Backup eines /home-Verzeichnisses für den eigenen Rechner angelegt werden soll.

Boot-fähige CDs

Eine weitere wichtige Option ist -b zum Anlegen einer Boot-CD. Die Datei, welche durch -b spezifiziert wird, muss 1,2 MB, 1,44 MB oder 2,88 MB groß und das Image einer Bootdiskette sein – Voraussetzung ist natürlich, dass innerhalb der ersten 512 Bytes der Boot-Sektor liegt. Zusätzlich sollten Sie immer auch die Option -c verwenden, die relativ zum Root-Verzeichnis der CD eine (noch nicht vorhandene) Datei angibt, die als Boot-Katalog erzeugt wird, z. B. mkisofs -c images/boot.cat.

Mit der Option -V setzen Sie eine VolumeID, also den "Namen" der CD, z. B. -V "Backup vom 01. Dezember 2002". Typische LinuxUser-Heft-CD-Images werden beispielsweise mit der folgenden Befehlszeile erzeugt:

mkisofs -V "LU 01-2003" -J -r -P "Linux New Media" \
  -b Boot/cdrom.img -c Boot/boot.cat \
  -o lu-2003-01.iso lu01/

isolinux

Die Möglichkeiten, die ein 1,44 MByte großes Boot-Disk-Image bietet, sind beschränkt – sollen neben dem Kernel noch Module auf dieses Image, wird es eng. Eine Alternative bietet das Isolinux-System (http://syslinux.zytor.com/iso.php), das eine Weiterentwicklung des Boot-Loaders SysLinux für Disketten ist. Über eine Konfigurationsdatei kann ein beliebiger Kernel aktiviert werden, der auf dem CD-Dateisystem liegt. Auch RAM-Disks, die beim Linux-Start geladen werden sollen, lassen sich hier direkt von der CD laden. Das Boot-Menü von Isolinux wird über eine Konfigurationsdatei isolinux/islinux.cfg eingerichtet, in der (ähnlich wie in der LILO-Konfiguration) Abschnitte der Form

label linux
  kernel vmlinuz
  append initrd=disk.rdz ramdisk_size=32000 root=/dev/ram3  vga=788 automatic=method:cdrom

zu finden sind. Dabei liegen der Kernel vmlinuz und die RAM-Disk disk.rdz im Verzeichnis /isolinux der CD-ROM; es können auch Unterverzeichnisse von /isolinux verwendet werden.

Ein CD-Image mit Isolinux-Bootloader wird nun über den folgenden mkisofs-Aufruf erzeugt:

mkisofs -J -r -b isolinux/isolinux.bin \
  -c isolinux/boot.cat \
  -no-emul-boot -boot-load-size 4 \
  -boot-info-table \
  -o output.iso verzeichnis/

Auf der sicheren Seite

Bevor Sie das neue Image mit dem Programm Ihrer Wahl brennen (z. B. cdrecord oder X-CD-Roast), können Sie es auf eventuelle Fehler untersuchen. Mit dem Befehl mount lassen sich nicht nur Datenträger, wie z. B. Festplatten oder CDs, in das Linux-Dateisystem einbinden, sondern auch ISO-Images zur Verfügung stellen. Als Administrator root mounten Sie ein solches Image mit dem Aufruf:

asteroid:~# mount -o loop bla.iso /mnt/tmp/

Eventuell braucht das Kommando noch Hilfestellung bei der Wahl des Dateisystems; in diesem Fall fügen Sie eine weitere Option -t iso9660 hinzu. Das Image lässt sich mit dem Befehl umount /mnt/tmp wieder unmounten.

Glossar

Blockgröße

Ein Block ist eine fortlaufende Ansammlung von Bytes auf einem Datenträger. Bestimmte Geräte organisieren ihre Daten in diesen Blöcken ("block devices"), im Gegensatz zu anderen Geräten, die zeichenorientiert arbeiten ("character devices") und bei denen jeweils einzelne Bytes gelesen oder geschrieben werden.

ISO

Linux unterstützt mehrere Typen von Dateisystemen. Dazu gehören nicht nur die eigenen, wie z. B. ext2, ext3 oder reiserfs, sondern auch vfat- und ntfs-Dateisysteme, wie sie unter Windows verwendet werden. ISO 9660, wie der komplette Name lautet, ist der Standard für die Verwaltung von Dateien auf CD-ROMs. Ursprünglich wurden nur kurze Dateinamen unterstützt; die Rockridge- und Joliet-Erweiterungen heben diese Beschränkung auf.

Rockridge

Die Rockridge Extensions erweitern das ISO-CD-Dateisystem um Unix-typische Dateiinformationen wie Besitzer und Gruppe, Zugriffsrechte (Lesen, Schreiben, Ausführen) und symbolische Links. Dadurch ist ein Kopieren von Daten aus einem Unix-Dateisystem auf eine CD ohne Informationsverlust möglich. Außerdem erlaubt Rockridge längere Dateinamen.

Joliet

Von Microsoft kommt eine alternative Erweiterung des ISO9660-Dateisystems namens Joliet, die ebenfalls lange Dateinamen zulässt.

Einem Freund empfehlen    Druckansicht beenden Bookmark and Share
Kommentare