CD-ROM unter UNIX
Willemers Informatik-Ecke

CD-ROMs

ISO 9660 mit Rockridge

Das Standardformat für CDs ist ISO-9660, auch High Sierra genannt. Dieses Format kann aber mit all dem, was eine UNIX-Datei ausmacht, wenig anfangen. Bereits der Dateiname ist auf 8+3 Buchstaben in Großbuchstaben beschränkt. An das Speichern von User-ID und andere Eigenschaften braucht man gar nicht zu denken. Damit man auch unter UNIX mit CD-ROMs vernünftig umgehen kann, gibt es die Rockridgeerweiterungen. Damit lassen sich auch CDs vernünftig ins Dateisystem integrieren.

Das Einbinden funktioniert wie bei der Diskette mit dem Befehl mount. Auch die CD muss zunächst per umount ausgekoppelt werden, bevor sie entnommen werden kann. Da die CD-Laufwerke inzwischen alle eine Verriegelung besitzen, sind auch die PC-Versionen von UNIX nicht mehr darauf angewiesen, dass der Anwender aufpasst, sondern können eine eingebundene CD gegen das Herausnehmen sperren.

Device des CD-ROMs

Ein Problem ist es, zu bestimmen, welcher Eintrag im Verzeichnis von /dev mit dem CD-Laufwerk korrespondiert. Bei den großen Herstellern von UNIX-Maschinen kann man den Ort der Laufwerke meist durch die mitgelieferte Dokumentation leicht erfahren. Da meist SCSI-Einheiten eingebaut sind, kann man mit Hilfe der SCSI-ID auch recht schnell auf das Device schließen. Bei ATAPI auf dem PC hängt es davon ab, an welchem Controller das Laufwerk hängt. USB wird als SCSI-Device emuliert und wird vom System als weiterer SCSI-Controller angesprochen. Wer nun glücklich ermittelt hat, welches Device zum CD-Laufwerk gehört, tut jedenfalls gut daran, einen symbolischen Link namens cdrom im Verzeichnis /dev zu legen. Mit etwas Glück hat die Standardinstallation bereits einen solchen Link angelegt.

CD-Brenner

Der Kontakt mit dem CD-Brenner erfolgt in erster Linie mit dem Programm cdrecord. Als einen Parameter benötigt es die Information, wie der CD-Brenner mit dem Gerät verbunden ist. Am einfachsten funktioniert das mit SCSI-Laufwerken, bei denen der Controller, die SCSI-ID und die LUN angegeben. Wird. Die LUN ist normalerweise 0, die SCSI-ID wird am Gerät eingestellt und meistens besitzt man auch nur einen Controller. In den folgenden Beispielen verwende ich meine Konfiguration. Und die SCSI-ID meines Brenners ist 3.

Das Programm cdrecord kommt aus dem Umfeld von Linux, findet sich aber inzwischen, da es Open Source ist, auf allen großen UNIX Plattformen. Bei MacOS X ist es nicht verfügbar, da das Brennen von CDs direkt in den Desktop eingebunden ist.

Datensicherung

Da CD-Rohlinge inzwischen billiger sind als Disketten, ist ein CD-Bren­ner als Datensicherungsoption auf dem PC immer interessanter. Brauchbare Streamer sind teuer und auch die Medien sind nicht billig. Wenn man dann davon ausgeht, dass Magnetbänder nach einer gewissen Laufzeit nicht mehr verwendbar sind, wird die Verwendung von CDs immer naheliegender. Das Problem der CDs liegt in ihrer geringen Kapazität von 650MB. Dadurch fallen sie in der Regel für die Komplettsicherung aus. Natürlich kann man mit Hilfe eines Packers wie gzip auch größere Datenbestände sichern. Allerdings wird man auch damit keine Größenordnungen erreichen, wie sie bei heutigen Platten gebraucht werden.

Um eine Datensicherung von der Platte auf CD zu brennen, sind zwei Schritte erforderlich. Zunächst wird mit Hilfe des Befehls mkisofs ein brennbarer Speicherabzug erstellt, der anschließend mit cdrecord auf die CD gebrannt wird.

Erstellen eines Images

Bevor ein Verzeichnis auf CD gebrannt werden kann, wird ein ISO-9660 Dateisystem erzeugt. Das Programm mkisofs erzeugt ein solches Dateisystem und legt es in einer Datei als so genanntes Image ab. Der Dateiname des Images wird als Parameter der Option -o angegeben. Zuletzt wird das Verzeichnis, das mit allen Unterverzeichnissen auf die CD soll, angegeben. Im folgenden Beispiel wird mit cd in das zu sichernde Verzeichnis gewechselt. Es folgt der Befehl zum Erzeugen des Imgages.

mkisofs -J -R -o ../image.iso .

Die Optionen von mkisofs bedeuten:

