19.6. CDs benutzen

Beigesteuert von Mike Meyer.

19.6.1. Einführung

CDs besitzen einige Eigenschaften, die sie von konventionellen Laufwerken unterscheiden. Zuerst konnten sie nicht beschrieben werden. Sie wurden so entworfen, dass sie ununterbrochen, ohne Verzögerungen durch Kopfbewegungen zwischen den Spuren, gelesen werden können. Sie konnten früher auch leichter als vergleichbar große Medien zwischen Systemen bewegt werden.

CDs besitzen Spuren, aber damit ist der Teil Daten gemeint, der ununterbrochen gelesen wird, und nicht eine physikalische Eigenschaft der CD. Um eine CD mit FreeBSD zu erstellen, werden die Daten jeder Spur der CD in Dateien vorbereitet und dann die Spuren auf die CD geschrieben.

Das ISO 9660-Dateisystem wurde entworfen, um mit diesen Unterschieden umzugehen. Leider hat es auch damals übliche Grenzen für Dateisysteme implementiert. Glücklicherweise existiert ein Erweiterungsmechanismus, der es korrekt geschriebenen CDs erlaubt, diese Grenzen zu überschreiten und dennoch auf Systemen zu funktionieren, die diese Erweiterungen nicht unterstützen.

Der Port sysutils/cdrtools enthält das Programm mkisofs(8), das eine Datei erstellt, die ein ISO 9660-Dateisystem enthält. Das Programm hat Optionen, um verschiedene Erweiterungen zu unterstützen, und wird unten beschrieben.

Welches Tool Sie zum Brennen von CDs benutzen, hängt davon ab, ob Ihr CD-Brenner ein ATAPI-Gerät ist oder nicht. Mit ATAPI-CD-Brennern wird burncd benutzt, das Teil des Basissystems ist. SCSI- und USB-CD-Brenner werden mit cdrecord aus sysutils/cdrtools benutzt. Zusätzlich ist es möglich, über das Modul ATAPI/CAM SCSI-Werkzeuge wie cdrecord auch für ATAPI-Geräte einzusetzen.

Wenn Sie eine Brennsoftware mit grafischer Benutzeroberfläche benötigen, sollten Sie sich X-CD-Roast oder K3b näher ansehen. Diese Werkzeuge können als Paket oder aus den Ports (sysutils/xcdroast und sysutils/k3b) installiert werden. Mit ATAPI-Hardware benötigt K3b das ATAPI/CAM-Modul.

19.6.2. mkisofs

Das Programm mkisofs(8) aus dem Port sysutils/cdrtools erstellt ein ISO 9660-Dateisystem, das ein Abbild eines Verzeichnisbaumes ist. Die einfachste Anwendung ist wie folgt:

# mkisofs -o Imagedatei /path/to/tree

Dieses Kommando erstellt eine Imagedatei, die ein ISO 9660-Dateisystem enthält, das eine Kopie des Baumes unter /path/to/tree ist. Dabei werden die Dateinamen auf Namen abgebildet, die den Restriktionen des ISO 9660-Dateisystems entsprechen. Dateien mit Namen, die im ISO 9660-Dateisystem nicht gültig sind, bleiben unberücksichtigt.

Es einige Optionen, um diese Beschränkungen zu überwinden. Die unter UNIX® Systemen üblichen Rock-Ridge-Erweiterungen werden durch -R aktiviert, -J aktiviert die von Microsoft Systemen benutzten Joliet-Erweiterungen und -hfs dient dazu, um das von Mac OS® benutzte HFS zu erstellen.

Für CDs, die nur auf FreeBSD-Systemen verwendet werden sollen, kann -U genutzt werden, um alle Beschränkungen für Dateinamen aufzuheben. Zusammen mit -R wird ein Abbild des Dateisystems, ausgehend von dem Startpunkt im FreeBSD-Dateibaum, erstellt, obwohl dies den ISO 9660 Standard verletzen kann.

Die letzte übliche Option ist -b. Sie wird benutzt, um den Ort eines Bootimages einer “El Torito” bootbaren CD anzugeben. Das Argument zu dieser Option ist der Pfad zu einem Bootimage ausgehend von der Wurzel des Baumes, der auf die CD geschrieben werden soll. In der Voreinstellung erzeugt mkisofs(8) ein ISO-Image im “Diskettenemulations”-Modus. Dabei muss das Image genau 1200, 1440 oder 2880 KB groß sein. Einige Bootloader, darunter der auf den FreeBSD-Disks verwendete, kennen keinen Emulationsmodus. Daher sollten Sie in diesen Fällen die Option -no-emul-boot verwenden. Wenn /tmp/myboot ein bootbares FreeBSD-System enthält, dessen Bootimage sich in /tmp/myboot/boot/cdboot befindet, können Sie ein Abbild eines ISO 9660-Dateisystems in /tmp/bootable.iso wie folgt erstellen:

# mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot

Wenn Sie md in Ihrem Kernel konfiguriert haben, können Sie danach das Dateisystem einhängen:

# mdconfig -a -t vnode -f /tmp/bootable.iso -u 0
# mount -t cd9660 /dev/md0 /mnt

Jetzt können Sie überprüfen, dass /mnt und /tmp/myboot identisch sind.

Sie können das Verhalten von mkisofs(8) mit einer Vielzahl von Optionen beeinflussen. Insbesondere können Sie das ISO 9660-Dateisystem modifizieren und Joliet- oder HFS-Dateisysteme brennen. Details dazu entnehmen Sie bitte der Hilfeseite mkisofs(8).

19.6.3. burncd

Wenn Sie einen ATAPI-CD-Brenner besitzen, können Sie burncd benutzen, um ein ISO-Image auf CD zu brennen. burncd ist Teil des Basissystems und unter /usr/sbin/burncd installiert. Da es nicht viele Optionen hat, ist es leicht zu benutzen:

# burncd -f cddevice data imagefile.iso fixate

Dieses Kommando brennt eine Kopie von imagefile.iso auf das Gerät cddevice. In der Grundeinstellung wird das Gerät /dev/acd0 benutzt. burncd(8) beschreibt, wie die Schreibgeschwindigkeit gesetzt wird, die CD ausgeworfen wird und Audiodaten geschrieben werden.

19.6.4. cdrecord

Wenn Sie keinen ATAPI-CD-Brenner besitzen, benutzen Sie cdrecord, um CDs zu brennen. cdrecord ist nicht Bestandteil des Basissystems. Sie müssen es entweder aus den Ports in sysutils/cdrtools oder dem passenden Paket installieren. Änderungen im Basissystem können Fehler im binären Programm verursachen und führen möglicherweise dazu, dass Sie einen “Untersetzer” brennen. Sie sollten daher den Port aktualisieren, wenn Sie Ihr System aktualisieren bzw. wenn Sie STABLE verfolgen, den Port aktualisieren, wenn es eine neue Version gibt.

Obwohl cdrecord viele Optionen besitzt, ist die grundlegende Anwendung einfacher als burncd. Ein ISO 9660-Image erstellen Sie mit:

# cdrecord dev=device imagefile.iso

Der Knackpunkt in der Benutzung von cdrecord besteht darin, das richtige Argument zu dev zu finden. Benutzen Sie dazu den Schalter -scanbus von cdrecord, der eine ähnliche Ausgabe wie die folgende produziert:

# cdrecord -scanbus
Cdrecord 1.9 (i386-unknown-freebsd7.0) Copyright (C) 1995-2004 Jörg Schilling
Using libscg version 'schily-0.1'
scsibus0:
        0,0,0     0) 'SEAGATE ' 'ST39236LW       ' '0004' Disk
        0,1,0     1) 'SEAGATE ' 'ST39173W        ' '5958' Disk
        0,2,0     2) *
        0,3,0     3) 'iomega  ' 'jaz 1GB         ' 'J.86' Removable Disk
        0,4,0     4) 'NEC     ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *
scsibus1:
        1,0,0   100) *
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) 'YAMAHA  ' 'CRW4260         ' '1.0q' Removable CD-ROM
        1,6,0   106) 'ARTEC   ' 'AM12S           ' '1.06' Scanner
        1,7,0   107) *

Für die aufgeführten Geräte in der Liste wird das passende Argument zu dev gegeben. Benutzen Sie die drei durch Kommas separierten Zahlen, die zu Ihrem CD-Brenner angegeben sind, als Argument für dev. Im Beispiel ist das CDRW-Gerät 1,5,0, so dass die passende Eingabe dev=1,5,0 wäre. Einfachere Wege das Argument anzugeben, sind in cdrecord(1) beschrieben. Dort sollten Sie auch nach Informationen über Audiospuren, das Einstellen der Geschwindigkeit und ähnlichem suchen.

19.6.5. Kopieren von Audio-CDs

Um eine Kopie einer Audio-CD zu erstellen, kopieren Sie die Stücke der CD in einzelne Dateien und brennen diese Dateien dann auf eine leere CD. Das genaue Verfahren hängt davon ab, ob Sie ATAPI- oder SCSI-Laufwerke verwenden.

SCSI-Laufwerke

  1. Kopieren Sie die Audiodaten mit cdda2wav:

    % cdda2wav -vall -D2,0 -B -Owav
    
  2. Die erzeugten .wav Dateien schreiben Sie mit cdrecord auf eine leere CD:

    % cdrecord -v dev=2,0 -dao -useinfo  *.wav
    

    Das Argument von dev gibt das verwendete Gerät an, das Sie, wie in Abschnitt 19.6.4 beschrieben, ermitteln können.

