Portál AbcLinuxu, 6. května 2025 23:15
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.
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 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
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 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...
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.
co se tyce vypalovani v 'mode 2', castecne jsem to zminil - parametr '-multi' automaticky prepne na 'cdrom xa2' (a tedy mode 2). pokud chcete vypalovat bezne CD v mode 2 (nasobky 2048 bytu), pouzijte proste parametr '-mode2', pripadne jeste mrknete na '-xa1' a '-xa2'.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.