-o ausgabe.iso
Die Ausgabe erfolgt in die angegebene Datei. Standardmäßig geht die Ausgabe nach stdout und kann so über eine Pipe an cdrecord weitergeleitet werden.
-R
Als Ergänzung zum ISO-9660 wird das Rockridge-Format verwendet, um lange Dateinamen und Dateiattribute auf der CD zu speichern. Dies ist Standardformat von CDs im UNIX-Bereich.
-J
Als Ergänzung zum ISO-9660 wird das Joliet-Format verwendet, um lange Dateinamen auf der CD zu speichern. Dies ist Standardformat von CDs unter MS-Windows 95 und folgende. Damit ist die CD auch unter MS-Windows mit langen Namen verwendbar.

Die Zieldatei befindet sich im Verzeichnis unter dem Quellverzeichnis, damit das Image nicht in die Datensicherung hineingerät.

Brennen

Das erzeugte Image wird vom Programm cdrecord gebrannt. Das Programm benötigt bei einer Standardinstallation root-Rechte. Sollen auch Anwender das Gerät ansprechen, was bei einer Workstation sinnvoll ist, dann kann der Administrator den Eigentümer auf root und das User-ID-Bit setzen.

cd /usr/bin
chown root cdrecord
chmod 4711 cdrecord

Für SCSI-Brenner wird die SCSI-Nr als Parameter benötigt. Kennt man diese nicht, kann man sie mit Hilfe von cdrecord und der Befehlsoption -scanbus ermitteln. Für das Brennen wird dem Paramter dev= ein Tripel aus SCSI-Bus, also welchem Adapter, SCSI-ID und LUN (bei Brennern typischerweise 0) zur Bestimmung des Gerätes mitgegeben.

cdrecord -dev 0,3,0 -speed=2 image.iso

Mit der Option speed=2 wird die Brenngeschwindigkeit auf 2 gesetzt. Schneller kann mein Brenner eben nicht. Vergisst man die Option, wird die Geschwindigkeit auf 1 gesetzt und das viele Geld für den schnellen Brenner ist umsonst ausgegeben.

Direktes Brennen durch die Pipe

Wird zum Zweck der Datensicherung ein Bereich der Festplatte gesichert, ist die Datenquelle so schnell, dass man das Image direkt an das Brennprogramm schieben kann. Der Vorteil liegt darin, dass nur 4MB Puffer Plattenspeicher benötigt wird, statt bis zu 650MB für das Image.

mkisofs  -R  /home/mydata  | cdrecord speed=2 dev=0,3,0 -

Kopieren einer Daten-CD

Um von einer Daten-CD eine 1:1 Kopie zu machen, greift man direkt auf das Image des Devices als Datenquelle für cdrecord zu und braucht entsprechend mkisofs nicht. Allerdings sollte das CD-Laufwerk auch deutlich schneller und ruckfreier lesen als der Brenner schreibt.

cdrecord -v dev=0,3,0 speed=2 -isosize /dev/cdrom

Image mit dd zwischenparken

Gerade schnelle CD-Laufwerke brauchen manchmal länger, um auf Ihre Zielgeschwindigkeit zu kommen. In diesen Momenten kann der Datenstrom länger ausbleiben, als der Brenner verkraften kann. Das führt zu einem Buffer underrun. Die Anforderung an das Laufwerk sind also eine höhere Geschwindigkeit als der Brenner und ein möglichst konstanter Datenstrom. Man kann das Problem vermeiden, indem man auf der Platte eine Zwischenkopie anfertigt. Um das Image einer CD abzuziehen, verwendet man das Programm dd.

dd if=/dev/cdrom of=/tmp/img.iso
cdrecord -v dev=0,3,0 speed=2 /tmp/img.iso

RW-Medien

In den Kommandos zum Brennen unterscheiden sich RW-Medien nicht von den normalen Medien. Die Besonderheit liegt darin, dass man sie löschen und wieder verwenden kann. Das Löschen kann beim Brennen erfolgen. Dazu gibt man dem cdrecord die Option blank=fast mit. Weitere Optionen für blank sind:

blank= Wirkung
fast Minimales Löschen: PMA, TOC und pregap werden gelöscht
track Lösche nur einen Track (bei Multisession)
all Komplette CD-RW löschen. Das wird etwas dauern.

Multisession

Normalerweise wird eine CD an einem Stück gebrannt. Aber gerade bei der Datensicherung einer Workstation ist das Datenaufkommen oft so gering, dass man gern mehrere Sicherungen auf eine CD schreiben möchte. Dazu werden mehrere Tracks geschrieben. Die Trackposition wird mkisofs mit dem Parameter -C mitgeteilt. Sie besteht aus zwei durch ein Komma getrennte Zahlen. Die eine gibt die Anfangsposition des zuletzt gebrannten Tracks und die zweite beschreibt die Position, an der die neue Session aufsetzen soll. Man kann dieses Zahlenpaar mit cdrecord -msinfo bestimmen. Beim Brennen wird cdrecord wird mit der Option -multi mitgeteilt, dass mit Multisession gearbeitet wird.

Der erste Track

Der erste Track unterscheidet sich nur in der Option -multi von einem normalen Brennen. Damit wird vermieden, dass die CD abgeschlossen wird.

mkisofs -J -R -o ../image.iso .
cdrecord -v speed=2 dev=0,3,0 -multi ../image.iso

Die Folgetracks