ATAPI-Laufwerke

Anmerkung: Über das Modul ATAPI/CAM kann cdda2wav auch mit ATAPI-Laufwerken verwendet werden. Diese Methode ist für die meisten Anwender besser geeignet als die im folgenden beschriebenen Methoden (Jitter-Korrektur, Big-/Little-Endian-Probleme und anderes mehr spielen hierbei eine Rolle).

  1. Der ATAPI-CD-Treiber stellt die einzelnen Stücke der CD über die Dateien /dev/acddtnn, zur Verfügung. d bezeichnet die Laufwerksnummer und nn ist die Nummer des Stücks. Die Nummer ist immer zweistellig, das heißt es wird, wenn nötig, eine führende Null ausgegeben. Die Datei /dev/acd0t01 ist also das erste Stück des ersten CD-Laufwerks. /dev/acd0t02 ist das zweite Stück und /dev/acd0t03 das dritte.

    Überprüfen Sie stets, ob die entsprechenden Dateien im Verzeichnis /dev auch angelegt werden. Sind die Einträge nicht vorhanden, weisen Sie Ihr System an, das Medium erneut zu testen:

    # dd if=/dev/acd0 of=/dev/null count=1
    

    Anmerkung: Unter FreeBSD 4.X werden diese Einträge nicht mit dem Wert Null vordefiniert. Falls die entsprechenden Einträge unter /dev nicht vorhanden sind, müssen Sie diese hier von MAKEDEV anlegen lassen:

    # cd /dev
    # sh MAKEDEV acd0t99
    
  2. Die einzelnen Stücke kopieren Sie mit dd(1). Sie müssen dazu eine spezielle Blockgröße angeben:

    # dd if=/dev/acd0t01 of=track1.cdr bs=2352
    # dd if=/dev/acd0t02 of=track2.cdr bs=2352
    ...
    
  3. Die kopierten Dateien können Sie dann mit burncd brennen. Auf der Kommandozeile müssen Sie angeben, dass Sie Audio-Daten brennen wollen und dass das Medium fixiert werden soll:

    # burncd -f /dev/acd0 audio track1.cdr track2.cdr ... fixate
    

19.6.6. Kopieren von Daten-CDs

Sie können eine Daten-CD in eine Datei kopieren, die einem Image entspricht, das mit mkisofs(8) erstellt wurde. Mit Hilfe dieses Images können Sie jede Daten-CD kopieren. Das folgende Beispiel verwendet acd0 für das CD-ROM-Gerät. Wenn Sie ein anderes Laufwerk benutzen, setzen Sie bitte den richtigen Namen ein.

# dd if=/dev/acd0 of=file.iso bs=2048

Danach haben Sie ein Image, das Sie wie oben beschrieben, auf eine CD brennen können.

19.6.7. Einhängen von Daten-CDs

Nachdem Sie eine Daten-CD gebrannt haben, wollen Sie wahrscheinlich auch die Daten auf der CD lesen. Dazu müssen Sie die CD in den Dateibaum einhängen. Die Voreinstellung für den Typ des Dateisystems von mount(8) ist UFS. Das System wird die Fehlermeldung “Incorrect super block” ausgeben, wenn Sie versuchen, die CD mit dem folgenden Kommando einzuhängen:

# mount /dev/cd0 /mnt

Auf der CD befindet sich ja kein UFS Dateisystem, so dass der Versuch, die CD einzuhängen fehlschlägt. Sie müssen mount(8) sagen, dass es ein Dateisystem vom Typ ISO9660 verwenden soll. Dies erreichen Sie durch die Angabe von -t cd9660 auf der Kommandozeile. Wenn Sie also die CD-ROM /dev/cd0 in /mnt einhängen wollen, führen Sie folgenden Befehl aus:

# mount -t cd9660 /dev/cd0c /mnt

Abhängig vom verwendeten CD-ROM kann der Gerätename von dem im Beispiel (/dev/cd0) abweichen. Die Angabe von -t cd9660 führt mount_cd9660(8) aus, so dass das Beispiel verkürzt werden kann:

# mount_cd9660 /dev/cd0 /mnt

Auf diese Weise können Sie Daten-CDs von jedem Hersteller verwenden. Es kann allerdings zu Problemen mit CDs kommen, die verschiedene ISO9660-Erweiterungen benutzen. So speichern Joliet-CDs alle Dateinamen unter Verwendung von zwei Byte langen Unicode-Zeichen. Zwar unterstützt der FreeBSD-Kernel derzeit noch kein Unicode, der CD9660-Treiber erlaubt es aber, zur Laufzeit eine Konvertierungstabelle zu laden. Tauchen bei Ihnen also statt bestimmter Zeichen nur Fragezeichen auf, so müssen Sie über die Option -C den benötigten Zeichensatz angeben. Weitere Informationen zu diesem Problem finden Sie in der Manualpage mount_cd9660(8).

