A CD-k számos lehetőségünkben eltérnek a hagyományos lemezektől. Kezdetben a felhasználók nem is voltak képesek írni ezeket. Olyannak tervezték, hogy a fejek sávok közti mozgásából fakadó késleltetés nélkül lehessen folyamatosan olvasni. A szállítása a maga idejében sokkal könnyebb volt minden vele egyforma méretű eszköznél.
A CD-ken is találhatunk sávokat, azonban ez csak a folyamatosan olvasható adat egy szakaszát jelenti, nem pedig a lemez fizikai tulajdonságát. Ha FreeBSD-n akarunk CD-t készíteni, akkor ehhez először össze kell állítanunk a CD egyes sávjaira kerülő adatokat és ezután rögzíteni ezeket a sávokat a CD-n.
Az ISO 9660 állományrendszert úgy tervezték, hogy megbirkózzon ezekkel az eltérésekkel. Sajnos ezzel együtt kőbe vésték az állományrendszerek akkoriban érvényes korlátozásait is. Szerencsére lehetőséget ad bővítésre, ezáltal a helyesen megírt CD-k képesek úgy átlépni ezeket a határokat, hogy közben az általuk alkalmazott kiterjesztéseket nem ismerő rendszerekkel is együtt tudnak működni.
A sysutils/cdrtools port tartalmaz egy mkisofs(8) nevű programot, amellyel létre tudunk hozni ISO 9660 típusú állományrendszert tartalmazó adatállományt. Többféle kiterjesztést is ismer, amit majd a lentebb ismertett opciókkal érhetünk el.
A CD írásához használt
konkrét segédeszköz attól függ,
hogy ATAPI vagy esetleg másmilyen írónk
van. Az ATAPI CD-írók az alaprendszer
részeként elérhető burncd
programon
keresztül használhatóak. A SCSI és
USB CD-írók esetén pedig a sysutils/cdrtools portban
megtalálható cdrecord
programot
használhatjuk. Az ATAPI/CAM
modul segítségével a cdrecord
és
más SCSI-írókra készült
programokat is tudunk használni ATAPI hardvereken.
Ha a CD-író szoftverünket grafikus felhasználói felületen keresztül szeretnénk használni, akkor az X-CD-Roast vagy a K3b alkalmazásokat érdemes szemügyre vennünk. Ezek az eszközök elérhetőek csomagként vagy a sysutils/xcdroast és sysutils/k3b portokból. ATAPI hardver esetén az X-CD-Roast és a K3b alkalmazások használatához szükségünk lesz az ATAPI/CAM modulra.
A sysutils/cdrtools port részeként elérhető mkisofs(8) program képes a UNIX(R) típusú állományrendszer könyvtárszerkezete alapján egy ISO 9660 típusú állományrendszert tartalmazó image-et készíteni. Legegyszerűbb módon így használhatjuk:
#
mkisofs -o image.iso /az/elérési/út
Ezzel a paranccsal egy olyan
image.iso
nevű
állományt hozunk létre, amely
/az/elérési/út
által megadott helyen található
könyvtárszerkezetet mintázza ISO 9660
állományrendszer formájában. A
folyamat során minden olyan állományt
leképez szabványos ISO 9660
állományrendszerbeli névre, amely megfelel
a szabvány elvárásainak, és kihagy
minden olyan állományt, amely nem jellemző az
ISO állományrendszerekre.
Számos opció lehet
segítségünkre az ilyenkor felbukkanó
akadályok leküzdésében. Ezek
közül különösen fontos az
-R
, amely a UNIX(R) rendszerek
számára megszokott Rock Ridge
kiterjesztéseket, valamint a -J
, amely a
Microsoft rendszerekben használt Joliet
kiterjesztéseit, és végül a
-hfs
, amely a Mac OS(R) alatt létrehozott
HFS állományrendszerek kiterjesztéseit
engedélyezi.
A kizárólag csak FreeBSD rendszereken
használt CD-k esetében a -U
megadásával kapcsolhatjuk ki az
állománynevek mindenféle
korlátozását. Az -R
beállítás használatával olyan
állományrendszer képét hozzuk
létre, amely teljesen megegyezik a parancsban megadott
könyvtárból induló fa
tartalmával, habár több módon is
sérti az ISO 9660 szabvány
előírásait.
Az utolsó általános jelleggel
használható beállítás a
-b
. Ezzel lehet megadni az "El
Torito" szabványnak megfelelő
rendszerindító CD
készítéséhez szükséges
rendszerindító image
elérését. Ennél a
beállításnál tehát meg kell
adni a rendszerindításhoz használt lemez
image-ét, amely a CD tartalmát magában
foglaló könyvtárszerkezetben
található valahol. A mkisofs(8)
alapértelmezés szerint egy ún.
"floppy emulációs" módban
hozza létre az ISO image-et, ezért a
rendszerindításhoz használatos lemez
image-ének pontosan 1200, 1440 vagy 2880 KB
méretűnek kell lennie. Egyes
rendszerbetöltők, mint amilyen például a
FreeBSD terjesztéséhez használt lemezeken
található, nem használják ezt az
emulációt. Ilyen helyzetekben a
-no-emul-boot
kapcsolót kell megadni.
Tehát ha a
/tmp/sajátboot
könyvtárban van egy indítható FreeBSD
rendszerünk, amelyben a
/tmp/sajátboot/boot/cdboot
a rendszerindító lemez image-e, akkor egy
/tmp/indítható.iso
nevű ISO 9660 formátumú
állományrendszert tartalmazó image-et
például így tudunk
elkészíteni:
#
mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/indítható.iso /tmp/sajátboot
Miután ezt megtettük, és a
rendszermagunkban benne van az md
eszköz támogatása, csatlakoztathatjuk is az
állományrendszert:
#
mdconfig -a -t vnode -f /tmp/indítható.iso -u 0
#
mount -t cd9660 /dev/md0 /mnt
Ezután már össze tudjuk vetni az
/mnt
és
/tmp/sajátboot
könyvtárak egyezőségét.
A mkisofs(8) viselkedését több más opcióval tudjuk finomhangolni, mint például az ISO 9660 kiosztás módosítása vagy a Joliet és HFS lemezek készítése. A mkisofs(8) man oldalon mindezekről bővebben olvashatunk.
Ha ATAPI CD-írónk van, akkor a
burncd
paranccsal írhatjuk az ISO
image-et a lemezre. A burncd
az alaprendszer
része, és /usr/sbin/burncd
néven érhető el. A használata igen
egyszerű, csupán pár paramétere
van:
#
burncd -f eszköz data image.iso fixate
Ezzel a paranccsal rámásoljuk az
image.iso
állományt az
eszköz
eszközre. Az
alapértelmezett eszköz a
/dev/acd0
. A burncd(8) man
oldalán találjuk meg az írási
sebességgel, a CD írás utáni
kiadásával és az audio lemezek
írásával kapcsolatos
beállításokat.
Ha nincs ATAPI CD-írónk, akkor az
íráshoz a cdrecord
parancsot
kell használnunk. A cdrecord
nem az
alaprendszer része: vagy a sysutils/cdrtools portból vagy
a neki megfelelő csomagból kell
telepítenünk. Az alaprendszerben
végbemenő változások miatt a program
bináris változatai hibázhatnak, aminek
következtében csak
"poháralátéteket" fogunk tudni
gyártani. Ezért a rendszerrel együtt
érdemes frissíteni ezt a portot is. Vagy ha a
-STABLE verziót
használjuk, akkor mindig érdemes a port
elérhető legújabb verziójára
frissíteni.
Miközben a cdrecord
számos
paraméterrel rendelkezik, az alapvető
használata mégis egyszerűbb a
burncd
parancsénál. Egy ISO
9660 formátumú image-et ugyanis a
következő módon tudunk felírni
lemezre:
#
cdrecord dev=eszköz image.iso
A cdrecord
használatának
trükkös része a megfelelő eszköz
megtalálása, tehát a dev
beállítás helyes megadása. Ehhez
használjuk a cdrecord
-scanbus
paraméterét, amely az
alábbihoz hasonló eredményt fog
produkálni:
#
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) *
Itt felsorolásra kerülnek a dev
beállítás értékeként
felhasználható eszközök. Keressük
meg köztük a CD írónkat és a
dev
értékének a
három vesszővel elválasztott számot
adjuk meg. Ebben az esetben a CD-író eszköz
most az 1,5,0 lesz, tehát itt a helyes
paraméterezés dev=1,5,0
. Ezt az
értékét könnyebben is meg lehet adni.
Ennek részleteiről a cdrecord(1) man
oldalán olvashatunk. Abban az esetben is érdemes
fellapoznunk, ha az audio sávok
írásáról, az írási
sebesség korlátozásáról vagy
más hasonló dolgokról akarunk
olvasni.
Audio CD-t úgy tudunk másolni, ha először állományok sorozatába mentjük a lemez tartalmát, majd ezeket az állományokat egy üres CD-re írjuk. Ennek konkrét folyamata azonban némileg eltér az ATAPI- és SCSI-meghajtók használata során.
A cdda2wav
programmal mentsük le
a lemez tartalmát.
%
cdda2wav -vall -D2,0 -B -Owav
A cdrecord
paranccsal írjuk
fel a .wav
kiterjesztésű
állományokat.
%
cdrecord -v dev=2,0 -dao -useinfo *.wav
Gondoskodjunk róla, hogy a
2,0
értéket a 18.6.4. szakasz - cdrecordnak megfelelően helyesen
állítottuk be.
Az ATAPI/CAM modul
segítségével a
cdda2wav
parancs ATAPI
meghajtókkal is használható. Ez a
megoldás általában kedvezőbb (a
hibák és bytesorrend ügyesebb
kezelése, stb.) a legtöbb
felhasználó számára, mint az itt
ismertetett.
Az ATAPI CD meghajtója az egyes sávokat
/dev/acddtnn
néven teszi
elérhetővé, ahol a
d
a meghajtó
sorszáma, a nn
a
sáv két számjeggyel kiírt
sorszáma, amelyet szükség szerint
balról nullával egészítenek ki.
Így tehát az első meghajtó
első sávja a /dev/acd0t01
,
a második a /dev/acd0t02
, a
harmadik a /dev/acd0t03
és
így tovább.
Ellenőrizzük, hogy ezek az eszközök
jelen vannak a /dev
könyvtárban. Amennyiben
hiányoznának, kényszerítsük
ki a lemez újbóli
beolvasását:
#
dd if=/dev/acd0 of=/dev/null count=1
Szedjük le az egyes sávokat a dd(1) használatával. A parancs kiadásakor meg kell adnunk egy blokkméretet is:
#
dd if=/dev/acd0t01 of=track1.cdr bs=2352
#
dd if=/dev/acd0t02 of=track2.cdr bs=2352
...
A burncd
használatával
írjuk fel a lemezre az imént lementett
állományokat. Meg kell adnunk, hogy ezek
audio állományok, és hogy a
burncd
a munka befejeztével
zárja le (fixate) a lemezt.
#
burncd -f /dev/acd0 audio track1.cdr track2.cdr ... fixate
Az adatot tartalmazó CD-ket le tudjuk másolni
egy olyan image-be, amely funkcionálisan megegyezik egy
mkisofs(8) által létrehozott image-dzsel
és amivel le tudunk másolni bármilyen adat
CD-t. Az itt megadott példa azt feltételezi, hogy
a CD-meghajtónk neve acd0
.
Helyére a saját CD-meghajtónk nevét
kell behelyettesíteni.
#
dd if=/dev/acd0 of=állomány.iso bs=2048
Most miután lementettük az image-et, írjuk fel CD-re a fentiek szerint.
Most, hogy már készítettünk egy
szabványos adat CD-t, valószínűleg
szeretnénk is valamilyen csatlakoztatni és
elérni a rajta levő adatokat.
Alapértelmezés szerint a mount(8) mindig azt
feltételezi, hogy az állományrendszerek
ufs
típusúak. Ezért ha
valami ilyesmivel próbálkozunk:
#
mount /dev/cd0 /mnt
akkor egy Incorrect super block
szövegű hibaüzenetet lesz a jutalmunk, és
természetesen nem tudjuk csatlakoztatni a CD-t. Mivel a
CD nem UFS
állományrendszert
tartalmaz, ezért az ilyen jellegű
kísérleteink mind kudarcba fognak fulladni.
Valahogy fel kell világosítanunk a mount(8)
parancsot arról, hogy itt most egy
ISO9660
típusú
állományrendszert akarunk csatlakoztatni,
és akkor minden a helyére kerül. Ezt
úgy tudjuk megtenni, ha a mount(8) parancsnak
megadjuk a -t cd9660
paramétert.
Például, ha a /dev/acd0
néven elérhető CD-meghajtóban
levő lemezt akarjuk a /mnt
könyvtárba csatlakoztatni, akkor ezt kell
begépelnünk:
#
mount -t cd9660 /dev/cd0 /mnt
Vegyük észre, hogy az eszköz neve (ez ebben
a példában most /dev/cd0
)
lehet más is attól függően, hogy milyen
csatolófelületet használ a
CD-meghajtónk. Sőt, a -t cd9660
valójában csak a mount_cd9660(8) parancsot
indítja el. Ennek tükrében tehát az
előbbi példát így
rövidíthetjük le:
#
mount_cd9660 /dev/cd0 /mnt
Ezen a módon bármilyen
gyártmányú adat CD-t képesek vagyunk
csatlakoztatni. Egyes ISO 9660 kiterjesztéseket
használó lemezek azonban esetleg furcsán
működhetnek. Például Joliet lemezek az
összes állomány nevét
kétbyte-os Unicode karakterben tárolják. A
FreeBSD rendszermagja ugyan nem beszéli a Unicode-ot, de a
FreeBSD CD9660 meghajtója képes menetközben
átkonvertálni a Unicode karaktereket. Ha bizonyos
nem angol karakterek kérdőjelekként
jelennének meg, akkor a -C
beállítás használatával
még egy helyi kódlapot is meg kell adnunk. Ezzel
kapcsolatban bővebb
tájékoztatásért forduljunk a
mount_cd9660(8) man oldalhoz.
A -C
beállítás
segítségével csak akkor lesz képes
a rendszermag elvégezni ezt az
átalakítást, ha előtte
betöltjük a cd9660_iconv.ko
modult. Ezt megtehetjük úgy, hogy ha
felvesszük a következő sort a
loader.conf
állományba:
cd9660_iconv_load="YES"
Indítsuk újra a számítógépünket, vagy közvetlenül töltsük be a modult a kldload(8) használatával.
Estenként előfordulhat, hogy kapunk egy Device not configured hibaüzenetet a CD-k csatlakoztatásakor. Ez általában arra utal, hogy a CD-meghajtó nem érzékeli a berakott lemezt, vagy éppen a meghajtó nem látható a buszon. A CD-meghajtók esetében pár másodpercig eltarthat, amíg felismeri a berakott lemezt, ilyenkor mindig legyünk türelemmel.
Néha a SCSI CD-meghajtó nem látható, mert nem volt elég ideje válaszolni busz újraindítása előtt. Ha SCSI CD-meghajtónk van, akkor a következő beállítást tegyük hozzá a rendszermagunk konfigurációjához és fordítsuk újra a rendszermagukat.
options SCSI_DELAY=15000
Ezzel utasítjuk a SCSI buszunkat egy 15 másodperces várakozásra a rendszer indítása során, és így ezzel elég esélyt adunk arra, hogy a CD-meghajtó válaszolni tudjon a busz újraindítása előtt.
Írhatunk közvetlenül is állományokat a CD-re, ISO 9660 formátumú állományrendszer használata nélkül. Sokan így oldják meg a mentést. Ezt sokkal gyorsabban lebonyolítható egy szabványos CD esetében:
#
burncd -f /dev/acd1 -s 12 data archive.tar.gz fixate
Az ezen a módon megírt CD-ket szintén nyers módon kell olvasnunk:
#
tar xzvf /dev/acd1
Az ilyen lemezeket nem tudjuk a normális CD-khez hasonlóan csatlakoztatni. Sőt, az ilyen CD-ket csak FreeBSD alatt tudjuk olvasni. Ha csatlakoztathatóvá akarjuk tenni a lemezt, vagy más operációs rendszerek alól is szeretnénk olvasni, akkor erre a célra a fentebb bemutatott mkisofs(8) parancsot kell használnunk.
Ez a meghajtó lehetővé teszi az ATAPI eszközök (CD-ROM, CD-RW, DVD meghajtók stb...) számára, hogy a SCSI alrendszeren keresztül legyenek elérhetőek, így esetünkben is használhatóvá válnak olyan alkalmazások, mint például sysutils/cdrdao vagy a cdrecord(1).
A meghajtó használatához a
következő sort kell a
/boot/loader.conf
állományba
illeszteni:
atapicam_load="YES"
Indítsuk újra a számítógépet.
Amennyiben a rendszermagban az atapicam(4) statikus támogatását szeretnénk használni, úgy a következő sort kell a rendszermag konfigurációs állományába felvenni:
device atapicam
Továbbá a következő sorokra lesz még szükségünk:
device ata device scbus device cd device pass
Ezeknek már eleve ott kell szerepelnie. Ezután fordítsuk újra és telepítsük a rendszermagot, majd indítsuk újra a számítógépet.
A rendszer indulásakor az írónak ehhez hasonló módon kell megjelennie:
acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4 cd0 at ata1 bus 0 target 0 lun 0 cd0: <MATSHITA CDRW/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
A meghajtó most már elérhető a
/dev/cd0
eszközön keresztül,
és például ennyi
begépelésével csatlakoztatni tudunk
róla egy CD-t a /mnt
könyvtárba:
#
mount -t cd9660 /dev/cd0 /mnt
root
felhasználóként a következő
paranccsal tudjuk lekérdezi az író SCSI
címét:
#
camcontrol devlist
<MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (pass0,cd0)
Eszerint a 1,0,0
lesz az eszköz SCSI
címe, amelyet a cdrecord(1) és más
SCSI alkalmazások esetén adunk meg.
Az ATAPI/CAM és SCSI rendszerek tekintetében olvassuk el az atapicam(4) és cam(4) man oldalakat.
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.