Im nächsten Schritt soll eine beliebige weitere Sitzung gebrannt werden. In der Variablen TRACKPOS werden die Daten für die Position auf der CD gehalten. Den Wert der Variablen ermittelt man mit Hilfe des cdrecord von der einliegenden CD. TRACKPOS wird anschließend von mkisofs verwendet, um die Option -C zu besetzen. Die Option -M ermittelt von der eingelegten CD den vorherigen Track. Als Parameter können die SCSI Informationen, wie sie bei cdrecord vorliegen, verwendet werden, oder man gibt den Pfad des Device an.

TRACKPOS=`cdrecord -msinfo dev=0,3,0` 
mkisofs -J -R -f -o ../image.iso -C $TRACKPOS -M 0,3,0 .
cdrecord -v speed=2 dev=0,3,0 -eject -multi ../image.iso

Um eine Multisession CD abzuschließen, wird beim cdrecord die Option -multi weggelassen.

Audio-CDs

Auch wenn UNIX oft nur mit den dicken Servern in Verbindung gebracht werden, kann man es gut im Multimediabereich einsetzen. Dort waren beispielsweise Systeme von Silicon Graphics sogar Vorreiter. Auch heute noch werden UNIX Workstations bei der Entwicklung von Spielfilmen eingesetzt. So kann ein UNIX System heutzutage selbstverständlich auch Audio CDs abspielen und auch brennen.

Das Erstellen einer Audio-CD erfolgt aus mehreren Tracks, die jeweils aus einer Musikdatei gespeist werden. Dabei gibt es zwei gängige Formate. Das eine sind die WAV-Dateien, die von Microsoft definiert wurden und das andere die AU-Dateien, die aus dem Hause Sun stammen. Hat man seine Musik in diesen Formaten vorliegen, kann man mit ihnen und der Hilfe von cdrecord normale Audio-CDs herstellen, die man auch in der heimischen Stereoanlage hören kann.

cdrecord -dev 0,3,0 -speed=2 -pad -audio *.wav

Die Option -pad ist notwendig, wenn Sie Direktaufnahmen von Musikcassetten oder alten Schallplatten auf CD sichern wollen. Die Länge der Stücke passt selten genau auf die Blocklänge von CDs.

Auslesen von Audio-CDs

Braucht man einen Titel von einer bereits gebrannten CD als WAV-Datei, kann man ihn mit cdparanoia herunterlesen. Da cdparanoia direkt auf das Device /dev/cdrom zugreift, muss hier ein Link auf das CD-Laufwerk liegen. Selbstverständlich muss man auch Leserechte auf das Device haben.

cdparanoia 5 mysong.wav

Damit wird der Track 5 von der CD gelesen und als Datei mysong.wav gespeichert. Mit dem Parameter -B liest cdparanoia alle Tracks der CD aus und gibt den einzelnen Dateien fortlaufende Namen.

http://www.xiph.org/paranoia/

mp3-CDs

Audiodateien sind sehr groß. Mit mp3 ist es möglich, diese Dateien auf ein Zehntel zu reduzieren. Der Klangverlust ist so gering, dass sie insbesondere wenn man sie unterwegs im Auto oder im Zug hört, nicht ins Gewicht fallen.

CDs für mp3-Player werden nach ISO-9660 gebrannt, also wie gewöhnliche CDs für Daten. Die mp3-Musikdateien werden als gewöhnliche Dateien abgestellt. Die Erweiterungen Joliet und Rockridge stören nicht. Die neueren mp3-Player beherrschen auch den Umgang mit Verzeichnissen, so dass man nicht alle Titel in das Wurzelverzeichnis stellen muss. Das kann wichtig sein, weil eine CD mit mp3 weit über 100 Musiktitel aufnehmen kann. Immerhin ist eine mp3-Datei im Schnitt zwischen 2 und 5 MB groß.

Für das Konvertieren von WAV nach mp3 kann man das Programm notlame verwenden. Für die Gewinnung von WAV aus mp3 gibt es das Programm mpg123.

mp3-Dateien auspacken

Will man mp3-Dateien zum Brennen konventioneller Audio-CDs verwenden, muss man zunächst WAV- oder AU-Dateien generieren. Das kann das Programm mpg123.

mpg123 -w output.wav input.mp3

Mit diesen WAV-Dateien kann man dann wie oben gesehen, eine normale CD für die Verwendung in gewöhnlichen CD-Spielern herstellen. Natürlich wird die Qualität nicht so gut sein wie eine normale CD, da mp3 ja nun Kompromisse im Klang eingeht.

Generieren von mp3-Dateien

Für das Erzeugen von mp3-Dateien gibt es mehrere Tools. Einen guten Ruf hat das Produkt LAME. Da dafür Lizenzen fällig werden, ist dieses Produkt vor allem im professionellen Bereich zu finden. Für den Freizeitbereich gibt es Alternativen, wie beispielsweise notlame.

notlame --tt "Is That All" --ta "Headache" input.wav output.mp3

notlame bringt zwar keine Manpage mit, gibt aber auf die Option --help recht ausgiebige Informationen. Nähere Informationen finden sich im Internet unter der folgenden Adresse:

http://www.sulaco.org/mp3

http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru?