to-st.de
Home  |  Impressum  |  Datenschutz  |  Kolophon  |  Kontakt
Eyecatcher Image: /img/eyecatcher/wr/teaser_780x175_wr_schloss.jpg
SI4735 PC-Radio USB V2 Linux Software Linux & Computer Blog / Vermischtes  
Lexmark X215 MFP unter Linux Scannen mit Linux (h) CD-Brennen mit Linux (h) EPSON E0855-2 LCD Display unter Linux  
Artikel auf Deutscharticle not available in English

CD's brennen: CD-Brenner und Linux

Infoquellen

Über das Thema Brandmeister Pinguin sind im Jahr 2000 in einer Miniserie zwei Artikel im Computer-Magazin c't erschienen [Heft 3/2000, S.224ff und Heft 8/2000, S. 194ff ]. Im ersten Artikel wird die nötige Kernelkonfiguration, das System der benötigten Module, und das Erzeugen von Images mit mkisofs/mkhybrid besprochen. Der zweite Teil behandelt die erhältliche Software: cdrecord, cdrdao, xcdroast, gcombust.

Eine aktuelle Liste unterstützter Brenner kann unter der Adresse http://www.guug.de:8080/cgi-bin/winni/lsc.pl begutachtet werden.

Weitere Möglichkeiten zur Information bieten:

Wir wollen das Thema auch in zwei (mal zwei) Teilen besprechen:
  1. Hardware einrichten: EIDE- und SCSI-Brenner
  2. Software benutzen: xcdroast und Programme in der shell

Hardware einrichten (Fall 1): EIDE-Brenner

EIDE-Brenner machen den Löwenanteil der Gerätelandschaft vor allem im Home-Bereich aus - sie sind preisgünstig und erfordern keine extra Controller-Karte, da der EIDE-Controller auf dem Mainboard mit zwei Kanälen verteten ist. Treiber für Windows und Mac liegen immer bei, nur Linux fehlt. Doch das muss nicht traurig machen. Es gibt eben auch Programmierer, die für lau und Linux Treiber schreiben - in diesem Falle das ide-scsi Modul, das eine SCSI-Emulation für IDE-Laufwerke in das Betriebssystem einbaut. Schlussendlich sieht der Kernel einen EIDE-Brenner als SCSI-Gerät an. Damit können Brennprogramme wie cdrecord (für das diverse grafische Oberflächen wie das legendäre xcdroast, das KDE-Programm KreateCD oder gcombust für gtk/gnome existieren) und cdrdao gut umgehen.

Um einen EIDE-Brenner nutzen zu können, müssen wir also zuerst einmal einen neuen Kernel kompilieren:

Dabei ist der "normale" IDE/ATAPI CDROM Support zu deaktivieren:

Include IDE/ATAPI CDROM support (CONFIG_BLK_DEV_IDECD) [Y/m/n/?] n

und stattdessen die SCSI Emulation für zu wählen:

SCSI emulation support (CONFIG_BLK_DEV_IDESCSI) [N/y/m/?] y

Weiterhin müssen natürlich die gängigen Module, die zum Thema SCSI im Teil 2 der Hardwareeinrichtung genannt sind, kompiliert werden.

Sofern alles geklappt hat, sollte der CD-Brenner bei den IDE-Geräten wie folgt auftauchen (dabei wird er noch als CDROM erkannt):

ide: i82371 PIIX (Triton) on PCI bus 0 function 57
ide0: BM-DMA at 0xf000-0xf007
ide1: BM-DMA at 0xf008-0xf00f
hda: Seagate Technology 1275MB - ST31276A, 1221MB w/0kB Cache, CHS=6

hdb: JVC CD-R XR-W2082, ATAPI CDROM drive - enabling SCSI emulation
ATAPI overlap supported: No

hdc: WDC AC420400D, 19470MB w/1966kB Cache, CHS=39560/16/63, DMA
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15

Außerdem taucht er dann noch einmal unter der Rubrik SCSI auf:

scsi0 : SCSI host adapter emulation for IDE ATAPI devices kernel: scsi : 1 host. Vendor: JVC Model: XR-W2082 Rev: 1.06 Type: CD-ROM ANSI SCSI revision: 03 scsi : detected total.

Mit dem Programm cdrecord können wir den SCSI-Bus nach vorhandenen Geräten absuchen, sogar in der SCSI-Emulation, wobei manche IDE-CD-Brenner immer noch als einfache CDROM erkannt werden ;)

cdrecord -scanbus
Cdrecord release 1.8a14 Copyright (C) 1995-1998 Jörg Schilling scsibus0: 0) 'JVC ' 'XR-W2082 ' '1.06' Removable CD-ROM 1) * 2) * 3) * 4) * 5) * 6) * 7) *

Wenn der CD-Brenner ähnlich wie im Beispiel in der Liste auftaucht, dann sollte alles funktionieren. Die Handhabung unterscheidet sich dabei nicht von der eines "echten" SCSI-Brenners.

Was die Geschwindigkeit angeht, so ist man meist mit zweifacher Geschwindigkeit auf der sicheren Seite, ohne einen Rohling zu riskieren.

Hardware einrichten (Fall 2): SCSI-Brenner

Für CD-Brenner mit SCSI-Anschluss gilt: gibt es einen Treiber (Modul) für den SCSI-Controller im System, läuft auch der Brenner (hüstel).

Wenn bei der Linux-Installation schon ein SCSI-CDROM-Laufwerk mit eingerichtet wurde, ist wahrscheinlich im installierten Standard-Kernel alles Nötige vorhanden, damit auch der SCSI-Brenner läuft. Ansonsten müsste man die benötigten Module mal mit

modprobe [Modulname Optionen]

von Hand testen, und eventuell einen neuen Kernel kompilieren.

Folgende Kerneloptionen/Module sind notwendig (Kernel 2.2):

SCSI support scsi_modModul
SCSI CD-ROM support sr_modModul
SCSI generic support sgModul
SCSI controller low level driver aha1512 (z.B.)Modul
ISO9660 Dateisystem support isofsModul
MS Joliet Dateisystem support fest einkompiliert

Die Bootmeldung des erkannten Brenners kann man sich mit dmesg|more ansehen:

scsi0 : Tekram DC390/AM53C974 V2.0d23 1999/08/26 scsi : 1 hosts. Vendor: YAMAHA Model: CDR-400t Rev: 1.0009 Type: CD-WRITER ANSI SCSI revision: 02 Brennerprogramme benutzen die Zuweisung der Geräte nach der Formel dev=Bus,ID,LUN. Dabei ist Bus die Nummer des SCSI-Controllers, beginnend mit 0. ID bezeichnet die SCSI-ID des Brenners, LUN ist immer gleich 0. Ein Brenner am 1.SCSI-Controller mit der SCSI-ID 3 wird also mit dev=0,3,0 bezeichnet.

Alle Optionen mit xcdroast

Das bekannteste und wohl meist gebrauchte Brennprogramm für Linux ist xcdroast von Thomas Niederreiter. Es ist sehr übersichtlich gegliedert und man kann schnell solche Sachen machen wie z.B. CD kopieren, Audio-CD aus verschiedenen WAV zusammenstellen und eine Backup-CD aus verschiedenen Dateien/Verzeichnissen zusammenklicken. Die Geräte (CD-ROM, Brenner) werden automatisch erkannt (technisch gesehen benutzt xcdroast den Befehl cdrecord -scanbus ).

xcdroast1.png

