Portál AbcLinuxu, 24. dubna 2024 01:28

Vypalování CD - IV

25. 2. 2003 | Robert Krátký
Články - Vypalování CD - IV  

Multisession a CD Extra/CD Plus. Zápis na přepisovatelná CD (CD-RW) a Packet Writing.

Stejně jako Juraj Remenec v předchozím díle, i tentokrát vás musím upozornit, že se stále ještě budeme věnovat klasickému přístupu k pálení pod Linuxem pomocí nástrojů pracujících na příkazové řádce. Velké množství imperativů typu "musíte", "nesmíte", "nelze" a podobně bude v dalším pokračování, které se bude věnovat grafickým nástavbám, vyvráceno nebo alespoň zmírněno.

Multisession

Vypalování CD jako multisession nám umožňuje zaplňovat kapacitu prázdného média postupně. Není tedy nutné najednou shromažďovat takový objem dat, který zaplní celé CD, a nebo se spokojovat s nevyužitým prostorem, který by vyšel nazmar. CD můžeme vypálit naněkolikrát, přičemž veškerá data budou v mezičase stále k dispozici. Tento způsob, ač zcela jistě efektivnější než vytváření zpola zaplněných disků, má dva mínusy.

Dále je třeba pamatovat na to, že ačkoliv většina vypalovaček dnes multisession podporuje, ke správnému přečtení je nutné, aby tento formát podporovala i mechanika, na které bude CD čteno. U počítačových CD-ROM, jež nejsou starší než 3-4 roky, by opět neměl být problém. Ale vypálíte-li tímto způsobem audio CD, počítejte s tím, že naprostá většina stolních CD přehrávačů "uvidí" pouze první vypálenou relaci.

Připočteme-li ke zmíněným dvěma věcem fakt, že prázdná CD jsou již dnes opravdu nehorázně levná, je na místě otázka, zda vůbec má cenu se tímto problémem zabývat. Po pravdě řečeno, myslím, že nemá. Tento návod by se však sotva dal považovat za úplný, kdyby v něm tyto informace chyběly. Pojďme se tedy prokousat vytvořením multisession CD pomocí mkisofs a cdrecordu.

Předně je nezbytné už při vypalování úvodní relace cdrecordu říci, že hodláme někdy později ještě pokračovat. K tomu slouží parametr -multi. Tento parametr také automaticky nastaví druh stopy na "CD-ROM XA2" (viz první díl seriálu). Příkaz pro vypálení první session tedy může vypadat třeba takto:

cdrecord -v speed=10 dev=0,0,0 -eject -multi prvni.iso

Na tomto místě ještě musím zmínit, že při vytváření image souborů pro multisession disky, je nutné začlenit RockRidge rozšíření (přepínač -r). Pokračovat ve vypalování multisession disku, který obsahuje pouze Joliet, není možné.

Další image soubor už musí být ušit na míru načatému CD. Necháme tedy cdrecord zjistit, jak to na disku vypadá, abychom podle toho mohli instruovat mkisofs, že druhý image soubor bude na CD umístěn jinde než na začátku. S diskem v mechanice proveďte:

cdrecord -msinfo dev=0,0,0

Výstupem budou dvě čísla, která odpovídají prvnímu sektoru poslední relace na CD (v našem případě by to měla být 0, protože se jedná o první session) a prvnímu volnému sektoru, na který lze zapisovat. Toto druhé číslo by se mělo rovnat počtu zapsaných sektorů z prvního vypalování (viz výpis cdrecordu) plus 11400 (11250 lead-in a lead-out + 150 pre-gap).

Připravíme image soubor pro zápis druhé session. Programu mkisofs musíme říci, kde hledat původní session, na kterou se má navazovat, a zároveň její přesné umístění, jež nám před chvílí prozradil cdrecord. Použijeme pro ten účel parametry -M (cesta k předchozí session) a -C (parametry cdrecordu):

mkisofs -r -J -l -C hodnota,hodnota -M zařízení -o druha.iso adresar

Pokud je na CD zatím jen jedna session, můžeme využít toho, že ještě máme její původní image soubor, a parametru -M předat cestu k němu: -M prvni.iso.

Vězte také, že takto vytvořený image soubor nelze zkontrolovat namountováním pomocí loopbacku, jak to popisoval minulý díl seriálu. Důvodem je právě ona úprava pro zápis jinam než na počátek disku. Pokud byste chtěli docílit možnosti připojit na zkoušku tento soubor coby loopback zařízení, bylo by nutné znovu jej vytvořit jinak. Parametr -C by měl hodnotu -C číslo,0, přičemž číslo by bylo první numero vrácené cdrecordem při spuštění s parametrem -msinfo. V našem příkladu by to bylo: -C 0,0.

A jdeme vypálit druhou session. Příkaz bude - až na název souboru - totožný s vypalováním 1. relace:

