CD's hebben een aantal eigenschappen waardoor ze verschillen van conventionele schijven. Initieel zijn ze door de gebruiker niet beschrijfbaar. Ze zijn zó ontworpen dat ze continu, zonder vertragingen van het verplaatsen van de kop tussen tracks, gelezen kunnen worden. Ze zijn ook veel gemakkelijker tussen twee systemen te verplaatsen dan gelijksoortige media in hun tijd waren.
CD's hebben tracks, maar die verwijzen naar secties van gegevens die continu gelezen dienen te worden en niet naar fysieke eigenschappen van de schijf. Om een CD op FreeBSD te produceren, dienen de gegevensbestanden waaruit de tracks op de CD gaan bestaan te worden voorbereid, waarna de tracks op de CD worden geschreven.
Het bestandssysteem ISO 9660 is ontworpen om met deze verschillen om te gaan. Helaas codeert het bestandssysteemgrenzen die destijds gebruikelijk waren. Gelukkig biedt het een uitbreidingsmechanisme dat correct geschreven CD's toestaat om deze grenzen te overschrijden en nog steeds te werken met systemen die deze uitbreidingen niet ondersteunen.
De port sysutils/cdrtools bevat mkisofs(8), een programma dat gebruikt kan worden om een gegevensbestand aan te maken dat een ISO 9660-bestandssysteem bevat. Het bevat opties die verschillende uitbreidingen ondersteunen en wordt hieronder beschreven.
Het gereedschap om de CD te branden hangt af van het feit of de CD-brander ATAPI of iets anders is. ATAPI CD-branders gebruiken het programma burncd dat deel uitmaakt van het basissysteem. SCSI en USB CD-branders dienen cdrecord van de port sysutils/cdrtools te gebruiken. Het is ook mogelijk om cdrecord en andere gereedschappen voor SCSI-drives op ATAPI-hardware te gebruiken door middel van de module ATAPI/CAM.
Indien CD-brandsoftware met een grafische gebruikersinterface gewenst is, is X-CD-Roast of K3b een mogelijkheid. Deze gereedschappen zijn beschikbaar als package of vanuit de ports sysutils/xcdroast en sysutils/k3b. X-CD-Roast en K3b hebben de module ATAPI/CAM met ATAPI-hardware nodig.
Het programma mkisofs(8), dat deel uitmaakt van de port sysutils/cdrtools, maakt een ISO 9660-bestandssysteem aan dat een beeld is van een boomstructuur in de UNIX® bestandssysteem-namespace. De eenvoudigste gebruiksvorm is:
# mkisofs -o beeldbestand.iso /pad/naar/boomstructuur
Dit commando maakt een beeldbestand.iso aan dat een ISO 9660-bestandssysteem bevat dat een kopie is van de boomstructuur in /pad/naar/boomstructuur. Tijdens het proces beeldt het bestandsnamen af op namen die aan de beperkingen van het standaard ISO 9660-bestandssysteem voldoen en sluit het bestanden uit die namen hebben die niet karakteristiek zijn voor ISO-bestandssystemen.
Er is een aantal opties beschikbaar om over deze beperkingen heen te komen. In
het bijzonder zet -R
de Rock Ridge-uitbreidingen aan die
gangbaar zijn voor UNIX systemen, zet -J
de Rock Ridge-uitbreidingen aan die gebruikt worden op
Microsoft-systemen en -hfs
kan gebruikt worden om
HFS-bestandssystemen aan te maken die door Mac OS®
gebruikt worden.
Voor CD's die alleen op FreeBSD-systemen gebruikt gaan worden, kan -U
gebruikt worden om alle restricties op bestandsnamen uit te
zetten. Indien het met -R
gebruikt wordt, maakt het een
bestandssysteembeeld aan dat identiek is aan de FreeBSD-boomstructuur van
waaruit begonnen is, alhoewel het mogelijk is dat het zich op aantal manieren niet
aan de ISO 9660-standaard houdt.
De laatste optie voor algemeen gebruik is -b
. Deze
wordt gebruikt om de plaats van het opstartbeeld aan te geven om een “El
Torito” opstartbare CD te maken. Deze optie heeft een argument nodig,
namelijk het pad naar een opstartbeeld dat het begin van de boomstructuur die
naar de CD geschreven wordt voorstelt. Gewoonlijk maakt
mkisofs(8) een
ISO-beeld aan in de zogenaamde “diskette-emulatie”-modus en verwacht
het dus dat het beeldbestand exact 1200, 1440 of 2880 KB groot is. Sommige
bootloaders, zoals degene die door de distributieschijven van FreeBSD wordt
gebruikt, gebruiken de emulatiemodus niet. In dat geval dient de optie -no-emul-boot
gebruikt te worden. Dus indien /tmp/myboot een opstartbaar FreeBSD-systeem met het
beeldbestand in /tmp/myboot/boot/cdboot bevat, kan het
beeld van een ISO 9660-bestandssysteem als volgt in /tmp/bootable.iso aangemaakt worden:
# mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot
Als dit gedaan is en md in de kernel is ingesteld, kan het bestandssysteem gekoppeld worden:
# mdconfig -a -t vnode -f /tmp/bootable.iso -u 0 # mount -t cd9660 /dev/md0 /mnt
Nu kan gecontroleerd worden of /mnt en /tmp/myboot identiek zijn.
Er zijn vele andere opties die met mkisofs(8) gebruikt kunnen worden om het gedrag af te stemmen. In het bijzonder wijzigingen aan een ISO 9660-structuur en het aanmaken van Joliet- en HFS-schijven. Details staan in mkisofs(8).
Indien er een ATAPI CD-brander aanwezig is, kan het commando burncd gebruikt worden om een ISO-beeld naar een CD te branden. burncd maakt deel uit van het basissysteem en is geïnstalleerd als /usr/sbin/burncd. Het gebruik is erg eenvoudig, aangezien het weinig opties heeft.
# burncd -f cd-apparaat gegevens beeldbestand.iso fixate
Het bovenstaande commando brandt een kopie van beeldbestand.iso naar cd-apparaat. Het standaardapparaat is /dev/acd0. Opties om de schrijfsnelheid in te stellen, de CD na het branden uit te werpen en geluidsgegevens te schrijven staan in burncd(8).
Indien er geen ATAPI CD-brander aanwezig is, dient cdrecord gebruikt te worden om CD's te branden. cdrecord maakt geen deel uit van het basissysteem. Het dient òfwel vanuit de port in sysutils/cdrtools òfwel als package geïnstalleerd te worden. Veranderingen in het basissysteem kunnen ervoor zorgen dat binaire versies van dit programma falen, wat mogelijk tot een “coaster” leidt. Daarom dient òfwel de port bijgewerkt te worden als het systeem wordt bijgewerkt, òwel, als -STABLE gevolgd wordt, dient de port bijgewerkt te worden wanneer er een nieuwe versie beschikbaar komt.
Hoewel cdrecord vele opties heeft, is het gebruik voor gewone situaties nog eenvoudiger dan dat van burncd. Een ISO 9660-beeld kan gebrand worden met:
# cdrecord dev=device beeldbestand.iso
Het lastige gedeelte in het gebruik van cdrecord is het
vinden van de juiste dev
. Om de juiste instelling te
vinden, kan de vlag -scanbus
van cdrecord gebruikt worden, wat resultaten zoals de onderstaande
kan geven:
# cdrecord -scanbus Cdrecord-Clone 2.01 (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) *
Dit geeft de gepaste dev
-waarden voor de apparaten in
de lijst. De CD-brander dient gezocht te worden, waarna de drie getallen gescheiden
door komma's gebruikt kunnen worden als de waarde voor dev
. In dit geval is het CD-RW-apparaat 1,5,0, dus is de
juiste invoer dev=1,5,0
. Er zijn eenvoudigere manieren
om deze waarde te specificeren. In
cdrecord(1)
staan meer details. Hier staat ook informatie over geluidstracks, de snelheid
instellen en meer.
Een audio-CD kan gedupliceerd worden door de geluidsgegevens van de CD naar een serie bestanden te schrijven en deze bestanden daarna naar een lege CD te schrijven. Het proces verschilt licht tussen ATAPI- en SCSI-drives.
SCSI-drives
Onttrek cdda2wav de audio:
% cdda2wav -vall -D2,0 -B -Owav
Schrijf met cdrecord de .wav-bestanden:
% cdrecord -v dev=2,0 -dao -useinfo *.wav
Controleer of 2,0 juist is opgegeven, zoals beschreven in Paragraaf 19.6.4.
ATAPI-drives
Opmerking: Met behulp van de ATAPI/CAM module kan cdda2wav ook gebruikt worden voor ATAPI-drives. Dit gereedschap is vaak een betere keuze voor de meeste gebruikers (jitter-correctie, endianness-zaken, etc.) dan de methode die hieronder wordt voorgesteld.
Het ATAPI CD-stuurprogramma maakt elke track beschikbaar als /dev/acddtnn, waarin d het stationsnummer is en nn het tracknummer is in twee decimale cijfers, dat indien nodig vooraf wordt gegaan door een nul. Dus is de eerste track op de eerste schijf /dev/acd0t01, de tweede /dev/acd0t02, de derde /dev/acd0t03, enzovoort.
Controleer of de juiste bestanden in /dev bestaan. Als de benodigde namen er niet bijstaan, forceer het systeem dan om opnieuw te kijken:
# dd if=/dev/acd0 of=/dev/null count=1
De track kan met dd(1) onttrokken worden. Bij het onttrekken van de bestanden dient een specifieke blokgrootte gebruikt te worden.
# dd if=/dev/acd0t01 of=track1.cdr bs=2352 #dd if=/dev/acd0t02 of=track2.cdr bs=2352 ...
Brand de onttrokken bestanden met burncd. Er dient opgegeven te worden dat het geluidsbestanden zijn en dat burncd de schijf moet fixeren wanneer na afronding van het proces.
# burncd -f /dev/acd0 audio track1.cdr track2.cdr ... fixate
Een gegevens-CD kan gekopieerd worden naar een beeldbestand dat functioneel gelijk is aan het beeldbestand dat met mkisofs(8) gemaakt is en het kan gebruikt worden om elke gegevens-CD te dupliceren. Het hier gegeven voorbeeld neemt aan dat het CD-ROM-apparaat acd0 is.
# dd if=/dev/acd0 of=bestand.iso bs=2048
Nu het beeld beschikbaar is, kan het naar CD geschreven worden zoals hierboven beschreven.
Nu er een standaard gegevens-CD-ROM is aangemaakt moet deze waarschijnlijk aangekoppeld worden om de gegevens die er op staan te lezen. Normaalgesproken neemt mount(8) aan dat een bestandssysteem van het soort ufs is. Als zoiets als onderstaande geprobeerd wordt komt er een klacht over “Incorrect super block” en wordt er niet aangekoppeld:
# mount /dev/cd0 /mnt
De CD-ROM bevat geen UFS-bestandssysteem, dus pogingen
om zo aan te koppelen mislukken. Er dient aan mount(8) verteld te
worden dat het bestandssysteem van het soort ISO9660
is en dan werkt alles. Dit kan door de optie -t cd9660
van mount(8) op te
geven. Het CD-ROM-apparaat /dev/cd0 onder /mnt aankoppelen kan zo:
# mount -t cd9660 /dev/cd0 /mnt
De apparaatnaam (in dit voorbeeld /dev/cd0) kan
afwijken, afhankelijk van de interface die de CD-ROM gebruikt. Verder voert de optie
-t cd9660
gewoon mount_cd9660(8) uit.
Bovenstaand voorbeeld kan verkort worden tot:
# mount_cd9660 /dev/cd0 /mnt
Het is in het algemeen mogelijk om gegevens-CD-ROMs van elke fabrikant op deze
manier te gebruiken. Schijven met bepaalde uitbreidingen op ISO 9660 kunnen zich
echter vreemd gedragen. Joliet-schijven bijvoorbeeld, slaan alle bestandsnamen
op in twee-byte Unicode-karakters. De FreeBSD-kernel spreekt geen Unicode, maar het
FreeBSD CD9660 stuurprogramma is in staat om Unicode karakters direct te
converteren. Als er niet-Engelse karakters verschijnen als vraagtekens, moet de
lokale karakterset gedefinieerd worden met de -C
optie.
Zie de mount_cd9660(8)
handleiding voor meer informatie.
Opmerking: Om in staat te zijn om de karakter conversie te doen met behulp van de
-C
optie, heeft de kernel de cd9660_iconv.ko module nodig. Deze kan ingeladen worden door het volgende toe te voegen aan /boot/loader.conf:cd9660_iconv_load="YES"en daarna de machine te herstarten of door de module direct in te laden met kldload(8).
Zo nu en dan kan “Device not configured” verschijnen als geprobeerd wordt om een CD-ROM aan te koppelen. Dit betekent meestal dat het CD-ROM-station denkt dat er geen schijf in de lade ligt of dat het station niet zichtbaar is op de bus. Omdat het enkele seconden kan duren voordat een CD-ROM-station doorheeft dat er een CD-ROM in ligt, is geduld geboden.
Soms wordt een SCSI CD-ROM gemist omdat het station niet genoeg tijd had om antwoord te geven op de busreset. Indien er een SCSI CD-ROM aanwezig is, dient de volgende optie aan de kernelinstellingen toegevoegd te worden en de kernel opnieuw gebouwd te worden.
options SCSI_DELAY=15000
Dit zorgt ervoor dat de SCSI-bus 15 seconden pauzeert tijdens het opstarten opdat het CD-ROM-station elke gelegenheid krijgt om de busreset te beantwoorden.
Een bestand kan direct naar CD geschreven worden zonder een ISO 9660-bestandssysteem aan te maken. Sommige mensen doen dit voor back-updoeleinden. Dit gaat sneller dan een standaard-CD branden:
# burncd -f /dev/acd1 -s 12 gegevens archief.tar.gz fixate
Om de gegevens terug te halen die op zo'n CD gebrand zijn, is het noodzakelijk om gegevens van de rauwe apparaatnode te lezen:
# tar xzvf /dev/acd1
Het is niet mogelijk om deze schijf aan te koppelen zoals dat voor een normale CD-ROM gedaan wordt. Zo'n CD-ROM kan onder geen enkel besturingssysteem, behalve FreeBSD, gelezen worden. Om de CD aan te kunnen koppelen of gegevens te delen met een ander besturingssysteem, dient mkisofs(8) gebruikt te worden, zoals boven beschreven is.
Dit stuurprogramma stelt ATAPI-apparaten (CD-ROM, CD-RW, DVD-stations, enzovoort) in staat om vanuit het SCSI-subsysteem benaderd te worden en maakt daarmee het gebruik van applicaties zoals sysutils/cdrdao of cdrecord(1) mogelijk.
Om dit stuurprogramma te gebruiken, is het noodzakelijk om de volgende regel aan het /boot/loader.conf bestand toe te voegen:
atapicam_load="YES"
om daarna de machine opnieuw op te starten.
Opmerking: Als het noodzakelijk is om atapicam(4) statisch toe te voegen aan de kernel moet de volgende regel worden toegevoegd aan het kernelinstellingenbestand:
device atapicamOok zijn de volgende regels in het kernelinstellingenbestand nodig, die meestal wel aanwezig zijn:
device ata device scbus device cd device passHierna dient de nieuwe kernel opnieuw gebouwd en geïnstalleerd te worden en dient de machine opnieuw gestart te worden.
Tijdens het opstartproces dient de brander als volgt te verschijnen:
acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4 cd0 at ata1 bus 0 target 0 lun 0 cd0: <MATSHITA CD-RW/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
Het station is nu toegankelijk via de apparaatnaam /dev/cd0. Om bijvoorbeeld een CD-ROM op /mnt aan te koppelen:
# mount -t cd9660 /dev/cd0 /mnt
Als root kan het volgende commando gegeven worden om het SCSI-adres van de brander te verkrijgen:
# camcontrol devlist <MATSHITA CD-RW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (pass0,cd0)
Dus 1,0,0 is het SCSI-adres dat met cdrecord(1) en andere SCSI-toepassingen gebruikt dient te worden.
Meer informatie over het ATAPI/CAM en het SCSI-systeem staat in de hulppagina's van atapicam(4) en cam(4).