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 -v255 -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 18.6.4.
ATAPI-drives
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).
Deze en andere documenten kunnen worden gedownload van ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Lees voor vragen over FreeBSD de documentatie alvorens contact te zoeken
<questions@FreeBSD.org>.
Vragen over deze documentatie kunnen per e-mail naar <doc@FreeBSD.org>.