cdrecord -v dev=0,0,0 -eject -multi druha.iso

Tímto způsobem můžeme pokračovat dokud bude na disku místo...

CD Extra/CD Plus

CD Extra a CD Plus jsou dva názvy pro stejnou věc. Jedná se o multisession disk, který má první relaci audio a druhou datovou. Původně byla tato CD nazývána E-CD (Enhanced CD), což byla takzvaná "stamped multisession" (lisovaná). Využívalo se jich v době vzrůstající popularity počítačových CD-ROM mechanik jako vylepšení komerčních zvukových kompaktních disků. Formát CD Extra nám dává možnost si podobnou věc udělat i doma. Hlavním rozdílem a předností oproti mixed mode diskům (audio i datové stopy v jedné session) je především větší kompatibilita se stolními CD přehrávači. Druhou, datovou session totiž tyto přístroje vůbec nevidí, a proto se nemůže stát, že by došlo třeba k poškození reproduktorů při pokusu o "přehrání" datové stopy.

Postup bude téměř stejný jako u obyčejného multisession CD. Nejprve vypálit audio stopy (je možné použít TAO i DAO) s parametrem -multi, vytvořit speciální multisession image pro druhou, datovou session a vypálit opět s parametrem -multi:

cdrecord dev=0,0,0 -v -eject -dao -multi -audio audio_soubor1 audio_soubor2
cdrecord -msinfo dev=0,0,0
mkisofs -r -J -l -C 0,?????? -M zařízení -o data.iso adresar
cdrecord dev=0,0,0 -v -eject -multi data.iso

CD-RW

Vypalování na přepisovatelná média musí mechanika podporovat. U naprosté většiny dnešních vypalovaček je to však samozřejmost. Pokud si přejete použít přepisovatelné CD stejným způsobem jako běžné CD-R, nic vám nebrání a jediná věc, kterou je nutno zmínit, je mazání médií. Aby bylo CD-RW připraveno pro další použití, použijte s cdrecordem příkaz blank. Zkusíte-li

cdrecord blank=help

vypíše cdrecord možné operace, které lze se zaplněným médiem provést. Nejčastěji asi využijete volby all nebo session, jejichž funkce je zřejmá.

Packet Writing

Packet Writing je metoda záznamu na CD-R nebo CD-RW, která umožňuje používat vypalovačku jako harddisk (dost pomalý harddisk...;) nebo třeba Floppy či ZIP disketovou mechaniku. Tedy zapisovat data po mnoha částech místo jako jeden blok (DAO) nebo po částech určených stopami (TAO). Není však pravidlem, že každá vypalovačka, která zvládá zapisovat na CD-RW, dokáže také Packet Writing. Avšak opět platí, že u relativně nové (98 a později) se nespálíte.

Vzhledem k tomu (nejen), že tento způsob je realizován pomocí souborového systému UDF (Universal Disk Format), pro který zatím Linux nemá uspokojivou podporu, bude třeba se kvůli jeho zprovoznění vydat trochu komplikovanější cestou. Přestože cdrecord i jeho bratříček dvdrecord umožňují vypalovat image soubory s tímto formátem (především kvůli DVD), aby bylo možné prostě namountovat CD a kopírovat na něj soubory jako na každý jiný disk, je nutno podporu dostat i do jádra. Podívejme se tedy jak na to.

Začneme zazáplatováním kernelu. Jens Axboe, který má na svědomí většinu pokroku ohledně IDE, ATAPI a podobných věcí ve vývoji jádra, dal dohromady patch pro jádra 2.4.19 a 2.4.20 (starší jsou k dispozici, ale nezdají se být moc updatovány), jež obsahuje jednak podporu pro packetové zapisování (zatím pouze pro přepisovatelná CD-RW média) a rovněž novou verzi ovladače pro UDF filesystém od Linux UDF projektu. Pokud tedy chcete experimentovat, doporučuji použít nejnovější verzi patche (2) a tudíž i jádro 2.4.20 (s pár změnami by pravděpodobně šel aplikovat i na 2.4.21-pre4, ale rovnou se nechytil a dál jsem to nezkoumal...).

Patch předpokládá, že adresář se zdroji kernelu se bude jmenovat linux-packet. Po té, co soubor s patchem umístíme do adresáře, kde je i adresář s kernelem, tedy provedeme:

ln -s linux-2.4.20 linux-packet
bzcat packet-2.4.20-2.patch.bz2 | patch -p0 > log

Prohlédneme soubor log a přesvědčíme se, jestli všechno proběhlo v pořádku. Pokud ano, můžeme se pustit do konfigurace (a kompilace) kernelu. Při make config/menuconfig/xconfig nás budou zajímat především následující volby:

Konfigurace jádra - Packet Writing
Položka v jádře Volba kompilace
Block devices
    Packet writing on CD/DVD media Y/M
