Következő Előző Tartalom

3. CD-égetés

A CD-írás két lépésből áll Linux alatt:

Ez a fejezet részletesen tárgyalja az adat és audio CD készítésének lépéseit.

3.1 CD-ROM készítés (csak adat)

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.

A leendő CD-ROM image-ének elkészítése

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:

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 CD image tesztelése

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:

A mount egyes ősi verziói nem képesek kezelni a loopback eszközt. Ha te is ilyen régi mount-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 ősi mount 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.

A CD image CD-re írása

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.

3.2 Audio CD írása

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.

DAO

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.

3.3 Vegyes módú CD-ROM-ok

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


Következő Előző Tartalom