A CD-írás két lépésből áll Linux alatt:
cdrecord
segédprogram segítségévelEz a fejezet részletesen tárgyalja az adat és audio CD készítésének lépéseit.
Megjegyzendő, hogy a felírandó adatok összegyűjtése általában több időt vesz igénybe, mint az ember gondolná. Ne feledd, a hiányzó fájlokat nem lehet hozzáadni a CD-hez az írás és a lezárás után.
Szintén tartsd észben, hogy a CD-n bizonyos terület az ISO-9660 fájlrendszer információi számára használódik el, ez általában néhány MB. 620 MB adat mindig elfér egy 650 MB-os CD-n.
Használat előtt bármilyen adattároló médiumot (pl. hajlékony lemez, merevlemez, CD) fájlrendszerrel kell ellátni (DOS-osan fogalmazva: formázni). A fájlrendszer felelős az adathordozón elhelyezett fájlok szervezéséért és tárolásáért.
A szokásos segédprogramok, amelyek merevlemezek partícióin hoznak létre fájlrendszereket, úgy járnak el, hogy egy üres fájlrendszert hoznak létre, amelyet csatolás után a felhasználó tölthet fel fájlokkal, szükség szerint. Az írható CD csak egyszer írható, ezért ha egy üres fájlrendszert hoznánk létre rajta, akkor ugyan meg lenne formázva, de egyszer és mindenkorra üres maradna. Ez az újraírható nyersanyagra is igaz, nem törölhesz tetszőleges szektorokat, mindig az egész tartalmat le kell törölni.
Ezért szükség van egy olyan segédprogramra, amely a fájlrendszer létrehozása közben
másolja fel a fájlokat a CD-re. Ez a program az mkisofs
. Egy példán bemutatva a használatát:
mkisofs -r -o cd_image magangyujtemeny/
`---------' `--------------'
| |
a kimeneti fájl ezt a könyvtárat veszi forrásnak
A `-r
' kapcsoló hatására az összes fájl mindenki számára olvashatóvá
válik a CD-n, valamint RockRidge kiterjesztéssel készül az image.
Valószínűleg mindig akarod ezt a kapcsolót, kivéve ha tényleg tudod, hogy mit csinálsz.
(Segítség: az `-r
' kapcsoló nélkül a csatolási pont a
magangyujtemeny
engedélyeivel fog rendelkezni!)
Az mkisofs
megpróbálja az összes fájlnevet a DOS által használt 8.3 alakra
leképezni, a lehető legnagyobb kompatibilitás érdekében. Névütközés esetén
(különböző fájloknak ugyanaz a 8.3 neve), számokat használ a fájlnevekben, és a
választott neveket kiírja a standard hibakimenetre, ami általában a képernyő.
Ne aggódj, Linux alatt sosem fogod látni ezeket a 8.3 fájlneveket, mert a Linux
használja a RockRidge kiterjesztést, amely tartalmazza az eredeti fájlinformációkat
(engedélyek, fájlnév, stb.).
Felvetődhet a kérdés, hogy miért nem küldi az mkisofs
közvetlenül az
íróra a kimenetet. Három oka van:
mkisofs
nem tud semmit a CD-írókról.Van egy módszer, amellyel egy menetben írhatunk CD-t, ez lejjebb kerül kifejtésre.
Az ember gondolhatna arra is, hogy csinál egy extra partíciót, és oda írja az image-et egy fájl helyett. Nem javaslom ezt a megoldást, mert ha nem a megfelelő partícióra írsz (egy elgépelés miatt), akkor az egész Linux rendszered megsemmisülhet (értsd: az enyém egyszer megsemmisült így...). Ráadásul ez helypazarlás is, mert a CD image ideiglenes, le lehet törölni az égetés után. A nyers partíció alkalmazásának egyetlen előnye, hogy megtakarítod a 650 MB-os ideiglenes fájl letörlésével járó időt.
A Linux képes a fájlrendszeréhez úgy csatolni fájlokat, mintha azok partíciók lennének a lemezen. Ez a sajátosság igen hasznos, mert ellenőrizheted, hogy a CD image-en levő fájlok könyvtárstruktúrája és engedélyei megfelelnek-e az elképzeléseidnek. Bár a nyersanyag ma már nagyon olcsó, az írás művelete még elég lassú. Egy gyors ellenőrzéssel időt spórolhatsz.
A cd_image
fájl csatolása a /cdrom
könyvtár alá a következő paranccsal történhet:
mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom
Ezek után megvizsgálhatod a fájlokat a /cdrom
alatt -- úgy fognak
megjelenni, ahogy az igazi CD-n. A CD image lecsatolásához add ki az
`umount /cdrom
' parancsot. (Vigyázat: a 2.0.31 előtti Linux kernelekben
van egy hiba, emiatt az utolsó fájl a /cdrom
könyvtárban nem lesz teljesen
olvasható. Használj egy újabb kernelt, mondjuk a 2.0.36-ost. A cdrecord
program
-pad
kapcsolója csak audio CD-kre használható, és az mkisofs
program
-pad
kapcsolója csak egy folt alkalmazása után használható. A foltozás ugyanakkora
munka, mint a frissítés egy hibátlan kernelre.)
Megjegyzés:
Amount
egyes ősi verziói nem képesek kezelni a loopback eszközt. Ha te is ilyen régimount
-tal rendelkezel, akkor frissítsd a Linuxodat. Sok ember javasolta már, hogy írjam bele ebbe HOGYAN-ba a legújabb mount csomag fellelhetőségét. Ezt mindig visszautasítom. Ha a Linux disztribúciód az ősimount
programot használja, jelentsd hibaként. Ha a Linux disztribúciódat nehéz frissíteni, jelentsd hibaként. Ha minden olyan információt felsorolnék, ami ahhoz kell, hogy a rosszul tervezett Linux disztribúciók hibáit ki lehessen javítani, akkor ez HOGYAN sokkal nagyobb és nehezebben olvasható lenne.
Már nics hátra sok tennivaló. Ha még nem próbáltad, itt a remek alkalom a
cdrecord -scanbus
parancs kiadására. Ebből megtudhatod, hogy melyik SCSI eszközre csatlakozik a
CD-író. Vannak más módszerek is, hogy megszerezd azt az információt, amelyet
a cdrecord
ilyen szépen kiír, de ezeket kivettem a HOGYAN-ból (különösen
az általános SCSI eszközök veszélyes elnevezési sémáját).
Mielőtt megmutatnám az utolsó parancsot, hadd figyelmeztesselek, hogy a CD-írókat állandó adatfolyammal kell táplálni, mert kicsi az adatbufferük. Tehát a CD image CD-re írását nem szabad megszakítani, különben rossz lesz a CD. Nagyon könnyű megszakítani az adatfolyamot egy nagy fájl letörlésével. Például, ha törölsz egy régi 650 MB-os image fájlt, akkor a kernelnek 650.000 blokk információit kell frissítenie (feltéve, hogy 1 kilobájtot foglal el egy blokk a fájlrendszeren). Ez némi időt vesz igénybe, nagyon valószínű, hogy annyira lelassítja a lemezműveleteket, hogy az adatfolyam megszakad egy pár másodpercre. Ellenben a levelek olvasása, a web böngészése, sőt még a kernelfordítás sem befolyásolja az írási folyamatot (a modern gépeken).
Jegyezd meg, hogy egyetlen író sem képes a lézert arra a helyre pozícionálni, ahol megszakadt az írás egy zavar miatt. Ezért bármilyen erős rázkódás vagy más mechanikai hatás nagy valószínűséggel tönkreteszi a CD-t, amit éppen írsz.
Ha lélekben elkészültél, ölts fel egy fekete köntöst, szorozd meg a CD-író SCSI-id-ját a SCSI-revision értékével, és gyújts annyi gyertyát, mondj el fennhangon két versszakot az ASR-FAQ-ból (alt.sysadmin.recovery hírcsoport), és végül írd be:
shell> SCSI_BUS=0 # a 2.1. listáról véve: "scsibus0:"
shell> SCSI_ID=6 # a 2.1. listáról véve: "TOSHIBA XM-3401"
shell> SCSI_LUN=0
shell> cdrecord -v speed=2 dev=$SCSI_BUS,$SCSI_ID,$SCSI_LUN \
-data cd_image
# ugyanaz, mint fenn, csak rövidebben:
shell> cdrecord -v speed=2 dev=0,6,0 -data cd_image
A jobb olvashatóság kedvéért az író koordinátái három környezeti változóban
tárolódnak, amelyek a következők: SCSI_BUS, SCSI_ID, SCSI_LUN.
A -data
kapcsolót nem kötelező megadni, csak azért írtam ki mégis, hogy
a parancssor jól összevethető legyen az audio CD-hez használatos parancssorral.
Ha a cdrecord
-ot egy CD-RW lemez újraírásához használod, hozzá kell tenned
a blank=...
opciót, hogy a régi tartalom letörlődjön. Olvasd el a kézikönyvoldalt,
ott több módját is tárgyalják a CD-RW letörlésének.
Mostanában, amikor rajtam kívül mindenkinek 400 MHz-es gépe van, az emberek
az mkisofs
kimenetét közvetlenül a cdrecord
-ra irányítják:
shell> IMG_SIZE=`mkisofs -R -q -print-size magangyujtemeny/ 2>&1 \
| sed -e "s/.* = //"`
shell> echo $IMG_SIZE
shell> [ "0$IMG_SIZE" -ne 0 ] && mkisofs -r magangyujtemeny/ \
|cdrecord speed=2 dev=0,6,0
tsize=${IMG_SIZE}s -data -
# ne feledd az s-t --^ ^-- az STDIN-ről olvas
Az első parancs egy üres menet, amely meghatározza az image méretét (a cdrecord
disztribúcióhoz adott mkisofs
kell ehhez a feladathoz). Elképzelhető,
hogy a te íródnak nem kell tudni a felírandó image méretét, úgyhogy ezt a sort akár el is
hagyhatod. Az image méretét a tsize
paraméterben kell megadni a cdrecord
-nak,
ez az IMG_SIZE környezeti változóban tárolódik. A második parancs az mkisofs
és a
cdrecord
egymásutánja egy csővezetékkel összekötve.
Az audio CD írása hasonlít az adat CD-nél megismert folyamathoz. Két jelentős különbség van. Az egyik, hogy az audio CD hangsávokból áll, amelyek külön-külön image-ekben vannak. Tehát ha tíz számot szeretnél felvenni a CD-re, akkor tíz image-et kell készítened. A másik különbség, hogy az image-ek formátuma nem ISO-9660 (vagy amelyik fájlrendszert szereted), hanem ``16 bites sztereó hangminta PCM kódolással 44100 minta/másodperc mintavételezéssel (44,1 kHz)''.
Az egyik segédprogram, amely hangfájljaidat a kívánt formátumra alakítja,
a sox
. Használata egyszerű:
shell> sox killing-my-software.wav killing-my-software.cdr
Ez a parancs a killing-my-software című dalt WAV formátumról CDR audio formátumra
konvertálja. További részletek a sox
által ismert formátumokról és
fájlnév-kiterjesztésekről a sox
kézikönyvoldalán olvashatóak.
Mivel a konverzió eredménye túl sok lemezhelyet foglal, beépítették azt a
sajátosságot a cdrecord
-ba, hogy közvetlenül kezelje a WAV és AU
formátumokat. Így aztán ha a hangfájljaidnak .wav vagy .au kiterjesztése van
(és a mintavétel ``sztereó, 16 bit, 44,1 kHz''), akkor használhatod image-ként
őket manuális konverzió nélkül.
A cdrecord
akkor írja fel az image-eket hangsávként, ha a -audio
kapcsolót adod meg. A többi paraméter megegyezik az adat CD írásánál
használtakkal (hacsak nincsenek különös igényeid). A következő három példa
ugyanazt csinálja, de különféle formátumokból olvassák a hangsáv adatait:
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...
Van egy érdekes eset, az MPEG Layer 3 fájlok, amelyeket az `mpg123 -s track1.mp3 > track1.cdr
'
paranccsal lehet CD formátumúra hozni. (Vigyázat: ez olyan fájlt hoz létre, amelynek a bájtsorrendjét
meg kell fordítani a -swab
kapcsolóval a cdrecord
parancssorában.)
A másik irányú konverzió a 8hz-mp3
programmal valósítható meg. Szedd le a
WAV fájlt a CD-ről a cdda2wav
programmal, és utána alakítsd MP3 formátumra a
8hz-wav
programmal. (A témáról bővebben lásd: MP3 HOGYAN -- a ford.)
Egy halom MP3 fájlból így kell audio CD-t csinálni:
for I in *.mp3
do
mpg123 -s $I | cdrecord -audio -pad -swab -nofix -
done
cdrecord -fix
A géped sebességétől függően esetleg le kell csökkentened az írási
sebességet a speed=1
paraméterrel a cdrecord
parancssorában.
Ha a speed=4
paramétert használod, akkor a gépednek le kell tudni játszani az
MP3 fájlokat négyszeres sebességgel. Az mpg123
rengeteg CPU időt fogyaszt!
Ha nem vagy benne biztos, futtass egy üres menetet a -dummy
kapcsolóval (nem
kapcsolja be a lézert). Ha így teszel, egy olyan audio CD-t kapsz, amelyen minden
szám között két másodperc szünet van.
Ha szeretnél megszabadulni a zeneszámok közötti szünetektől, akkor DAO
(disk-at-once) módban kell írni a CD-t a fent ismertetett TAO (track-at-once) mód
helyett. Jelenleg a cdrdao
program támogatja a legjobban a DAO
módot. Nézd meg a honlapját a részletekért.
A read-cd
paraméter használatával akár még egy az egyben is másolhatsz
audio CD-ket.
Nem érdemes túl sok szót vesztegetni erre a témára. Add meg az egymás után következő
image-ek típusát a -data
és a -audio
kapcsolókkal. Példa:
cdrecord -v dev=0,6,0 -data cd_image -audio track*.cdr