Die Programm-Versionen bis 0.96 benutzen Tcl/Tk zur Darstellung der grafischen Oberfläche. Ab Version 0.98 kommt GTK+ zum Einsatz, zur Zeit gibt es hiervon schon stabile beta-Versionen. Die Bedienung von xcdroast ist fast selbsterklärend, ansonsten hilft ein Blick in die mitgelieferte Doku.
Das Programm läuft default mit root-Rechten. Will man als Normal-Benutzer brennen, sollte man sich eine Gruppe brenner anlegen, die entsprechenden User dort eintragen und die Rechte und Ausführungsbedingungen richtig setzen. Gruppen/Benutzer-Eintragungen kann man z.B. bei RedHat mit linuxconf und bei SuSE mit yast machen, oder auch per Hand.

  
groupadd -g 200 -o brenner ;
usermod -G brenner ;
chgrp brenner /usr/bin/xcdroast ;
chmod o-x /usr/bin/xcdroast ;
chmod +s /usr/bin/xcdroast

Den temporär benötigten Speicherplatz (für das CD-Image) legt man unter Setup/HD Setup an. Man sollte explizit ein Verzeichnis auf einer gemounteten Platte angeben, sonst könnte jeder Benutzer Partitionen löschen.

Brennerprogramme in der shell

Kommandozeilen-Programme lassen sich gut in Shell-Scripte einbauen, so dass man bestimmte Aufgaben wie CD-Kopieren oder ein Backup durch Eingabe eines einzigen Wortes bzw. automatisch mittels at oder cron durchführen kann. Die inkrementelle Sicherung der Konfiguration in /etc oder der benutzerdefinierten Einstellungen und Daten im /home-Zweig sind als Beispiele zu nennen.

Auf diese Wiese lassen sich die Fähigkeiten von cdrecord, cdrdao und der bash richtig ausreizen. Es ist so auch ohne X-Windows möglich, einen alten 486 DX-2/66 mit 16MB RAM, IDE/VLB-SCSI-Controller, 700MB Festplatte und Brenner, in eine Kopiermaschine zu verwandeln. Voraussetzung für das Kopieren von Audio-CD's, oder die Umwandlung z.B. in wav- oder mp3-Dateien, ist das Extrahieren der Audio-Daten. Der Fachbegriff nennt sich Digital Audio Extracting (DAE). Alte CD-ROM Laufwerke können das nicht unbedingt (z.B. mein altes SCSI-CD-ROM Sanyo CRD-254SH), alle neuen CD-ROM Laufwerke und Brenner (egal ob EIDE oder SCSI) sind dazu aber in der Lage.

Informationen über einen Rohling im Brenner mit SCSI-ID 4 erhält man mit:

cdrecord -atip dev=0,4,0
Cdrecord release 1.8a30 Copyright (C) 1995-1999 Jörg Schilling
scsidev: '0,4,0'
scsibus: 0 target: 4 lun: 0
Using libscg version 'schily-0.1'
Device type    : Removable CD-ROM
Version        : 2
Response Format: 2
Capabilities   :
Vendor_info    : 'YAMAHA  '
Identifikation : 'CDR400t         '
Revision       : '1.0q'
Device seems to be: Yamaha CDR-400.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags   : SWABAUDIO
ATIP info from disk:
  Indicated writing power: 4
  Is not unrestricted
  Is not erasable
  ATIP start of lead in:  -11580 (97:27/45)
  ATIP start of lead out: 333226 (74:05/01)
Disktype: Short strategy type (Phthalocyanine or similar)
Manuf. index: 9
Manufacturer: Kodak Japan Limited

Das Kommando zeigt zuerst die Einstellungen des Benners an, inklusive maximaler Brenngeschwindigkeit ("writing power: 4").
Dann folgen die Hersteller-Informationen auf dem Rohling, wie maximal bespielbare Länge, Typ usw.
Es ist sehr interessant, welche bekannten Firmen für unbekannte Labels und umgekehrt pressen lassen ;-).

Inhaltsverzeichnis (TOC) und Länge einer Audio- oder Daten-CD lassen sich bestimmen mit:

cdrecord -toc dev=0,3,0
Cdrecord release 1.8a30 Copyright
(C) 1995-1999 Jörg Schilling scsidev: '0,3,0'
scsibus: 0 target: 3 lun: 0
Using libscg version 'schily-0.1'
Device type    : Removable CD-ROM
Version        : 2
Response Format: 2
Capabilities   : SYNC LINKED
Vendor_info    : 'SONY    '
Identifikation : 'CD-ROM CDU-76S  '
Revision       : '1.1a'
Device seems to be: Generic CD-ROM.
Using generic SCSI-2 CD driver (scsi2_cd).
Driver flags   :
first: 1 last 13
track:   1 lba:        32 (      128) 00:02:32 adr: 1 control: 0 mode: -1
track:   2 lba:     26552 (   106208) 05:56:02 adr: 1 control: 0 mode: -1
track:   3 lba:     52640 (   210560) 11:43:65 adr: 1 control: 0 mode: -1
track:   4 lba:     74027 (   296108) 16:29:02 adr: 1 control: 0 mode: -1
track:   5 lba:     95217 (   380868) 21:11:42 adr: 1 control: 0 mode: -1
track:   6 lba:    117572 (   470288) 26:09:47 adr: 1 control: 0 mode: -1
track:   7 lba:    144182 (   576728) 32:04:32 adr: 1 control: 0 mode: -1
track:   8 lba:    163885 (   655540) 36:27:10 adr: 1 control: 0 mode: -1
track:   9 lba:    188545 (   754180) 41:55:70 adr: 1 control: 0 mode: -1
track:  10 lba:    209257 (   837028) 46:32:07 adr: 1 control: 0 mode: -1
track:  11 lba:    231212 (   924848) 51:24:62 adr: 1 control: 0 mode: -1
track:  12 lba:    253032 (  1012128) 56:15:57 adr: 1 control: 0 mode: -1
track:  13 lba:    281437 (  1125748) 62:34:37 adr: 1 control: 0 mode: -1
track:lout lba:    337525 (  1350100) 75:02:25 adr: 1 control: 0 mode: -1

Um eine Audio-CD im CD-ROM-Laufwerk (SCSI-ID 3) auf den Rohling im Brenner (SCSI-ID 5) mit zweifacher Geschwindigkeit zu kopieren, reicht folgendes:

   nice --18 cdrdao copy --source-device 0,3,0 --device 0,5,0 --speed 2

Der nice-Wert von -18 sagt dem System, das dieser Prozess absolutem Vorrang hat. Damit wird gesichert, dass kein zu öffnendes netscape oder gimp den Brennvorgang unterbricht, weil der Puffer zwischenzeitlich leerläft und dem Laser kurzzeitig die Daten fehlen. Zu achten wäre noch darauf, dass der Befehl in einem Verzeichnis abgesetzt wird, in dem genug Platz für die zwischenzeiliche Speicherung des CD-Inhalts - also ca. 650-690 MB - vorhanden ist.

Man kann auch ohne Plattenplatz, also on-the-fly, kopieren:

   nice --18 cdrdao copy --on-the-fly --source-device 0,3,0 --device 0,5,0

Den Disc-At-Once Modus kann man immer dann gebrauchen, wenn Audio- oder Daten-CD's einfach nur zu kopieren sind.

Möchte man Daten sichern, ist das Gespann mkisofs/cdrecord die beste Wahl. Mit cdrecord kann man im Track-At-Once Modus (TAO) u.a. auch CD-RW's beschreiben. Zuerst wird immer ein Image der Daten erstellt, z.B. um den /home Zweig - also alle Benutzer-Daten - (ohne Komprimierung) zu sichern:

   mkisofs -o isoimage.raw -R -J /home

Der Befehl erstellt das Image isoimage.raw im aktuellen Verzeichnis, mit allen Dateienn aus /home, mit Joliet (-J) und Rockridge (-R) Format. Weitere Optionen zeigt man mkisofs !

Man kann das Image überprüfen mit:

   mount isoimage.raw -r -t iso9660 -o loop /mnt
   ls -al /mnt

Hier zeigt ls den Inhalt des erzeugten ISO9660 Dateisystems in der Datei isoimage.raw . Im übrigen taucht das Dateisystem auch bei einem df auf. Danach umount /mnt nicht vergessen, denn es ist keine gute Idee, ein gemountetes Dateisystem mit cdrecord auszulesen !

