cd-158501_960_720Ich bin ja ein absoluter Fan der Kommandozeile, und bis auf Dinge wie Bildbearbeitung oder im Netz surfen geht auf der Kommandozeile fast alles schneller, und wenn man weiß wie auch einfacher.

Vielleicht habt ihr schon mal davon gehört: auch CDs oder DVDs lassen sich per Kommandozeile brennen.

Auch beim Brennen von CD’s gilt auf der Kommandozeile die Modularisierung. Daher gibt es gleich 2 Befehle, die für das Brennen zuständig sind: mkisofs und cdrecord.

Der Befehl mkisofs erstellt zunächst ein CD-Dateisystem, also ein Iso-Image. Der Befehl cdrecord brennt anschließend dieses Image auf CD. Wie funktioniert mkisofs? Die einfachste Form des Aufrufs ist:

Dies weist mkisofs an, die Dateien oder Ordner die mit Pfad spezifiziert wurden in ein CD-Dateisystem umzuwandeln und auf die Standardausgabe (das heißt im allgemeinen auf den Bildschirm) zu schicken.

Nun möchte man aber meistens ein Iso-Image als Datei erzeugen und nicht auf den Bildschirm ausgeben. Dafür kann man die Option -o verwenden:

Als zu brennende Dateien, lassen sich auch mehrere Dateien oder auch Ordner, deren Inhalt dann gebrannt wird angeben. mkisofs hat noch sehr viele Optionen, z. B. um bootfähige CD’s zu erzeugen, oder um anzugeben welche Eigenschaften das Dateisystem haben soll. Die Manpage von mkisofs gibt darüber genauere Auskunft. Zwei besonders wichtige und oft benutzte Optionen von mkisofs sind noch -r und -J. Die Option -J erzeugt ein Joliet Dateisystem, wodurch unter Windows-Betriebssystemen lange Dateinamen möglich sind. Per Default erlaubt das Iso 9660 CD Dateisystem nur Dateinamen in DOS-Notation mit maximal 8 Zeichen vor dem Punkt und 3 Zeichen nach dem Punkt (8+3 Regel). Durch Joliet bekommt die CD eine Erweiterung, die lange Dateinamen für Windowssysteme erhält. Die Option -r erzeugt Rockridge-Erweiterungen. Diese sind speziell für Unix/Linuxsysteme gedacht und haben den gleichen Zweck wie die Joliet Erweiterung für Windows. Durch Rockridge bleiben lange Dateinamen als solche für Linux-/Unixsysteme erhalten und auch die klassichen Unix-Dateirechte. Für die Dateirechte gibt es noch den Unterschied zwischen -r und -R: -r setzt die Rechte um auf Leserechte für alle und keine Schreibrechte, was bei einer CD meist sinnvoll ist, da CD’s ohnehin nur Read-only gemountet werden. Außerdem wird der Besitzer und die Gruppe jeweils auf UID 0 und GID 0 gesetzt (Besitzer root und Gruppe root), da die Werte für den Besitzer, auf einem fremden Rechner keinen Sinn mehr machen. Speziell für Datensicherungen, bei denen die wirklichen Dateirechte erhalten bleiben sollen ist die Option -R sinnvoll. Diese Option erhält die Dateirechte und Besitzverhältnisse wie im Orginal.

Die Optionen -r und -J können natürlich auch kombiniert werden, falls eine CD sowohl auf Unix/Linux-Systemen, als auch auf Windows-Systemen verwendet werden soll. Unser Befehlsaufruf sähe jetzt also zum Beispiel so aus:

Haben wir nun das Iso-Image erstellt, können wir es mit dem Befehl cdrecord brennen. Ebenso wie auch mkisofs kennt cdrecord eine riesige Menge an Optionen, die über die Manpage eingesehen werden können. Am wichtigsten für die Verwendung sind die Brenngeschwindigkeit, die mit speed definiert wird und das Brenngerät, das über dev definiert wird. Ein Aufruf kann also z. B. so aussehen:

