Několik poznámek na úvod:
- Podpora je zatím pouze pro přepisovatelná média (CD-RW), což má jednu moc pěknou výhodu: po smazání dat z média jsou uvolněny i alokované bloky, takže na médiu „přibyde“ místo. :)
- Pro zápis budete potřebovat CD recordér s možností zápisu na CD-RW a podporou tzv. packet writing (většina moderních vyhovuje).
- UDF filesystém lze číst i na „obyčejné“ CD-ROM mechanice, ta ovšem musí mít podporu pro čtení médií vytvořených přes packet writing (což lze logicky předpokládat) – opět vyhoví většina moderních „drajvů“.
- Protože každá sranda něco stojí, naformátované médium nebude mít kapacitu 650 MB, ale přibližně 530 MB (zbytek „sežere“ UDF struktura). Trochu smutné, ale co se dá dělat, je to pořád leší než přenášet data na šesti ZIPkách. :)
- Pro zprovoznění UDF zápisu je potřeba základních znalostí práce s Linuxem, jako je například kompilace jádra, takže není určen úplným začátečníkům.
- Jelikož se bude „záplatovat“ kernel, je dobré si ho zazálohovat pro případ, že něco nevyjde.
- Postup je popsán pro kernel 2.4.18, ale měl by fungovat obecně pro jakékoliv 2.4.x, záleží na „záplatách“, které aplikujete (mohl by fungovat i pro ostatní verze kernelu, ale s tím asi budete mít víc práce…)
- Nevím, přes jaký filesystém je realizovám packet writing na M$ Windows, takže nezaručuji, že zformátované disky budou přenositelné mezi platformami. Nicméně existuje driver, který do woken přidá podporu čtení disků naformátovaných na UDF z Linuxu.
Postup (rychlý a bez omáčky):
- Stáhnout UDF tools, doporučuji verzi 0.9.5 (udf-0.9.5.tar.gz), dobrodruzi (jako já :) mohou zkusit nějakou betu od verze 1.0.0 (aktuálně udftools-1.0.0b2.tar.gz).
- Pokud jste konzervativně zvolili 0.9.5, doporučuji stáhnout aktualizaci cdrwtool (.c a .h) – odstraní chybu se špatným určením velikosti média (není nutné, ale budete muset zadávat velikost média ručně). Updatovat je možno i přes CVS.
- Stáhnout záplatu pro jádro 2.4.18 (ale jsou tam i další).
- Aplikovat záplatu (např. v adresáři, kde máte zdrojáky kernelu i rozbalenou záplatu patch -p0 <packet-2.4.18.patch)
- Nakonfigurovat kernel (make xconfig), v Block devices zvolit „packet writing on cd/dvd media – module“ a „enable write caching – no“. V sekci File systems „UDF file system suport – module“ a „UDF write support – yes“.
- Překompilovat kernel (make dep; make bzImage; make modules; make modules_install) + nabootovat nový kernel.
- Rozbalit stažené UDF tools (u verze 0.9.5 nahradit zdrojáky cdrwtools novějšími z cvs). Zkompilovat, pro 0.9.5 make tools (make install nemá cenu, protože na tools nemá vliv, přeložené binárky si musíte někam ručně zkopírovat – doporučuji adresář /usr/local/bin/), pro 1.0.0 ./configure; make; make install.
- Vložit CD-RW médium do mechaniky (bude vymazáno) a dát cdrwtool -d /dev/[recorder] -q (a pravděpodobně i -t [rychlost], cdrwtool zatím nemá autodetekci maximální bezpečné rychlosti média). Pokud hlásí „set options“, něco je špatně, mně pomohlo médium vymazat (něco jsem na něm měl). Program sám si médium maže, ale quick setup (-q) asi nefunguje zcela dokonale.
Pokud bude všechno ok, vysype se na vás něco podobného:using device /dev/writer setting speed to 8 1270KB internal buffer setting write speed to 8x Settings for /dev/writer: Fixed packets, size 32 Mode-2 disc I'm going to do a quick setup of /dev/writer. The disc is going to be blanked and formatted with one big track. All data on the device will be lost!! Press CTRL-C to cancel now. ENTER to continue.
a po ENTERu
Initiating quick disc blank Disc capacity is 273824 blocks (547648KB/534MB) Formatting track
- Počkat cca 20 minut, než se médium naformátuje (na 8 speed médiu). Konec určitě nepřehlédnete, v terminálu se objeví přiřazení sektorů či bloků (nebo co to vlastně je :)
- Reloadnout médium.
- Pomocí chkudf [device] lze vypsat spoustu (zbytečných) informací o UDF filesystému.
- Pokud neexistuje /dev/pktcdvd0, vytvořit ho (mknod /dev/pktcdvd0 b 97 0)
- Nastavit recorder – pktsetup /dev/pktcdvd0 /dev/[recorder]. Pokud píše: „open packet device: No such device or address“, nahodit modul pktcdvd – modprobe -v pktcdvd. Dobré je přidat do /etc/modules.conf řádku alias block-major-97 pktcdvd a zajistit tak autoload modulu.
- Přimountovat UDF CD (mount /dev/pktcdvd0 /mnt/[mountpoint]) a můžete začít vesele zapisovat… :)
Jak si trochu ulehčit život:
Následující věci by vám mohly trochu ulehčit práci, nicméně netvrdím, že jsou elegantní a jednoduché. Pokud někdo máte nějaký nápad na zlepšení, do diskuse s ním…
- Do /etc/fstab je dobré přidat si něco ve smyslu /dev/pktcdvd0 /mnt/packet udf noauto,users 0 0 (adresář /mnt/packet by měl existovat). Problém zatím je, jak docílit spuštění pktsetup při mountování. Šlo by sice vytvořit /sbin/mount.udf a tam udělat pořebné kroky, ale není to bez problémů. Taky nevím, jestli přiřazení aktivní po pktsetup nebude způsobovat problémy při normálním vypalovaní (nutno vyzkoušet).
- Zatím mám definované aliasy cdmp=‚pktsetup /dev/pktcdvd0 /dev/writer;mount /mnt/packet‘ a cdup='umount /mnt/packet;pktsetup -d /dev/pktcdvd0. To taky není zcela ideální, zvláště v případě, že umount skončí s chybou…
- Pokud budete chtít přimountovat UDF CD v normální CD-ROM, je třeba buď mountu definovat filesystém (-t udf), nebo si do /etc/fstab u /dev/cdrom k iso9660 přidat ještě udf (oddělené čárkou), případně iso9660 nahradit za auto a do /etc/filesystems přidat udf za iso9660 (na samostatný řadek). Problém tohoto řešení spočívá v tom, že nebudete moci použít paremetry, které zná iso9660, ale udf nikoliv (např. mode).
A to by pro dnešek už snad mohlo stačit. :)
Na závěr bych rád poděkoval PaVLovi za nasměrování, několik skvělých nápadů a morální podporu.