Verder Terug Inhoud

3. CD-R's branden

"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.)

Het beschrijven van CD-ROM's bestaat onder Linux uit twee stappen:

In dit hoofdstuk worden de stappen in meer detail beschreven voor data en audio CD's.

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

Het verzamelen van de data om op een CD te zetten duurt gewoonlijk langer dan men verwacht. Overweeg dat ontbrekende bestanden niet kunnen worden toegevoegd zodra de CD is beschreven en gefixeerd. Dit geldt tevens voor een CD-RW, welke thans alleen in z'n geheel kan worden beschreven. Het gebruik van de multi-sessie feature is geen optie voor enkele bestanden, aangezien het veel ruimte consumeert voor een complete inhoudsopgave (TOC). UDF is nog niet gereed voor Linux.

Houd ook in gedachten dat een bepaalde hoeveelheid van de vrije ruimte op een CD wordt gebruikt voor het opslaan van de informatie van het ISO-9660-bestandssysteem (gewoonlijk een paar MB). 620 MB data zal altijd wel passen op een 650 MB CD-R.

Maak een image aan van de laatste CD-ROM

Voor enig opslagmedium (b.v. diskette, harddisk of CD) kan worden gebruikt, moet er een bestandssysteem op worden geplaatst (In DOS taal: worden geformatteerd). Het bestandssysteem is verantwoordelijk voor het organiseren en opnemen van de bestanden die op het medium moeten worden bewaard.

De gebruikelijke utility's voor het aanmaken van bestandssystemen op harddisk- partities schrijven er een leeg bestandssysteem op, welke vervolgens wordt gemount en wordt gevuld met bestanden door de gebruikers. Een schrijfbare CD is slechts éénmaal beschrijfbaar, dus als we er een leeg bestandssysteem op weg zouden schrijven, zou het worden geformatteerd en voor eeuwig leeg blijven. Dit geldt tevens voor herschrijfbare media aangezien je nog geen willekeurige sectors kunt wijzigen; je moet de gehele inhoud verwijderen.

Dus wat we nodig hebben is een tool dat het bestandssysteem aanmaakt onderwijl we de bestanden naar de CD kopiëren. Deze tool wordt mkisofs genoemd. Een voorbeeld van het gebruik ervan gaat als volgt:

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

De optie '-r' stelt de permissies in van alle bestanden in op voor het publiek leesbaar op de CD en activeert RockRidge-extensies. Je wilt deze optie waarschijnlijk wel gebruiken, tenzij je werkelijk weet wat je aan het doen bent (hint: zonder '-r'krijgt het mountpoint de permissies van privé_verzameling!).

mkisofs zal proberen alle bestandsnamen in te delen in het 8.3 formaat dat wordt gebruikt door DOS om de grootst mogelijke compatibiliteit te garanderen. In het geval van naamconflicten (verschillende bestanden hebben dezelfde 8.3 naam), worden nummers gebruikt in de bestandsnamen en informatie over de gekozen bestandsnaam wordt afgedrukt via STDERR (gewoonlijk het scherm). Geen paniek: Onder Linux zul je deze rare 8.3 bestandsnamen nooit zien, omdat Linux gebruikt maakt van de Rock Ridge extensies die de oorspronkelijke bestandsinformatie bevatten (permissies, bestandsnaam, enz.).

Denk eraan de optie -J (MS Joliet extensies) te gebruiken of gebruik mkhybrid als je een Windows-vriendelijker CD-ROM wilt genereren. Voor HFS CD-ROMS die worden gebruikt op de Macintosh, kun je beter de manpage van mkisofs' grotere zuster mkhybrid lezen voor details over de diverse opties.

Nu vraag je je wellicht af waarom de uitvoer van mkisofs niet direct naar het writer device wordt gestuurd. Hier zijn drie redenen voor:

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

