Unter Windows besitzen alle CD-Brennprogramme eine grafische Oberfläche; neue Audio- und Daten-CDs werden per Drag & Drop zusammengestellt, und nach einigen Mausklicks beginnt der Brennvorgang. Das geht unter Linux genauso, muss es aber nicht. Der Weg über die als benutzerunfreundlich geltende Kommandozeile macht Sie schneller!
Warum sollte man sich mit einem Kommandozeilen-basierten Tool zum CD-Brennen auseinander setzen, wenn es doch entsprechende grafische Anwendungen (wie etwa Xcdroast) gibt? Hierauf gibt es mehrere Antworten.
- Geschwindigkeit: Bei der Verwendung der im Folgenden beschriebenen Tools
mkisofsundcdrecordkönnen Sie mit ein bis zwei kurzen Befehlen sämtliche Dateien eines bestehenden Verzeichnisses auf eine Daten-CD oder eine Reihe von WAV-Dateien auf eine Audio-CD brennen. Probieren Sie es aus: So schnell geht es mit keinem GUI-Tool. - Kontrolle: Ein Argument, das allgemein den Einsatz von Kommandozeilen-Tools befürwortet, ist die vollständige Kontrolle über die zu erledigende Aufgabe. Da Sie dem Programm datailliert über Optionen mitteilen, was es tun soll, bleiben Überraschungen aus.
- Ressourcen: Selbst ein uralter Rechner, der mit einem aktuellen ATAPI- oder SCSI-CD-Brenner ausgestattet wurde, kann als Brenn-Rechner eingesetzt werden. Dazu muss er keine aktuelle Grafikkarte verwenden, sondern kann durchaus im Textmodus eingesetzt werden. Selbst ohne Monitor geht es, wenn über eine Netzwerkanbindung der Login von einem anderen Rechner möglich ist.
- Aus Prinzip: Freunde der Shell werden für alle Aufgaben eine Möglichkeit suchen, diese in der Konsole auszuführen… Auch die grafischen Brennprogramme tun nichts anderes als über mehr oder weniger gelungene Dialoge Parameter zu erfragen, die dann an genau die gleichen (Konsolen-) Tools übergeben werden. Das Verständnis dieser Tools ist in jedem Fall sinnvoll, denn auch beim Einsatz eines grafischen Frontends werkeln ja im Hintergrund die hier beschriebenen Programme – sollte also einmal etwas nicht funktionieren, ist spätestens dann eine Auseinandersetzung mit
mkisofsundcdrecordnotwendig.
Daten-CDs
Die einfachste Variante des Brennens einer Daten-CD ist die Sicherung eines vollständigen Unterverzeichnisses (mit weniger als 650 MB Inhalt im Fall einer Standard-CD/R). Um etwa das Verzeichnis /tmp/datencd/ vollständig auf CD zu brennen, könnten Sie eine Variante der beiden folgenden Befehle verwenden:
mkisofs -r -J -o /tmp/datencd.iso /tmp/datencd/ cdrecord -v dev=0,4,0 speed=4 /tmp/datencd.iso
Was passiert hier? mkisofs (“make ISO9660 filesystem”) erzeugt ein sogenanntes ISO-Dateisystem – vielleicht erinnern Sie sich daran, dass in Ihrer Mount-Konfigurationsdatei /etc/fstab für das CD-ROM-Laufwerk der Dateisystemtyp ISO9660 vorgegeben ist; in diesem Format sind alle Daten-CDs für Windows- und Unix-Rechner beschrieben. Der Aufruf mkisofs -o /tmp/datencd.iso /tmp/datencd/ würde streng nach ISO-Standard ein CD-Imagenames /tmp/datencd.iso erzeugen, das alle Dateien aus dem Unterverzeichnis /tmp/datencd/ enthält. Der ISO-Standard ist allerdings beschränkt, was die Namensgebung und weitere Dateisystem-Features (wie etwa Unix-Zugriffsrechte und symbolische Links) angeht; ein “ordentliches” Dateisystem, das sowohl unter Linux/Unix als auch Windows gut lesbar ist, erhalten Sie nur, wenn Sie das ISO-konforme Inhaltsverzeichnis um die sogenannten “Rockridge-Extensions” (für Unix) und “Joliet Extensions” (für Windows) ergänzen – genau das leisten die Optionen -r und -J.
Im zweiten Schritt wird das soeben erstellte CD-Image mit dem Befehl cdrecord auf einen CD-Rohling geschrieben. Die beiden Parameter ohne “-” legen fest, welches Gerät (der CD-Brenner) verwendet werden soll und welche Brenngeschwindigkeit gewünscht wird. Im Detail bedeutet dies:
dev=0,4,0: Der Brenner hängt am ersten SCSI-Controller (gezählt wird ab 0), hat die SCSI-ID 4 und die LUN (Logical Unit Number) 0. Die LUN ist bei Brennern immer 0. Wenn Sie nicht wissen, welche SCSI-ID Ihr Brenner hat, verwenden Sie den Befehlcdrecord -scanbus. Zur Verwendung von ATAPI-Brennern finden Sie weiter unten mehr Informationen.speed=4: Das ist einfach; brennen mit vierfacher Geschwindigkeit. Der zusätzliche Parameter-vsteht für “verbose” (ausführlich) und gibt während des Brennvorgangs regelmäßig eine Statusmeldung aus, wieviel Prozent der CD bereits fertiggestellt wurden. Am Ende des Aufrufs steht der Dateiname des CD-Images.
On the fly
Es ist auch möglich, ein Verzeichnis direkt auf die CD zu brennen, ohne vorher 650 MB Plattenplatz zu belegen. Dazu wird die Ausgabe von mkisofs einfach über eine Pipe an cdrecord übergeben; dazu wird mkisofs ohne Angabe einer Output-Datei (-o file) aufgerufen und schreibt das ISO-Image einfach in die Standardausgabe:
mkisofs -r /tmp/datencd | cdrecord -v fs=6m speed=4 dev=0,4,0 -
Das Minus-Zeichen am Ende des Befehls ist notwendig, da cdrecord so versteht, dass es die Daten aus der Standardeingabe und nicht aus einer Datei lesen soll. Hier soll ein Puffer von 6 MB (Option fs=6m) garantieren, dass es zu keinem Buffer Underrun kommt. Solche Buffer Underruns, die zur Zerstörung des Rohlings führen, sind aber unter Linux recht unwahrscheinlich, da das Betriebssystem über ein gutes Multitasking verfügt. Selbst mit heftigsten Aktivitäten anderer Programme ist es mir bisher noch nicht gelungen, cdrecord aus dem Takt zu bringen. Bei anderen Betriebssystemen, deren Multitasking schwächer ist, sind “verbrannte” Rohlinge allerdings an der Tagesordnung, da kann schon ein Start des Screensavers für Probleme sorgen… Lediglich auf sehr leistungsschwachen oder ungewöhnlich massiv ausgelasteten Rechner wäre ein derartiges Versagen unter Linux denkbar, aber auch dafür hat die Industrie mittlerweile Abhilfe geschaffen: Geräte mit BURN-Proof-Technik verhindern zuverlässig Buffer Underruns. cdrecord unterstützt diese Technik; mehr dazu ab Seite 24.
Audio-CDs
Für Audio-CDs wird mkisofs nicht benötigt, da diese kein Dateisystem enthalten. Vielmehr werden hier einfach die Tracks hintereinander auf die CD geschrieben. Für den Brennvorgang wird aber wie bei Daten-CDs cdrecord verwendet, nur mit leicht geänderten Optionen. Aus dem Beispielaufruf vom Beginn des Artikels wird nun
cdrecord -v -audio -pad dev=0,4,0 speed=4 /tmp/track*.wav
Die dev– und speed-Optionen haben ihre Bedeutung nicht geändert, dafür sind zwei neue hinzugekommen:
-audioteilt der Brenn-Software offensichtlich mit, dass eine Audio-CD gebrannt werden soll.-padist weniger offensichtlich. Audio-CDs enthalten Tracks gemäß dem CD-DA-Standard (Compact-Disc Digital-Audio), und Tracks nach dieser Spezifikation müssen einige besondere Eigenschaften haben. Zunächst müssen Sie eine Samplingrate von 44100 Samples pro Sekunde besitzen, und außerdem muss ihre Dateigröße ein Vielfaches von 2352 Bytes sein. Da die zum Brennen zur Verfügung stehendenwav– oderau-Dateien in der Regel nicht diese Dateigrößeneigenschaft erfüllen, ist die Option-padnotwendig, die einfach am Dateiende eine ausreichende Zahl an Nullen anfügt. Es ist auch möglich, Audio-CDs in mehreren Schritten zu erstellen. Dazu wird dann die zusätzliche Option-nofixverwendet. Zum Beispiel würden die folgenden drei Befehle jeweils zwei Tracks auf die CD brennen und den Rohling erst beim dritten Schreibvorgang “fixieren”, also endgültig abschließen:
cdrecord -v -audio -pad -nofix dev=0,4,0 speed=4 t1.wav t2.wav cdrecord -v -audio -pad -nofix dev=0,4,0 speed=4 t3.wav t4.wav cdrecord -v -audio -pad dev=0,4,0 speed=4 t5.wav t6.wav
Haben Sie eine noch nicht fixierte CD (die sich in der Regel nur in CD-Brennern, nicht aber in einfachen CD-ROM-Laufwerken oder Audio-CD-Playern abspielen lässt), so können Sie diese jederzeit mit Hilfe der Option -fix abschließen:
cdrecord -v -fix dev=0,4,0
Je nach Aufbau Ihrer wav-Dateien kann es vorkommen, dass die erstellte CD zwar die erwartete Anzahl an Audio-Tracks enthält, diese aber bei der Wiedergabe nur Rauschen produzieren. Dann ist die Byte-Reihenfolge der Audio-Kodierung falsch; hier gibt es Little Endian und Big Endian. Um dieses sehr seltene Phänomen loszuwerden (und die Byte-Reihenfolge zu korrigieren), gibt es die Option -swab (“SWAp Bytes”).
Audio-Tracks auslesen
Nicht eigentlich direkt zum Thema Brennen gehört das Auslesen einer Audio-CD; da beim Kopieren solcher CDs aber vor dem Brennen das Auslesen steht, wollen wir das passende Kommandozeilen-Tool hier auch kurz vorstellen.
Anders als Daten-CDs enthalten Audio-CDs nicht einfach ein normales Dateisystem, welches mit dd ausgelesen werden könnte. Hier muss stattdessen ein spezieller CDDA-Grabber eingesetzt werden, das Standard-Tool für diese Aufgabe ist cdda2wav
Im Artikel cd2mp3 ab Seite 30 erfahren Sie übrigens noch etwas über die Konvertierung von mp3– in wav-Dateien und umgekehrt: MP3-Dateien lassen sich zwar auch direkt auf CD brennen (so passen in der Regel mehr als zehn Alben auf einen Rohling), dies sind dann aber normale Daten-CDs, die vom CD-Player nicht abgespielt werden können. Für die Wiedergabe auf einem normalen CD-Player ist eine Umwandlung in normale wav-Dateien notwendig.
ATAPI-Brenner
Bisher wurde nur die Verwendung von SCSI-Brennern erklärt – Besitzer der in der Regel preisgünstigeren ATAPI-Brenner sind jedoch nicht vom Brennvergnügen ausgeschlossen: Linux besitzt für ATAPI-Geräte eine SCSI-Emulation, die es erlaubt, einen ATAPI-Brenner als SCSI-Gerät zu erkennen und mit den unter SCSI üblichen Kontrollbefehlen anzusteuern.
Diese SCSI-ATAPI-Emulation ist in der Regel nicht in den Kernel eingebunden, da sie außer für den Einsatz von ATAPI-Brennern selten benötigt wird. Um das entsprechende Kernel-Modul nachzuladen, geben Sie als Administrator root den Befehl
modprobe -v ide-scsi
ein. Das Modul sollte nun geladen sein, und über den Befehl
cat /proc/scsi/scsi
erhalten Sie einen Überblick über die “neu hinzugekommenen” SCSI-Geräte in Ihrem Rechner. Ist auch ein richtiger SCSI-Controller vorhanden, so wird die SCSI-ATAPI-Emulation als zweiter SCSI-Bus (Nr. 1) in das System eingefügt; die für den cdrecord-Aufruf benötigte dev-Option ist dann dev=1,X,0. Mehr Informationen zu ATAPI-Brennern finden Sie im Kasten auf Seite 26.
Problemlösungen
- Zugriffsrechte: Um den Bus zu scannen bzw. um den eigentlichen Brennvorgang durchzuführen, müssen die Gerätedateien
/dev/sg*mit Leserechten (und mindestens die zum Brenner gehörende Datei auch mit Schreibrechten) für Sie versehen sein. Alternativ zur Freigabe der Leserechte für alle Benutzer mitchmod a+r /dev/sg*können Sie den Bus-Scan als Administratorrootdurchführen und dann nur die benötigte Gerätedatei auf “a+rw” setzen. - Generic Devices:
cdrecordverwendet zum Brennen einen direkten Zugriff auf den CD-Brenner – dazu müssen die “Generic Devices”, die über die Gerätedateien/dev/sg*(SCSI generic) ansprechbar sind, erkannt werden. In der Regel leistet dies ein Modulsg, das beim Zugriff auf eine dieser Dateien automatisch geladen wird. Geschieht dies nicht, laden Sie es manuell mitmodprobe -v sgnach.
Glossar
-
CD-Image
-
Ein CD-Image ist ein identisches Abbild des “rohen” Inhalts einer Daten-CD – ein solches Image lässt sich unter Linux beispielsweise aus einer Daten-CD erzeugen, indem der Befehl dd if=/dev/cdrom of=/tmp/cd.iso verwendet wird. dd liest dabei einfach Byte für Byte die CD aus und schreibt den Inhalt in die Ausgabedatei cd.iso; eine solches CD-Image lässt sich dann mit cdrecord wieder auf einen CD-Rohling schreiben oder (wie im “Zu Befehl” dieser Ausgabe beschrieben) sogar mit mount wie eine richtige CD ins Dateisystem einhängen.
-
Little Endian und Big Endian
-
Little und Big Endian sind Begriffe, die etwas über die Prozessorarchitektur aussagen. Es geht darum, wie Werte, die nicht vollständig in einer Speicherzelle gespeichert werden können, über mehrere solche Zellen verteilt werden: So wird etwa der Wert 43981 (hexadezimal ABCD) in AB und CD aufgeteilt. Bei Big Endian wird nun in der ersten Speicherzelle AB und in den zweiten CD abgelegt; bei Little Endian ist es genau verdreht.