Danach kommt das Brennen des Images auf den Rohling. Dabei wird der Fortschritt in der Shell angezeigt ("-v"), die Geschwindigkeit ist 2-fach ("speed=2"), der Brenner hat die ID 5 ("dev=0,5,0"), und die fertige CD soll nach dem Brennen ausgespuckt werden ("-eject").

cdrecord -v speed=2 dev=0,5,0 -eject isoimage.raw
Cdrecord release 1.8a30 Copyright (C) 1995-1999 Jörg Schilling
TOC Type: 3 = CD-ROM XA mode 2
scsidev: '0,5,0'
scsibus: 0 target: 5 lun: 0
Using libscg version 'schily-0.1'
atapi: 0
Device type    : Removable CD-ROM
Version        : 2
Response Format: 2
Capabilities   :
Vendor_info    : 'YAMAHA  '
Identifikation : 'CDR400t         '
Revision       : '1.0q'
Device seems to be: Yamaha CDR-400.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags   : SWABAUDIO
Drive buf size : 1176000 = 1148 KB
FIFO size      : 4194304 = 4096 KB
Track 01: data   20 MB
Total size:      23 MB (02:19.25) = 10444 sectors
Lout start:      23 MB (02:21/19) = 10444 sectors
Current Secsize: 2048
ATIP info from disk:
  Indicated writing power: 4
  Is not unrestricted
  Is not erasable
  ATIP start of lead in:  -11580 (97:27/45)
  ATIP start of lead out: 333226 (74:05/01)
Disk type: Short strategy type (Phthalocyanine or similar)
Manuf. index: 9
Manufacturer: Kodak Japan Limited
...
Last chance to quit, starting real write in 1 seconds.
Waiting for reader process to fill input-buffer ... input-buffer ready.
Starting new track at sector: 0
Track 02:  20 of  20 MB written (fifo 100%).
Track 02: Total bytes read/written: 21385216/21385216 (10442 sectors).
Writing  time:   90.939s
Fixating...
Fixating time:   47.316s
cdrecord: fifo had 653 puts and 653 gets.
cdrecord: fifo was 0 times empty and 512 times full, min fill was 98%.

Bei Multisession-CD's, auf die man den nächsten Rutsch aufbrennen möchte, muss die vorhergehende Session mit Start-und Endsektor ermittelt werden:

cdrecord -msinfo dev=0,5,0
0,24906

Bei einem leeren Rohling ist natürlich keine Session drauf, cdrecord bringt dann eine Fehlermeldung: "cdrecord: Input/output error. read toc: scsi sendcmd: retryable error ..."
Mit mkisofs wird die vorhergehende Session erst importiert und der zu sichernden Dateisystem-Zweig (hier: /home) angehängt:

   
   mkisofs -o isoimage_2.raw -R -J -C 0,24906 -M /dev/cdrom /home ;
   cdrecord -v speed=4 dev=0,5,0 -eject -multi isoimage_2.raw

Man sieht hier auch, dass die Notation der Devices (/dev/cdrom!) bei mkisofs anders ist als bei cdrecord. Die Option "-C 0,2906" sorgt für den richtigen Startpunkt, "-M" heisst Multisession, ebenso wie "multi" bei cdrecord. Auf den ersten Blick wirkt das Ganze etwas kompliziert. In selbstgeschriebenen Shell-Scripten, welche z.B. mittels grep cdrecord-Ausgaben auswerten und die Optionen automatisch richtig einsetzen, ist damit ein Backup auf RW-Medien elegant zu lösen. Wenn das zu schwierig oder die Datenmenge zu gross ist, löscht man vorher eine CD-RW mit:

   cdrecord -force blank=all dev=0,5,0

Das Vertauschen der SCSI-ID's wäre bei diesem Befehl tödlich - "-force" heisst "Fehler ignorieren" und löscht eventuell bei "dev=0,1,0" das ganze System auf der 1.Festplatte ?


Andreas Kraska, Tobias Stöber


CSS ist valide! CSS ist valide!