Dies würde das Iso-Image „meinecd.iso“ mit 16-facher Brenngeschwindigkeit auf das SCSI-Laufwerk mit der Identität 0,0,0 brennen. SCSI? Ich habe aber gar keinen SCSI-Brenner! Unter Linux nutzt das CD-Brennen auch bei IDE-Laufwerken eine SCSI-Emulation. Dies gilt jedoch nur bei Kerneln bis einschließlich 2.4. Seit Kernel 2.6 ist die SCSI-Emulation für das CD-Brennen nicht mehr nötig. Wie erfahre ich welchen Kernel ich habe und was ich als Gerätebezeichnung angeben muß? Die Kernelversion erhält man mit folgenden Befehl:

Handelt es sich um einen 2.4.x Kernel, kann die SCSI-Gerätenummer mit Hilfe der Ausgabe von:

ermittelt werden. Dieser Befehl muss dabei als Root eingegeben werden. Handelt es sich um einen Kernel 2.6.x ist es einfacher: In diesem Fall kann die gewohnte Gerätebezeichnung, wie sie auch z. B. in der /etc/fstab aufgeführt wird verwendet werden (also z. B. /dev/sdc). Für Kernel 2.6.x könnte ein möglicher Aufruf von cdrecord also lauten:

Daneben können auch die Optionen -v und -eject noch ganz nützlich sein. Die Option -v macht die Ausgabe von cdrecord etwas ausführlicher, wodurch sie den Fortschritt des Brennvorganges beobachten können. Die Option -eject sorgt dafür, dass die CD nach dem Brennvorgang ausgeworfen wird. Unser Befehl könnte jetzt also so aussehen (Kernel 2.4.x):

Es ist auch möglich CD’s „on the fly“ zu brennen. Das heißt, das das erzeugen des CD-Dateisystems und das brennen in einem Rutsch erledigt werden. Hier kommt das Unixbaukastensystem mit seinen Pipes zum Einsatz. Wir erinnern uns, daß der Befehl mkisofs per Default auf die Standardausgabe schreibt. Mit einer Pipe läßt sich das so umleiten, daß dies zur Eingabe des Befehls cdrecord wird:

Wie man sieht wurde hier noch eine Option für cdrecord verwendet: driveropts=burnfree. Diese Option weist den CD-Brenner an den Schutz gegen Buffer-Underruns einzuschalten. Gerade wenn man „on the fly“ brennt, kann es schneller zu den gefürchteten Buffer-Underruns kommen, wodurch der Rohling ruiniert wird. Selbstverständlich muss der Brenner diese Option unterstützen.

Was aber wenn man gar keine Dateien oder Ordner von der Festplatte brennen will, sondern eine vorhandene CD kopieren will? In diesem Fall nützt mir der Befehl mkisofs nichts. Hier kommt mir das Unix-Tool dd zu Hilfe. Der Befehl dd kopiert Daten blockweise. Mit Hilfe von dd kann auch auf einem nicht gemounteten Datenträger blockweise geschrieben oder gelesen werden. Auf diese Weise kann sowohl ein Image von einem Datenträger erzeugt werden, als auch umgekehrt ein vorhandenes Image wieder auf den Datenträger aufgebracht werden. Wir legen also die CD die kopiert werden soll ins Laufwerk und geben ein:

Mit if wird das „Input File“ angegeben, mit of das „Output File“. In diesem Fall wird also direkt von dem Datenträger /dev/sdc (häufig das CD-Rom-Laufwerk) gelesen (ohne zu mounten) und auf die Festplatte in das aktuelle Verzeichnis als Image mit dem Namen meinecd.iso geschrieben. Auf diese Art erhalte ich wiederum ein Iso-Image, das sich mit cdrecord wie oben beschrieben brennen läßt.