File systems
    UDF file system support (read only) Y/M
       UDF write support (DANGEROUS) Y

Po úspěšné kompilaci, instalaci a rebootu (což ovšem předpokládá, že to nebudete, jako já, dělat ve tři hodiny ráno, kdy jsem si omylem vypnul při konfiguraci podporu ELF binárek...;) ještě budeme potřebovat zkompilovat (a nainstalovat) balíček programů udftools, který nám poskytne později důležitý program cdrwtool. Pak už stačí jen provést několik jednoduchých kroků tak, jak jsou popsány na (asi opuštěné) stránkce projektu packet-cd. Ve zkratce:

Pokud jste kompilovali podporu UDF a Packet Writing jako moduly, použijte třeba příkaz insmod k jejich natažení (tj. např.: insmod udf) - a nebo ještě lépe do souboru modules.conf přidejte řádek alias block-major-97 pktcdvd. Pak je třeba CD-RW disk naformátovat, což je vpravdě otravný proces. Manuálová stránka man cdrwtool je sice ukázkou stručnosti, ale hned zpočátku nám řekne, co chceme vědět. Totiž že příkaz

cdrwtool -d zařízení -q

disk vymaže, zformátuje a vytvoří na něm UDF (přičemž zařízení je samozřejmě umístění vaší vypalovačky - např.: /dev/scd0 -- ale vše funguje i při použití "ide-cd" ovladače, SCSI emulace není nutná). Dále vytvoříme packetové zařízení příkazem

mknod /dev/pktcdvd0 b 97 0

a přiřadíme jej k vypalovačce:

pktsetup /dev/pktcdvd0 zařízení

(po každém restartu je třeba provést znovu - Richard Downing připravil jednoduchý skriptík, který se, pokud jej strčíte do init.d, postará o právě popsané kroky při každém startu systému). A je to. Jestliže vše proběhlo hladce, měli byste mít možnost běžným příkazem mount připojit prázdné přepisovatelné CD a kopírovat na něj data (např.: mount /dev/pktcdvd0 /cdrw -t udf -o rw,noatime). Buďte však připraveni na občasná výrazná zpomalení systému (nejen) při zapisování (noatime vše nespasí...), "umountování" může také zabrat nepřiměřeně dlouho; prostě ještě není všechno úplně bez chybiček...

CD-MRW

Zkratka MRW (Mount Rainier reWritable) označuje relativně nový standard zápisu na CD-RW, který je významným vylepšením Packet Writing. Ačkoliv Mt. Rainier také používá druh paketového zápisu, není zde nutnost zdlouhavého formátování (které jste si mohli na vlastní kůži vyzkoušet, pokud se vám podařilo zprovoznit pktcdvd v předchozím odstavci...). Respektive, formátování probíhá zároveň se zápisem na pozadí, takže téměř vůbec nezdržuje. Kromě toho lze použít jakýkoliv souborový systém, nejsme omezeni pouze na UDF. Špatná zpráva je, že MRW nepodporuje spousta vypalovaček. Bližší informace o MRW viz Mount Rainier FAQ a Yamaha support.

Podporu pro Linux napsal pro změnu Jens Axboe. Nicméně, vzhledem k tomu, že moje mechanika patří k těm starším, tak nemá podporu Mt. Rainier. DVD vypalovačku, kterou jsem měl tu příležitost nějakou dobu používat (a která MRW podporu měla - tedy aspoň myslím...), už také bohužel nemám, takže nemohu z první ruky poreferovat o tom, jak si tento linuxový ovladač stojí. Připadá mi, že by bylo zbytečné a především trochu nefér, kdybych přepisoval cizí zkušenosti, a proto na tomto místě poskytnu pouze odkazy, jež by vám mohly usnadnit práci, budete-li se chtít poprat s touto záležitostí.

Jak jsem předeslal na začátku, příští díl seriálu už bude konečně trošku barevnější, protože se budu věnovat grafickým front-endům pro programy, které jsme popisovali v tomto a předchozím díle. Pokud se v Linuxu teprve rozkoukáváte, a tyto dva díly na vás tedy fungovaly jako spolehlivý repelent, počkejte se soudem na příští týden.

Související články

Vypalování CD - I (Úvod, teorie, hardware)
Vypalování CD - II (Nastavení SCSI emulace)
Vypalování CD - III (mkisofs, cdrecord, cdrdao)
Vypalování CD - V (Grafické nástavby)
Vypalování CD - VI (FAQ)

Odkazy a zdroje

Linux UDF
CD Packet Writing Support for Linux
lists.suse.com: packet-writing
Mount Rainier FAQ
The Linux Kernel HOWTO

Seriál Vypalování CD (dílů: 6)

První díl: Vypalování CD - I, poslední díl: Vypalování CD - VI.
Předchozí díl: Vypalování CD - III
Následující díl: Vypalování CD - V

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.