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.
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, “cdrecord”.
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/acd
,
waarin d
tnn
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.
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
:
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.
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:
om daarna de machine opnieuw op te starten.
Als het noodzakelijk is om atapicam(4) statisch toe te voegen aan de kernel moet de volgende regel worden toegevoegd aan het kernelinstellingenbestand:
Ook zijn de volgende regels in het kernelinstellingenbestand nodig, die meestal wel aanwezig zijn:
Hierna 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:
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).