./linux/cdwriting.txt
download original
ISO-FS (CDROM-Dateisystem) erzeugen:
mkisofs -o outputfile.iso -R path ...
Schreibt Pfade path ... nach outputfile.iso. outputfile.iso kann
anschließend z.B. loopback-gemounted werden
(Dateisystemspez. "iso9660").
Weglassen von "-o outputfile.iso" => File geht nach stdout
"-R" bewirkt, dass dem ISO-FS Metadaten nach dem Rock-Ridge-Standard
hinuzgefuegt werden. Dies ermöglicht:
- lange Dateinamen (ISO9660 unterstützt nur 8.3)
- uid,gid,Rechtebits
- Symlinks
Mit "-R" werden uid,gid, Rechtebits 1:1 von den Quellfiles
übernommen. Mit "-r" statt "-R" werden die Dateien word-readable und
mit uid, gid = 0,0 gespeichert (und noch einige andere Kleinigkeiten,
siehe man mkisofs)
Directories werden ins Root-Verz. des ISO-FS geschrieben, z.B.:
mkisofs -o outputfile.iso -R /home/olaf/test/
=> /home/olaf/test/ wird zum Root-Verz. des ISO-FS
deshalb VARIATION:
mkisofs -o outputfile.iso -R -graft-points test/=/home/olaf/test/ ...
=> Verz. /home/olaf/test/ wird nach /test ins ISO-FS kopiert
zus. interessante Optionen (nicht getestet, siehe "man mkisofs"):
-A <id> -- CD-Titel <id>
-b <eltorito_boot_image>
Image Bootfähig machen,
<eltorito_boot_image> bezeichnet ein 1.2- 1.44- oder
2.88-MB-Floppyimage (z.B. eine lilo-Bootfloppy)
-C last_sess_start,next_sess_start
Fuer Multi-Session-CDs (siehe Manpage)
===========
cdrecord
Schreiben eines ISO-Images auf eine CDRW
cdrecord -v -speed=6 dev=0,1,0 -data image.iso
Oder (Multi-Session, s.u.)
cdrecord -v -speed=6 -multi dev=0,1,0 -data image.iso
0,1,0 ist die SCSI-ID des Brenners (s. /proc/scsi), -v = verbose,
-speed=6 stellte 6fach-Brenngeschwindigkeit ein, -data (im Ggs. zu
"-audio") sagt, dass ein Datentrack geschrieben werden soll, image.iso
ist das zu schreibende Image.
Die SCSI-ID kann alternativ auch in der Umgebungsvariable $CDR_DEVICE
stehen.
Ein *nix-artiger Gerätetreiberstandard für CD-Brenner scheint nicht zu
existieren; man muss dauernd direkt im Userspace mit diesen komischen
SCSI-IDs herumhantieren. Und Brennprogramme (z.B. cdrecord) müssen mit
UID 0 laufen. cdrecord baut folgerichtig alle Securitychecks, die
normalerweise der Kernel macht, im Userspace nach (Test, ob die
Real-UID des cdrecord-Prozesses die Erlaubnis hat, die iso-Files zu
lesen).
Generell: Eine CD enthält einen oder mehrere "Tracks". Dies können
Daten- oder Audio-Tracks sein. Bei handelsüblichen Audio-CDs ist jeder
Titel ein Audio-Track. Anzeigen des "Inhaltsverzeichnisses"
(Auflistung der Tracks) einer CD:
cdrecord -toc dev=0,1,0
ungetestet: Schreiben von Audio-Tracks
cdrecord speed=<number> dev=0,1,0 -audio file1.wav file2.wav ...
(cdrecord erkennt die WAV-Files als solche (16bit/44.1kHz/stereo
erforderlich) und extrahiert die reinen Audiodaten. Rohe
Audio-Datenfiles ohne Header können auch übergeben werden,
s. Manpage. Jede Datei wird zu einem Audio-Track)
ungetestet: Pipen von mkisofs nach cdrecord (keine Erzeugung einer
isofs-Datei):
mkisofs -R /master/tree | cdrecord -v fs=6m speed=2 dev=0,1,0 -data -
fs=6m setzt die FIFO-Schreibqueue von 4 auf 6MB hoch, um
Timing-Probleme zu verhindern. Bei viel Load oder langsamer Maschine
sollte man den Weg über ein explizites iso-File wählen.
Blanken (Loeschen aller Tracks) einer CD-RW:
cdrecord blank=fast speed=4 dev=0,1,0
Multi-Session-CDs brennen:
Option "-multi" fuer cdrecord brennt die Tracks so, dass später
weitere Tracks angehängt werden können.
Eigentlich sollte man wohl immmer "-multi" verwenden, da damit keine
Nachteile verbunden zu sein scheinen (die CDs sind trotzdem noch für
CDROM/DVD-Laufwerke lesbar). TODO: Audio-CDs und Standalone-CD-Player
testen.
Z.B.:
cdrecord -v -multi speed=6 dev=0,1,0 -data track1.iso
Datentracks (ISO-Filesysteme), die in der 2ten,dritten,... Session
gebrannt werden, müssen mit der mkisofs-Option "-C <n1,n2>" erstellt
werden. <n1,n2> wird durch Aufruf von
cdrecord -msinfo dev=0,1,0
gewonnen. Es werden zwei Zahlen (irgendwelche Sektornummern, siehe
Manpage) ausgegeben, die mkisofs in das erzeugte Filesystems mit
einpflegt. mkisofs benötigt zusätzlich das in der vorherigen Session
geschriebene ISO-FS, um das neue FS damit zusammenzuführen ("mergen")
zu können. Z.B.:
mkisofs -o track2.iso -R -C `cdrecord -msinfo dev=0,1,0` -M track1.iso -graft-points cvsroot/=/home/olaf/cvsroot test/=/home/olaf/test
cdrecord -v -multi speed=6 dev=0,1,0 -data track2.iso
Die Filesysteme track1.iso und track2.iso stehen jetzt "gemerged" auf
der CD.
Man kann bei -M auch direkt das Brennerdevice angeben (es wird dann
der zuletzt geschriebene Track ausgelesen):
mkisofs -o track3.iso -R -C `cdrecord -msinfo dev=0,1,0` -M 0,1,0 -graft-points wstk/=/home/olaf/wstk-2.4
cdrecord -v -multi speed=6 dev=0,1,0 -data track3.iso
Die Filesysteme track1.iso, track2.iso und track3.iso stehen jetzt
"gemerged" auf der CD.
Nützliche Option (ungetestet): -dummy
Doku: The CD-Recorder will go through all steps of the recording
process, but the laser is turned off during this procedure
D.h. alle Probleme (incl. Timing, zu hohe Schreibgeschw., etc.)
sollten auch hier auftreten, aber der Rohling wird nicht angerührt.
===========
Tools:
isoinfo -- Anschauen von ISO-Images/-Devices
z.B.:
isoinfo -J -l -i /dev/cdrw
Inhalt von in /dev/cdrw eingelegter Joilet-CD listen
isoinfo -R -l -i file.iso
Inhalt von in file.iso befindlichem RockRidge-ISO-FS listen
===========
TODO: cdrdao
cdrdao disk-info --driver generic-mmc --device 0,1,0
^^^^^^^^^^^^^^ --device bus,id,lun -- s. /proc/scsi
CD kopieren (1:1, alle Tracks) von /dev/dvd.sg nach /dev/cdrw.sg
(SCSI-Notation "x,x,x" von oben ist alternativ auch angebbar):
cdrdao copy --source-device /dev/dvd.sg --device /dev/cdrw.sg --driver generic-mmc-raw --source-driver generic-mmc-raw --speed 6
(erzeugt zunächst Imagedatei im aktuellen Verzeichnis, brennt dieses
dann auf die Ziel-CD. Option "--on-the-fly" piped direkt, ohne
Imagedatei)
back to linux
(C) 1998-2017 Olaf Klischat <olaf.klischat@gmail.com>