19.5. Erstellen und Verwenden von CDs

Beigesteuert von Mike Meyer.

19.5.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 können auch leichter 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 beispielsweise 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. Um die ursprünglichen Dateisystemgrenzen zu überwinden 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 Werkzeug zum Brennen von CDs benutzt wird, hängt davon ab, ob der 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.

Für 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.5.2. mkisofs

Der Port sysutils/cdrtools installiert auch mkisofs(8), welches ein ISO 9660-Abbild erstellt, das ein Abbild eines Verzeichnisbaumes ist. Die einfachste Anwendung ist:

# mkisofs -o
imagefile.iso /path/to/tree

Dieses Kommando erstellt imagefile.iso, 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, identisch zu angegebenen 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 -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 erstellen:

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

Wenn md im Kernel konfiguriert ist, kann das Dateisystem als speicherbasiertes Laufwerk eingehängt werden:

# 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. Details dazu entnehmen Sie bitte mkisofs(8).

19.5.3. burncd

Für ATAPI-CD-Brenner kann burncd benutzt werden, 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.5.4. cdrecord

Für Systeme ohne ATAPI-CD-Brenner kann cdrecord benutzt werden, um CDs zu brennen. cdrecord ist nicht Bestandteil des Basissystems und muss entweder als Paket sysutils/cdrtools oder Port installiert werden. Änderungen im Basissystem können Fehler im binären Programm verursachen und führen möglicherweise dazu, dass Sie einen Untersetzer brennen. Es wird daher empfohlen den Port aktualisieren, wenn das System aktualisiert wird, oder für Benutzer die STABLE verfolgen, den Port zu aktualisieren, wenn es eine neue Version gibt.

Obwohl cdrecord viele Optionen besitzt, ist die grundlegende Anwendung einfach. Ein ISO 9660-Image wird wie folgt erstellt:

# cdrecord dev=device imagefile.iso

Der Knackpunkt in der Benutzung von cdrecord besteht darin, das richtige Argument zu dev zu finden. Benutzen Sie -scanbus, 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 zum 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 ist. Einfachere Wege das Argument anzugeben, sowie Informationen über Audiospuren und das Einstellen der Geschwindigkeit, sind in cdrecord(1) beschrieben.

19.5.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.

Prozedur 19.1. 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 wie in Abschnitt 19.5.4, „cdrecord ermittelt werden kann.

Prozedur 19.2. 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 werden mit dd(1) kopiert. Achten Sie darauf, eine Blockgröße anzugeben:

    # 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. Geben Sie an, dass es sich um Audio-Daten handelt und dass burncd das Medium am Ende fixieren soll:

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

19.5.6. Kopieren von Daten-CDs

Es ist möglich eine Daten-CD in eine Datei zu 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. Wird ein anderes Laufwerk benutzt, muss der Name entsprechend ersetzt werden.

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

Danach existiert ein Image, das wie oben beschrieben, auf CD gebrannt werden kann.

19.5.7. Einhängen von Daten-CDs

Es ist möglich, eine Daten-CD zu mounten und die Daten zu lesen. Standardmäßig erwartet mount(8) ein Dateisystem vom Typ ufs. Wenn Sie das folgende Kommando ausführen:

# mount /dev/cd0 /mnt

erhalten Sie die Fehlermeldung Incorrect super block, und die CD konnte nicht eingehängt werden. Die CD benutzt nicht das UFS-Dateisystem, deshalb schlägt der Versuch fehl, sie als solches einzuhängen. Sie müssen mount(8) durch die Angabe von -t cd9660 sagen, dass es sich um ein Dateisystem vom Typ ISO9660 handelt. Wenn Sie also die CD-ROM /dev/cd0 in /mnt einhängen wollen, führen Sie folgenden Befehl aus:

# mount -t cd9660 /dev/cd0 /mnt

Ersetzen Sie /dev/cd0 durch den Gerätenamen des CD-Gerätes. Die Angabe von -t cd9660 führt mount_cd9660(8) aus, was äquivalent zu folgendem Befehl ist:

# 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 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 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.5.8. Brennen von rohen CDs

Es ist möglich eine Datei auch direkt auf eine CD zu 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

Um die Daten einer solchen CD abzurufen, müssen die Daten direkt von dem rohen Gerät gelesen werden:

# tar xzvf /dev/acd1

Eine auf diese Weise gefertigte CD kann nicht in das Dateisystem eingehangen werden. Sie kann auch nicht auf einem anderen Betriebssystem gelesen werden. 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.5.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.

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

atapicam_load="YES"

Um den Treiber zu aktivieren, muss das System neu gestartet werden.

Anmerkung:

Benutzer, die es vorziehen atapicam(4)-Unterstützung statisch in den Kernel zu komplillieren, sollten diese Zeile in die Kernelkonfigurationsdatei hinzufügen:

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. Starten Sie anschließend das System neu.

Während des Bootvorgangs sollte der CD-Brenner ungefähr so angezeigt 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 kann nun auf das Laufwerk zugegriffen werden. Um beispielsweise eine CD-ROM in /mnt einzuhängen, geben Sie folgendes ein:

# 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 finden Sie in atapicam(4) und cam(4).

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.

Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.