Verder Terug Inhoud

3. Het branden van CD-R's

"If to smoke you turn I shall not cease to fiddle while you burn." (Romeins keizer Nero over het branden van zijn eigen klassieke CD's, AD64. Hij vatte het totaal verkeerd op en brandde Rome af.)

Onder Linux bestaat het beschrijven van CD-ROM's uit twee stappen:

Dit hoofdstuk beschrijft de stappen voor data- en audio-CD's in meer detail.

3.1 Beschrijven van CD-ROM's (zuivere data)

Merk op dat het verzamelen van de gegevens om op te CD te zetten meestal langer duurt dan je zou verwachten. Neem in overweging dat ontbrekende bestanden niet kunnen worden toegevoegd zodra de CD éénmaal is beschreven en de gegevens zijn vastgelegd. Denk er ook aan dat een bepaalde hoeveelheid van de vrije ruimte op een CD wordt gebruikt om de informatie voor het ISO-9660-bestandssysteem op te slaan (gewoonlijk een paar MB). 620 MB data zal altijd wel passen op een 650 MB CD-R.

Aanmaken van een image van de latere CD-ROM

Voor enig opslagmedium (b.v. floppy disk, harddisk of CD) kan worden gebruikt, moet er een bestandssysteem (DOS: worden geformatteerd) op worden gezet. Het bestandssysteem is verantwoordelijk voor het organiseren en indelen van de bestanden die op het medium moeten worden opgeslagen.

De gebruikelijke utilities voor het aanmaken van bestandssystemen op harddisk-partities schrijven er een leeg bestandssysteem op, die dan vervolgens wordt gemount en door de gebruiker met de benodigde bestanden wordt gevuld. Een beschrijfbare CD is slechts éénmaal beschrijfbaar, dus als we er een leeg bestandssysteem op zouden zetten, zou het zijn geformatteerd en voor eeuwig volledig leeg blijven. Dit geldt ook voor de opnieuw beschrijfbare media, aangezien je geen willekeurige sectoren kan wijzigen; je moet de gehele inhoud wissen.

Dus wat we nodig hebben is een tool dat het bestandssysteem aanmaakt, terwijl de bestanden naar de CD gekopieerd worden. Deze tool wordt mkisofs genoemd. Een voorbeeld van hoe het wordt gebruikt, ziet er als volgt uit:

mkisofs  -r   -o cd_image   prive_collectie/
              `---------'   `-----------------'
                   |               |
       schrijf uitvoer naar  neem directory als invoer

De optie '-r' stelt de permissies van alle bestanden zodanig in dat ze op de CD publiek leesbaar zijn en activeert de Rock Ridge extensies. Je wilt waarschijnlijk deze optie gebruiken, tenzij je weet wat je aan het doen bent. (hint: zonder '-r' krijgen de mount-points de permissies van prive_collectie!).

mkisofs zal proberen om alle bestandsnamen in het 8.3-formaat in te delen dat door DOS wordt gebruikt om je te verzekeren van de hoogst mogelijke compatibiliteit. In geval van naamconflicten (verschillende bestanden hebben dezelfde 8.3-naam), worden er nummers in de bestandsnamen gebruikt en informatie over de gekozen bestandsnaam wordt via STDERR afgedrukt (dit is meestal het scherm). Geen paniek: Onder Linux zul je deze 8.3 bestandsnamen nooit te zien krijgen, omdat Linux gebruikt maakt van de Rock Ridge extensies waarin de originele bestandsinformatie (permissies, bestandsnaam, enz.) staat.

Nu vraag je je misschien af waarom de uitvoer van mkisofs niet direct naar het writer-device wordt gezonden. Hiervoor zijn drie redenen:

Er is een methode om een CD-R in één keer te beschrijven, en die zal hieronder worden beschreven.

Men zou er ook over kunnen denken om een extra partitie aan te maken en de image naar die partitie weg te schrijven in plaats van naar een bestand. Ik ben tegen een dergelijk strategie. Als je namelijk naar de verkeerde partitie wegschrijft (vanwege een typo), kun je je complete Linux-systeem kwijt raken (lees: dat overkwam mij...). Bovendien is het een verspilling van diskruimte omdat de CD-image bestaat uit tijdelijke data die na het beschrijven van de CD kan worden verwijderd. Nog niet bewerkte partities besparen je echter de tijd die het in beslag neemt om bestanden van in totaal 650 MB te verwijderen.

Test de CD-image

Linux heeft de mogelijkheid om bestanden net als disk-partities te mounten. Deze faciliteit is handig om te controleren of de lay-out van de directory en de permissies van de bestanden van de CD-image met je wensen overeenkomen. Alhoewel media tegenwoordig erg goedkoop is, neemt het schrijfproces nog steeds veel tijd in beslag en misschien wil je op z'n minst jezelf de tijd besparen door een snelle test uit te voeren.

Om het bestand cd_image, dat je hiervoor hebt aangemaakt, onder de directory /cdrom te mounten, geef je het commando

mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom

Je kunt de bestanden nu onder /cdrom inspecteren -- ze verschijnen exact zoals ze daar staan, op een echte CD. Om de CD-image te umounten, geef je gewoon op: umount /cdrom. (Waarschuwing: Onder Linux-kernels van voor 2.0.31 kan het zijn dat het laatste bestand onder /cdrom niet volledig leesbaar is. Gebruik alsjeblieft een recentere kernel, zoals 2.0.36. De optie -pad voor cdrecord geldt alleen voor audio-CD's en de optie -pad voor mkisofs vereist een patch, welke net zoveel werk kost om toe te passen dan om een upgrade uit te voeren naar een foutvrije Linux-kernel).

Opmerking:

Een aantal zeer oude versies van mount zijn niet in staat om met loopback-devices om te gaan. Als je een dergelijke oude versie van mount hebt, upgrade dan je Linux-systeem.

Verscheidene mensen hebben reeds geopperd om informatie in deze HOWTO te plaatsen, over hoe je de nieuwste mount-utilities kunt verkrijgen. Ik weiger dit altijd. Als je Linux-Distributie met een zeer oude mount komt, rapporteer het als een bug. Als je Linux-Distributie niet makkelijke upgradebaar is, rapporteer het als een bug.

Als ik alle informatie opneem, die nodig is om bugs in slecht ontworpen Linux-distributies te omzeilen, zou deze HOWTO een stuk groter en veel moeilijker te lezen zijn.

Schrijf de CD-image naar een CD

Niet veel meer te doen. Als je het nog niet hebt uitgeprobeerd, is het nu een goed moment voor het commando

cdrecord -scanbus

Hieraan kun je zien aan welk SCSI-device je CD-writer is gekoppeld. Alle andere methoden voor het raden van de informatie die zo mooi door cdrecord wordt afgedrukt, zijn uit de HOWTO verwijderd (vooral het wat gevaarlijke naamschema voor algemene SCSI-devices).

Voordat ik je het laatste commando laat zien, wil ik je waarschuwen dat CD-Writers met een constante stroom gegevens willen worden gevoed, omdat ze slechts kleine gegevensbuffers hebben. Dus het proces waarbij de CD-image naar de CD wordt geschreven, mag niet worden onderbroken want anders is het resultaat een corrupte CD. De gegevensstroom kan gemakkelijk worden onderbroken door een zeer groot bestand te verwijderen. Voorbeeld: als je een bestand ter grootte van 650 Mbytes verwijdert, moet de kernel informatie over 650.000 blokken op de harddisk bijwerken (ervan uitgaande dat je een blokgrootte voor je bestandsysteem hebt van 1 Kbyte). Dat kost nogal wat tijd en het is zeer waarschijnlijk dat het de disk-activiteit vertraagt en het de gegevensstroom een paar seconden onderbreekt. Echter het lezen van mail, bladeren door het web of zelfs het compileren van de kernel zal op in 't algemeen geen effect op het schrijfproces hebben (op moderne computers).

Geen enkele brander kan zijn laser herpositioneren en op de originele plek op de CD verdergaan, als het wordt onderbroken. Daarom zullen sterke trillingen en andere mechanische schokken de CD, die je aan het beschrijven bent, waarschijnlijk ruïneren.

Trek je zwarte jurk aan, als je je geestelijk hebt voorbereid, vermenigvuldig de SCSI-id van de CD-writer met z'n SCSI-revisie en steek zovelen kaarsen op, zeg twee coupletten van de ASR-FAQ op (newsgroup alt.sysadmin.recovery) en tik dan als laatste:

shell> SCSI_BUS=0   # van listing 1 "scsibus0:"
shell> SCSI_ID=6    # van listing 1 "TOSHIBA XM-3401"
shell> SCSI_LUN=0
shell> cdrecord -v speed=2 dev=$SCSI_BUS,$SCSI_ID,$SCSI_LUN \
                   -data  cd_image

# hetzelfde als hierboven, maar dan korter:
shell> cdrecord -v speed=2 dev=0,6,0  -data  cd_image

De coördinaten van de brander worden voor betere leesbaarheid in drie omgevingsvariabelen opgeslagen met natuurlijke namen als: SCSI_BUS, SCSI_ID, SCSI_LUN. De optie -data is niet verplicht, maar wordt op de commando-regel opgegeven zodat deze te vergelijken is met degene die wordt gebruikt voor het schrijven van audio-CD's.

Als je cdrecord gebruikt om een CD-RW te overschrijven, moet je de optie "blank=..." toevoegen om de oude inhoud te wissen. Lees alsjeblieft de man-page om meer over de diverse methoden te lezen om de CD-RW te legen.

In tijden waar iedereen, behalve ik, een 400 Mhz computer bezit, geven mensen de uitvoer van mkisofs gelijk door aan cdrecord:

shell> IMG_SIZE=`mkisofs -R -q -print-size prive_collectie/ 2>&1 \
| sed -e "s/.* = //"`
shell> echo $IMG_SIZE
shell> [ "0$IMG_SIZE" -ne 0 ] && mkisofs -r prive_collectie/ \
|cdrecord  speed=2  dev=0,6,0
            tsize=${IMG_SIZE}s  -data  -
#       vergeet niet de s --^         ^-- lees data vanaf STDIN

Het eerste commando is een lege run om de grootte van het image vast te stellen (je hebt mkisofs van de cdrecord-distributie nodig wil dit werken). Misschien hoeft je brander de grootte van de image, die zal worden weggeschreven, niet te weten, en kun je dit dus achterwege laten. De afgedrukte grootte moet als een tsize-parameter aan cdrecord worden doorgegeven (het is in de omgevingsvariabele IMG_SIZE opgeslagen). Het tweede commando is een opeenvolging van mkisofs en cdrecord, gekoppeld via een pipe.

3.2 Schrijven van audio CD's

Het schrijven van audio-CD's is zeer vergelijkbaar met de hierboven beschreven stappen voor data-CD's. Er zijn twee belangrijke verschillen. Één, de audio-CD bestaat uit audio-tracks, welke in aparte images zijn georganiseerd. Dus als je tien tracks op je CD wilt, dan zul je tien images aan moeten maken. Het andere verschil is, dat het formaat van de images geen ISO-9660 is (of aan welk bestandssysteem je ook de voorkeur geeft), maar het is "16 bit stereo samples in PCM codering met 44100 samples/seconde (44.1 kHz)".

Een utility om je geluidsbestanden naar het vereiste formaat te converteren is sox. Het gebruik ervan is ongekunsteld:

shell> sox  killing-my-software.wav  killing-my-software.cdr

Dit commando zou het lied killing-my-software converteren van het WAV-formaat naar het CDR-audio-formaat. Zie de man-page van sox voor meer details over formaten en bestandsnaamextensies die sox herkent. Omdat de uitvoer van de conversie veel diskruimte in beslag neemt, werden de formaten WAV en AU als kenmerk in cdrecord ingebouwd. Dus zolang je geluidsbestanden de extensies .wav of .au hebben (en de samplerate "stereo, 16 bit, 44.1 kHz"), kun je de images zonder handmatige conversie gebruiken.

Als de optie -audio worden opgegeven, schrijft cdrecord de CD-images als audio-tracks. De andere opties zijn identiek aan die voor het beschrijven van data-CD's (tenzij je zeer speciale vereisten hebt). Deze drie voorbeelden doen allen hetzelfde, maar ze lezen de tracks vanaf verschillende geluidsbestandsformaten:

shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.cdr track2.cdr...
shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.wav track2.wav...
shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.au  track2.au...

Een opmerkelijke uitzondering zijn de MPEG3 Layer 3 bestanden, welke naar het vereiste formaat kunnen worden geconverteerd met het commando "mpg123 --cdr -s track1.mp3 > track1.cdr". De optie --cdr geeft de verzekering dat het spoor in het vereiste formaat wordt gecodeerd (zie hierboven). Converteren van WAV naar MPEG kan worden gedaan met LAME voor WAV-bestanden (extraheer het spoor met cdda2wav vanaf de audio-CD en codeer het met behulp van LAME naar MP3). Je kunt de volgende commando-reeks gebruiken om een CD-R aan te maken van heel wat MP3 bestanden:

for I in *.mp3
do
        mpg123 --cdr -s "$I" | cdrecord -audio -pad -swab -nofix -
done
cdrecord -fix

Afhankelijk van de snelheid van je computer, wil je het schrijven misschien wat vertragen naar "speed=1" (optie van cdrecord). Als je "speed=4" gebruikt, moet je computer het MP3-bestand op viervoudige snelheid kunnen afspelen. mpg123 verbruikt veel CPU-tijd! Probeer een lege run met -dummy (houdt de laser uitgeschakeld), als je twijfelt. Als je dit doet, zal je een audio-CD produceren, waar zich tussen de audio-tracks 2 seconden pauzes bevinden.

DAO

Als je af wilt van de 2 seconden pauze tussen de tracks, moet je disc-at-once (DAO) opname gebruiken versus de (individuele) track-at-one (TAO) opname die hierboven werd beschreven. Ondersteuning voor DAO is in cdrdao het meest gevorderd. Zie alsjeblieft de homepage ervan voor details.

Als je gebruik maakt van de parameter read-cd, kun je 1:1 kopieën van audio-CD's maken.

3.3 Mixed mode CD-ROM's

Er valt over dit onderwerp niet veel meer te zeggen. Geef gewoon het type van de (opeenvolgende) images op met de opties -data en -audio. Voorbeeld:

cdrecord  -v dev=0,6,0  -data  cd_image  -audio  track*.cdr


Verder Terug Inhoud