logoOL.gif
user_gelb_schwarz_or.gif
logoUL.gif
logoUR.gif claim.gif
LinuxUser LinuxCommunity EasyLinux Linux-Magazin International
      Anzeige
TFT Monitor bei Mercateo kaufen.
Neues Netbook? Ein Preisvergleich lohnt sich.
Bei uns finden sie Notebooks, PDAs und Drucker mit Testberichten und Tipps.
Diamant Buchhaltungssoftware – transparent und detailliert auch für die Konzernbuchhaltung.
Günstige Shareware Programme als direkte Downloads im Software Portal.
Bis zu 70% sparen durch Preisvergleich.
      Anzeige

Erschienen in LinuxUser 05/2001   »   Ausgabe bestellen

CDs auf der Kommandozeile schnell geschrieben

Die Konsole brennt

von Hans-Georg Eßer


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.

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 mkisofs und cdrecord notwendig.

Abb. 1: Die man pages zu cdrecord und mkisofs sind mehr als ausführlich und eine echte Hilfe -- ein Blick auf die esoterischeren Optionen kann unterhaltend sein

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-Image names /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.


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.

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:

Der zusätzliche Parameter -v steht 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:

Es ist auch möglich, Audio-CDs in mehreren Schritten zu erstellen. Dazu wird dann die zusätzliche Option -nofix verwendet. 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").


Little / 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.

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. (hge)

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 mit chmod a+r /dev/sg* können Sie den Bus-Scan als Administrator root durchführen und dann nur die benötigte Gerätedatei auf "a+rw" setzen.
  • Generic Devices: cdrecord verwendet 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 Modul sg, das beim Zugriff auf eine dieser Dateien automatisch geladen wird. Geschieht dies nicht, laden Sie es manuell mit modprobe -v sg nach.

Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.




Druckerfreundliche Version | Feedback zu dieser Seite | Datenschutz | © 2010 Linux New Media AG

[Linux-Magazin] [LinuxUser] [EasyLinux] [Linux-Community] [Ubuntu User] [Linux Technical Review] [Linux Magazine] [Linux Pro Magazine] [Ubuntu User]
[EasyLinux Poland] [Linux Magazine Poland] [Linux Magazine Brasil] [EasyLinux Brasil] [Linux Magazine Spain]