Men zou er ook over kunnen denken 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 dergelijke strategie. Mocht je namelijk naar de verkeerde partitie schrijven door een typfout, dan kun je je volledige Linux systeem kwijtraken. Lees: wat mij overkwam... Bovendien is het een verspilling van diskruimte omdat de CD-image dient als tijdelijke data wat na het beschrijven van de CD kan worden verwijderd. Het gebruik van ruwe partities bespaart je echter de tijd om bestanden met een omvang van 650 MB te verwijderen.

Test het CD-image

Linux heeft de mogelijkheid bestanden te mounten alsof het diskpartities zijn. Deze feature is handig voor een controle of de directory lay-out en bestandstoegangspermissies overeenkomen met wat je wilt. Alhoewel media tegenwoordig erg goedkoop is, kost het schrijfproces nog steeds veel tijd, en je wilt wellicht wat tijd besparen door een snelle test uit te voeren.

Geef voor het mounten van het hierboven aangemaakte bestand cd_image op de directory /cdrom, de opdracht

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

Nu kun je de bestanden onder /cdrom inspecteren, ze verschijnen exact zo op een echte CD. Voor het unmounten van de CD-image geeft je op: umount /cdrom. (Waarschuwing: Onder Linux kernels van voor versie 2.0.31 kan het zijn dat het laatste bestand op /cdrom niet volledig leesbaar is. Gebruik alsjeblieft een recentere kernel zoals 2.0.36. De optie -pad van cdrecord is alleen van toepassing op audio CD's en de optie -pad van mkisofs vereist een patch, wat net zoveel werk is als een upgrade naar een foutvrije Linux kernel.)

Noot:

Een aantal oude versies van mount kunnen niet omgaan met loopback devices. Als je een dergelijk oude versie van mount hebt, upgrade dan je Linux-systeem. Verscheidene mensen hebben reeds geopperd informatie in dit document te plaatsen over hoe je aan de nieuwste mount utility's kunt komen. Ik weiger dit altijd. Als je Linux distributie met een oude mount wordt geleverd, rapporteer dit dan als een bug. Als je Linux distributie niet eenvoudig is te upgraden, rapporteer dit dan als een bug.

Als ik alle informatie op zou nemen die nodig is om om bugs heen te werken die in slecht ontworpen Linux distributies aanwezig zijn, dan zou deze HOWTO heel wat groter en moeilijker te lezen zijn.

Schrijf de CD-image naar een CD

In deze sectie gaat het alleen over het beschrijven van CD's in TAO modus, omdat het de meest gebruikte modus voor gegevens is. Kijk alsjblieft in het hoofdstuk over audio CD-R's voor meer informatie over de verschillen tussen TAO en DAO. Als je de DAO modus gebruikt met de tool cdrdao, denk er dan aan een dummy audio track aan het einde van het TOC bestand toe te voegen (zie de README).

Niet veel meer te doen. Als je het nog niet hebt geprobeerd, is het nu een goed moment voor de opdracht

cdrecord -scanbus

Dit vertelt je aan welk SCSI-device je CD-writer is gekoppeld. Alle andere methoden om de informatie te raden die zo fraai door cdrecord worden afgedrukt, zijn uit deze HOWTO verwijderd.

Laat me je waarschuwen dat CD-writers een constante gegevensstroom als invoer willen, voordat ik je de laatste opdracht laat zien. Dus het schrijfproces van de CD-image naar de CD moet niet worden onderbroken anders heeft dit een beschadigde CD tot gevolg. De gegevensstroom kan makkelijk worden onderbroken door een zeer groot bestand te verwijderen. Bijvoorbeeld: als je een oud CD-image met een omvang van 650 Mbyte verwijdert, dan moet de kernel informatie bijwerken over 650,000 blokken op de harddisk (in de veronderstelling dat je een blokomvang hebt van 1 Kbyte voor je bestandssysteem). Dat neemt wat tijd in beslag en het is zeer waarschijnlijk dat het de diskactiviteit lang genoeg voor de gegevensstroom zal vertragen dat het een paar seconden pauzeert. Het lezen van mail, browsen op het web of zelfs compileren van een kernel echter heeft op moderne machines geen effect op het schrijfproces.

Geen enkele writer kan zijn laser herpositioneren en verdergaan op de oorspronkelijke plek op de CD wanneer het wordt gestoord. Daarom zullen sterke vibraties of andere mechanische schokken de CD die je aan het beschrijven bent naar alle waarschijnlijkheid ruïneren.

Trek een zwart gewaad aan, vermenigvuldig de SCSI-id van de CD-writer met zijn SCSI-revisie en steek zoveel mogelijk kaarsen aan, zeg twee twee coupletten van de ASR-FAQ op (nieuwsgroep alt.sysadmin.recovery) wanneer je voldoende geestelijk bent voorbereid en typ tenslotte:

shell> SCSI_BUS=0   # uit listing 1 "scsibus0:"
shell> SCSI_ID=6    # uit 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 bovenstaand, maar korter:
shell> cdrecord -v speed=2 dev=0,6,0  -data  cd_image

Voor een betere leesbaarheid, worden de drie omgevingsvariabelen met natuurlijke namen opgeslagen: SCSI_BUS, SCSI_ID, SCSI_LUN.

Wanneer je cdrecord gebruik om een CD-RW te overschrijven, dan moet je de optie "blank=..." toevoegen om de oude inhoud te verwijderen. Lees alsjeblieft de manpage om meer te leren over de diverse methoden om een CD-RW leeg te maken.

In tijden waarin iedereen behalve ik een 400 Mhz machine heeft, geven mensen de uitvoer van mkisofs direct door als invoer aan cdrecord:

shell> IMG_SIZE=`mkisofs -R -q -print-size privé_verzameling/  2>&1 \
| sed -e "s/.* = //"`
shell> echo $IMG_SIZE
shell> [ "0$IMG_SIZE" -ne 0 ] && mkisofs -r  privé_verzameling/  \
|cdrecord  speed=2  dev=0,6,0
            tsize=${IMG_SIZE}s  -data  -
#       don't forget the s --^         ^-- lees data van STDIN

De eerste opdracht is een lege run om vast te stellen wat de omvang van het image is (je hebt hier mkisofs van de cdrecord distributie voor nodig). Je moet alle parameters opgeven die je ook bij de uiteindelijke uitvoering opgeeft (b.v. -J of -hfs). Misschien hoeft je writer niet te weten wat de omvang van het weg te schrijven image is, dus dan kun je deze droge uitvoering achterwege laten. De afgedrukte grootte moet als een tsize parameter aan cdrecord worden doorgegeven (het wordt opgeslagen in de omgevingsvariabele IMG_SIZE). De tweede opdracht is een reeks aan mkisofs en cdrecord, gevormd via een pipe.

3.2 Schrijven van audio CD's

Het beschrijven van audio CD's is zeer vergelijkbaar met de hierboven beschreven stappen voor data CD's. Je kunt tussen twee technieken kiezen: DAO of TAO. TAO (track at once) is minder geschikt voor muziek, omdat je klikken tussen de individuele tracks zult horen. Toch wordt het als eerste beschreven, omdat het iets makkelijker is en DAO nog niet voor alle drives beschikbaar is.

Het belangrijkste verschil in vergelijking met het schrijven van data CD-R's is het formaat van de images. ISO-9660 (of aan welk bestandssysteem je ook de voorkeur geeft) zou niet geschikt zijn, omdat geen enkele audio CD-speler met bestandssystemen om kan gaan. In plaats daarvan moeten de audiogegevens worden geschreven als "16 bit stereo samples in PCM codering op 44100 samples/seconde (44.1 kHz)".

Een utility om je geluidsbestanden naar een vereist formaat te converteren is sox. Het gebruik ervan is vrij eenvoudig:

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

Deze opdracht converteert het lied killing-my-software van het WAV-formaat naar het CDR audio-formaat. Zie de manpage van sox voor details over formaten en bestandsnaam extensies die sox herkent. Omdat de uitvoer van de handmatige conversie veel diskruimte vergt, werd het een ingebouwde feature van cdrecord voor de geluidsformaten WAV en AU. Zolang je geluidsbestanden de extensies .wav of .au hebbt (en de sample rate "stereo, 16 bit, 44.1 kHz"), kun je ze als audio tracks gebruiken zonder handmatige conversie toe te passen naar het CDR formaat. Cdrecord vereist echter dat de grootte van de geluidsgegevens een integer is welke deelbaar is door 2352 en groter is dan 705.600 bytes, waaraan voor een aantal WAV bestanden niet kan worden voldaan. Voor dergelijke bestand is het gebruik van sox nodig om de audio data tot aan 2352 bytes op te vullen.

Beschrijven van audio CD's (TAO)

Een audio CD bestaat uit audio-tracks, die zijn georganiseerd als aparte images wanneer gebruik wordt gemaakt van de TAO modus. Dus als je tien tracks op je CD wilt, dan moet je tien images aanmaken.

Cdrecord schrijft CD images als audio tracks als de optie -audio is gespecificeerd. De andere opties zijn identiek aan degenen die werden gebruikt voor het beschrijven van data-CD's (tenzij je zeer speciale wensen hebt). Deze drie voorbeelden doen allen hetzelfde, maar lezen de tracks van verschillende formaten geluidsbestanden:

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

Hiermee zal een audio-CD worden geproduceerd met 2 seconden pauze tussen de tracks. Een opmerkelijk formaat wat niet direct leesbaar is door cdrecord is MPEG Layer 3. Om deze bestanden in dit formaat om te zetten naar het CDR-formaat, kun je de opdracht "mpg123 --cdr - track1.mp3 > track1.cdr" gebruiken. De optie --cdr garandeert dat de track is gecodeerd in het vereiste formaat (zie boven). Oudere versies van mpg123 vereisten -s in plaats van de gewone - om naar stdout te schrijven. De andere richting (van WAV converteren naar MPEG) kan worden gedaan met LAME voor WAV-bestanden (extraheer de track met cdda2wav van de audio-CD en codeer het in MP3 met de hulp van LAME).

Voor het aanmaken van een CD-R van een boel MP3-bestanden, kun je gebruik maken van de volgende reeks opdrachten:

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

Afhankelijk van de snelheid van je machine, moet je wellicht de schrijfsnelheid verlagen naar "speed=1" (cdrecord optie). Gebruik je "speed=4", dan moet je machine het MP3-bestand op viervoudige snelheid af kunnen spelen. mpg123 consumeert veel CPU-tijd! Probeer een lege run met -dummy (de laser blijft uitgeschakeld) als je twijfelt.

DAO

Wanneer je af wilt van de pauzes tussen de audio tracks, dan moet je de disk-at-once (DAO) opname gebruiken in tegenstelling tot de (individuele) track-at-once (TAO) opname die hiervoor werd beschreven. In cdrdao is ondersteuning voor DAO het verst gevorderd. Kijk op de homepage van cdrdao voor details.

Bestuur je de CD in DAO modus, dan gebruik je een monolithisch image (geluidsbestand) en bestuur je de informatie over de tracks met een configuratiebestand.

CD_DA
TRACK AUDIO
FILE "live.wav" 0 5:0:0
INDEX 3:0:0
TRACK AUDIO
FILE "live.wav" 5:0:0 5:0:0
TRACK AUDIO
FILE "live.wav" 10:0:0 5:0:0
INDEX 2:0:0

3.3 CD-ROM's in gemengde modi

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

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

Verder Terug Inhoud