Anmerkung: Damit der Kernel diese Zeichenkonvertierung (festgelegt durch die Option -C) erkennt, müssen Sie das Kernelmodul cd9660_iconv.ko laden. Dazu fügen Sie folgende Zeile in die Datei loader.conf ein:

cd9660_iconv_load="YES"

Danach müssen Sie allerdings Ihr System neu starten. Alternativ können Sie das Kernelmodul auch direkt über kldload(8) laden.

Manchmal werden Sie die Meldung “Device not configured” erhalten, wenn Sie versuchen, eine CD-ROM einzuhängen. Für gewöhnlich liegt das daran, dass das Laufwerk meint es sei keine CD eingelegt, oder dass das Laufwerk auf dem Bus nicht erkannt wird. Es kann einige Sekunden dauern, bevor das Laufwerk merkt, dass eine CD eingelegt wurde. Seien Sie also geduldig.

Manchmal wird ein SCSI-CD-ROM nicht erkannt, weil es keine Zeit hatte, auf das Zurücksetzen des Busses zu antworten. Wenn Sie ein SCSI-CD-ROM besitzen, sollten Sie die folgende Zeile in Ihre Kernelkonfiguration aufnehmen und einen neuen Kernel bauen:

options SCSI_DELAY=15000

Die Zeile bewirkt, dass nach dem Zurücksetzen des SCSI-Busses beim Booten 15 Sekunden gewartet wird, um dem CD-ROM-Laufwerk genügend Zeit zu geben, darauf zu antworten.

19.6.8. Brennen von rohen CDs

Sie können eine Datei auch direkt auf eine CD brennen, ohne vorher auf ihr ein ISO 9660-Dateisystem einzurichten. Einige Leute nutzen dies, um Datensicherungen durchzuführen. Diese Vorgehensweise hat den Vorteil, dass Sie schneller als das Brennen einer normalen CD ist.

# burncd -f /dev/acd1 -s 12 data archive.tar.gz fixate

Wenn Sie die Daten von einer solchen CD wieder zurückbekommen wollen, müssen Sie sie direkt von dem rohen Gerät lesen:

# tar xzvf /dev/acd1

Eine auf diese Weise gefertigte CD können Sie nicht in das Dateisystem einhängen. Sie können Sie auch nicht auf einem anderen Betriebssystem lesen. Wenn Sie die erstellten CDs in das Dateisystem einhängen oder mit anderen Betriebssystemen austauschen wollen, müssen Sie mkisofs(8) wie oben beschrieben benutzen.

19.6.9. Der ATAPI/CAM Treiber

Beigetragen von Marc Fonvieille.

Mit diesem Treiber kann auf ATAPI-Geräte (wie CD-ROM-, CD-RW- oder DVD-Laufwerke) mithilfe des SCSI-Subsystems zugegriffen werden. Damit können Sie SCSI-Werkzeuge, wie sysutils/cdrdao oder cdrecord(1), zusammen mit einem ATAPI-Gerät benutzen.

Wenn Sie den Treiber benutzen wollen, fügen Sie die folgende Zeile in /boot/loader.conf ein:

atapicam_load="YES"

Danach müssen Sie Ihr System neu starten, um den Treiber zu aktivieren.

Anmerkung: Alternativ können Sie die Unterstützung für atapicam(4) auch in Ihren Kernel kompilieren. Dazu fügen Sie die folgende Zeile in Ihre Kernelkonfigurationsdatei ein:

device atapicam

Die folgenden Zeilen werden ebenfalls benötigt, sollten aber schon Teil der Kernelkonfiguration sein:

device ata
device scbus
device cd
device pass

Übersetzen und installieren Sie den neuen Kernel. Der CD-Brenner sollte nun beim Neustart des Systems erkannt werden:

acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4
cd0 at ata1 bus 0 target 0 lun 0
cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device
cd0: 16.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed

Über den Gerätenamen /dev/cd0 können Sie nun auf das Laufwerk zugreifen. Wenn Sie beispielsweise eine CD-ROM in /mnt einhängen wollen, benutzen Sie das nachstehende Kommando:

# mount -t cd9660 /dev/cd0 /mnt

Die SCSI-Adresse des Brenners können Sie als root wie folgt ermitteln:

# camcontrol devlist
<MATSHITA CDRW/DVD UJDA740 1.00>   at scbus1 target 0 lun 0 (pass0,cd0)

Die SCSI-Adresse 1,0,0 können Sie mit den SCSI-Werkzeugen, zum Beispiel cdrecord(1), verwenden.

Weitere Informationen über das ATAPI/CAM- und das SCSI-System erhalten Sie in den Hilfeseiten atapicam(4) und cam(4).

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <[email protected]>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <[email protected]>.