[precedente] Comp. GNOME - Copertina - AWK [successivo]


OPEN

Creare CDROM

Questa è la seconda puntata della serie di articoli sulla creazione di CDROM. Vediamo qui la preparazione di CDROM dati partendo dai file sul disco fisso o in copia da un altro CDROM.

Creare le immagini ISO9660

Per creare un CDROM dati è necessario che questi siano organizzati in un filesystem. Un filesystem è una struttura che raccoglie file e directory e li rende disponibili al sistema (e quindi all'utente).

ISO9660 è il filesystem più usato per i supporti CDROM, ed ha parecchi vantaggi, tra cui:

Ma un CDROM dati può usare anche altri filesystem (tipo ext2 se volete un CD leggibile solo da Linux, o comunque difficilmente leggibile sotto altri sistemi operativi; hfs usato in parecchi CDROM per Macintosh, o direttamente file archivio, tar).

La creazione di un filesystem ISO9660 è compito di un programma specifico. Essendo l'ISO9660 un filesystem in sola lettura, questo programma fotografa lo stato di una parte esistente di disco e crea un file unico di grosse dimensioni con tutto il contenuto che dovrà essere scritto su CD.

Il programma in questione si chiama mkisofs, anche se il nome è improprio (infatti non crea un nuovo filesystem su cui inserire file, ma un filesystem completo di file e non più modificabile). Una volta generato il filesystem ISO9660 non è più possibile aggiungere altri file. Se non è ancora stato scritto su CDROM bisogna rifare l'immagine iso9660, se invece è già stato masterizzato è possibile creare un nuovo filesystem iso9660 che si appoggi alla traccia già scritta su CD per i file già masterizzati (CD multisessione).

Il risultato di mkisofs è un file, grande quanto tutti i dati da scrivere nel CD (più informazioni varie e la tabella di allocazione), che può essere scritto direttamente su una partizione fisica di un disco fisso.

Una volta si scriveva direttamente su una partizione perché così era più semplice montare il filesystem ISO9660 nel sistema tramite un semplice comando mount (per verificarne il contenuto), inoltre la scrittura diretta su partizione evitava che l'immagine venisse frammentata appoggiandosi ad un altro filesystem.

Oggi però i dischi sono relativamente veloci, ed anche un file può essere montato nel sistema come fosse un normale dispositivo a blocchi usando i dispositivi di loop. Inoltre è più semplice gestire una partizione dove possono essere contenute alcune immagini ISO9660 che dedicare uno spazio fisso dove ci può stare soltanto una immagine.

Usare mkisofs

Prima di creare l'immagine ISO9660 è necessario organizzare i dati. La cosa in sè è molto semplice, ma è la parte più impegnativa e più lunga di tutta la preparazione del CDROM.

Generalmente conviene organizzare tutto sotto un'unica directory, che diventerà la root del cdrom. Occorre avere spazio sufficiente per inserire tutto il materiale, anche se si possono adottare alcuni accorgimenti per avere parte del materiale su dischi fisici diversi o addirittura via rete. L'immagine ISO9660 non deve necessariamente essere creata nella stessa macchina o nello stesso disco: è sufficiente che venga scritta in un disco della macchina dove verrà fisicamente trasferita su CDROM. La creazione dell'ISO9660 può avvenire ovunque, basta trasferire anche in seguito l'immagine risultante (centinaia di Mb) sulla macchina di masterizzazione, oppure la si può fare al volo direttamente via NFS.

Il materiale potete sistemarlo con i vostri tool preferiti, file manager o comandi di shell. L'importante è che tutto ci stia in un normale CDROM. La dimensione standard di un CD dati è 650Mb (681.984.000 byte), ma questa va riferita all'ISO9660 risultante, non all'insieme dei file (tenete conto dei dati relativi all'indicizzazione dei file, tabelle descrittive del CDROM, eccetera). Inoltre alcuni supporti permettono di superare questo limite (permettono qualche decina di secondi in più oltre i normali 74 minuti), ma lo saprete solo a masterizzazione conclusa. Se superate di poco i 650Mb potete rischiare (rimane comunque un rischio), ma se li superate di tanto vi conviene valutare la possibilità di fare 2 CDROM.

Un comando molto utile per questi lavori è du. Questo comando vi permette di vedere quanto spazio occupa il materiale che avete preparato. Una buona riga di comando è:
tizio@host:/home/cdrom/dati$ du -skc *
che vi permette di vedere in dettaglio l'occupazione del materiale e lo spazio totale richiesto in Kb dei dati che state preparando (il limite è circa 665600).

Appena tutto è pronto, non resta che lanciare mkisofs.

Parametri per mkisofs

Il modo più semplice per usare mkisofs è lanciarlo dicendo dove scrivere l'immagine ISO9660 e quale directory contiene i dati:
mkisofs -o file_iso9660 directory_base

Così facendo, però, non viene fuori una bella immagine. Ovvero viene fuori una perfetta immagine ISO9660, ma con nomi ristretti ai file, perdita degli attributi Unix ai file, insomma, una cosa povera... :-)

Una buona riga di comando dovrebbe coinvolgere almeno questi parametri:
mkisofs -alLRv -o file_iso9660 directory_base

-a
fa sì che vengano inseriti tutti i file, compresi quelli terminanti con il carattere tilde (~) o cancelletto (#). Se state facendo un backup dei vostri dati, forse questa opzione non serve, visto che i file contenenti questi caratteri in genere sono copie di backup generati dai vari editor.
-l
abilita l'uso di 32 caratteri nei nomi dei file. Questa lunghezza è standard ISO9660, ma alcuni sistemi operativi possono leggere al massimo nomi di file con 8+3 caratteri, separati da un punto. Ho visto che comunque l'uso di questa opzione non pregiudica la lettura del CDROM in questi sistemi operativi, anzi è ben supportata anche da sistemi operativi senza il limite 8+3.
-L
permette ai file di iniziare con il carattere punto. Altrimenti viene sostituito con il carattere di sottolineatura per manterere la compatibilità con i sistemi msdos. Se il vostro CDROM deve essere usato anche sotto Linux, con questa opzione vedrete i file così come erano quando stavano sul vostro disco fisso.
-R
questa opzione permette l'uso delle estensioni Rock Ridge, ovvero registra insieme ai file tutte le informazioni tipiche di un ambiente Unix (proprietario, permessi, timestamp...). C'è un'opzione alternativa a questa: -r (la stessa in minuscolo), che fa lo stesso di -R, ma imposta automaticamente il proprietario dei file a root.root e i permessi di accesso a tutti in sola lettura.
-v
questa opzione dice a mkisofs di svolgere il suo lavoro in modalità prolissa, ovvero segnalerà all'utente tutte le decisioni prese e lo stato della creazione del filesystem. mkisofs ha precise regole per decidere quale nome di file ha la precedenza quando più di uno deve essere ``riassunto'' per entrare nei limiti dei 32 caratteri (oppure 8+3). Gli altri file assumeranno un nome più breve ed un numero di serie progressivo. Oltre a questo verranno stampati anche le posizioni su disco assunte dai vari file e la percentuale di lavoro svolta comprensiva dell'orario stimato di conclusione dell'operazione.

Opzioni speciali

Ci sono anche delle opzioni speciali per mkisofs:

-V nomedisco
Con questa opzione è possibile assegnare al disco un nome, usato più che altro quando il CDROM verrà inserito in PC con altri sistemi operativi. È una buona cosa, almeno per sapere cosa contiene il CDROM.
-p testo
-P testo
-A testo
Queste opzioni servono per inserire dei testi riguardanti produttore ed editore del CD, e una descrizione del contenuto.
-f
Con questa opzione i link simbolici verranno inseriti come file normali (il file puntato). Se manca questa opzione e sono abilitate le estensioni Rock Ridge, i link simbolici appariranno tali anche nel CD masterizzato.

Ci sono anche altre opzioni, che permettono di ottenere effetti speciali, ma violando lo standard. Una di queste, -D, evita che certi file vengano spostati: lo standard ISO9660 prevede al massimo 8 livelli di sottodirectory, e le directory eccedenti vengono sistemate nella directory rr_moved nella root del filesystems ISO9660, salvo accedere al CDROM sfruttando le estensioni Rock Ridge.

Altre opzioni, per inserire o escludere file, sono più per fare backup ordinari su CDROM; per fare un bel CDROM conviene sempre preparare tutto e il solo materiale necessario in un'area apposita.

CDROM di avvio

I PC più recenti possono anche avviare il sistema operativo da CD. Questa funzione dipende dal BIOS della macchina. Il metodo consiste nel simulare un dischetto nella prima unità sul quale ci sta tutto il codice di avvio. Questa estensione si chiama ``El-Torito''.

In questo ``dischetto'' ci può stare qualsiasi codice di avvio, LILO, syslinux, un kernel diretto, eccetera. Se volete fare un CD con una distribuzione Linux, basta prendere l'immagine del floppy di avvio (ad esempio resc1440.bin per Debian, boot.img per RedHat) e dire a mkisofs di usare questo file come immagine di boot.

Tenete presente che normalmente il CD non è accessibile da questo dischetto fittizio, a meno che non ci sia il codice per gestire il CD all'interno del dischetto fittizio stesso. Normalmente infatti si mette un kernel e un'immagine initrd con un filesystem minimale per l'installazione e l'accesso al resto dei dispositivi direttamente da Linux. L'accesso al CD è possibile solo dopo l'avvio del kernel, in quanto sono solo disponibili le chiamate BIOS (che simulano la presenza del dischetto).

Il file immagine deve avere le dimesioni normali di un dischetto, quindi 1.2Mb, 1.44Mb o 2.88Mb. Oltre al file immagine va specificato un file dove inserire le informazioni di boot (catalogo), ma qui si arrangia mkisofs a crearlo, voi dovete solo dire dove metterlo.

In caso di CD di avvio, la riga di comando si arricchisce anche delle opzioni:
-b nome_immagine_avvio -c nome_file_catalogo

Entrambi i file devono essere comprensivi di eventuale percorso, relativo alla root del CDROM. L'immagine di avvio deve essere un file esistente, mentre per il file catalogo serve esista solo la directory dove crearlo.

Testare l'immagine ISO

Una volta creata l'immagine ISO9660, la si può controllare prima di scriverla su CDROM.

Se avete scritto l'immagine ISO9660 su una partizione, basterà fare il mount di quella partizione nel sistema, ad esempio:
root@host:/home/cdrom/dati# mount /dev/sdb3 /cdrom -t iso9660

Se invece l'immagine è su file, basta usare i dispositivi loop del kernel:
root@host:/home/cdrom/dati# mount -o loop nomefile /cdrom -t iso9660

Così facendo troverete in /cdrom il contenuto esatto del materiale che volete masterizzare, prima ancora di scriverlo fisicamente sul supporto. Non è possibile modificare niente, se avete dimenticato qualcosa o dovete togliere qualche file perché non ci sta nel supporto fisico è necessario ricreare l'immagine ISO9660 (con le opportune modifiche all'albero originale dei file).

Appena finito di guardare il contenuto del CDROM, è sufficiente:
root@host:/home/cdrom/dati# umount /cdrom

Masterizzare l'immagine su CDROM

Appena fatta l'immagine iso9660 e controllato che ci sia tutto il materiale voluto (e che entri nei 650Mb), la potete scrivere fisicamente su CD. Con cdrecord è sufficiente:
root@host:~# cdrecord dev=0,6,0 -v -eject speed=4 nomefile

Ovviamente il parametro dev sarà diverso a seconda di come è configurata la vostra macchina.

Non solo ISO9660!

Non è necessario fare un'immagine iso9660 per masterizzare un CD. iso9660 è un filesystem molto efficiente per la sola lettura, ma con Linux siete liberi di fare quello che volete.

Ad esempio un file tar.gz: dopo aver creato il file tar (entro i 650Mb) potete usare cdrecord direttamente sul file risultante. Per leggerlo, poi, è sufficiente puntare tar sul dispositivo del CDROM:
root@host:~# tar xvfz /dev/cdrom

La cosa più utile potrebbe essere creare un CDROM non leggibile su macchine non-Linux (o non facilmente leggibile), ad esempio con il filesystem ext2. In questo caso è sufficiente creare un file vuoto grande a piacere:
root@host:~# dd if=/dev/zero of=/mnt/nuovocd bs=1024K count=649 Qui ho creato un file vuoto di 649Mb. Adesso è sufficiente crearci un filesystem e montarlo:
root@host:~# mke2fs /mnt/nuovocd root@host:~# mount -o loop /mnt/nuovocd /mnt2

Adesso è sufficiente riempire la partizione, e quando c'è tutto fare umount e masterizzare il file risultante. Linux saprà montare tranquillamente il CDROM, ma non sarà facile per altri sistemi fare altrettanto.

Volendo crittare il CD, potete sostituire la precedente riga di mount con:
root@host:~# mount -o encryption=xor /mnt/nuovocd /mnt2

Vi sarà chiesta una password, che sarà usata per crittare i dati scritti nel CD. Per accedere al CD crittato è sufficiente il comando:
root@host:~# mount -o encryption=xor /dev/cdrom /cdrom

Questo metodo di crittazione non è molto sicuro (basta un less per capire la chiave), ma non appesantisce in modo significativo le operazioni di lettura. Per cose più importanti, invece, è più sicuro usare des.

Estrarre la traccia dati

La prima traccia dati è generalmente accessibile direttamente dal dispositivo del CDROM. Se quindi dovete estrarre la traccia dati (magari per creare un altro CDROM perfettamente identico), è sufficiente dare il comando:
root@host:~# cat /dev/cdrom > nomefile

E masterizzare direttamente nomefile.

A seconda del CDROM e del lettore usato, capiterà che si vada oltre la dimensione reale dell'immagine iso9660 (di circa 300Kb) e che il kernel generi strani messaggi di errore quando tenta di leggere oltre la traccia dati. La riga di comando migliore (ma più pesante) è:
root@host:~# dd if=/dev/cdrom of=nomefile bs=1c count=`isosize /dev/scd0`

Il programma isosize

In questi casi può tornare utile il programma isosize. Questo programma valuta il file (o dispositivo) passato come primo parametro e restituisce la dimensione del filesystem ISO9660 corrispondente.

Sembra una cosa stupida, ma in realtà è utilissimo per sapere la dimensione di un'immagine scritta su CDROM da estrarre, e per confrontare la dimensione del filesystem ISO9660 con il file estratto (per essere sicuri che sia stato estratto tutto intero).

In Debian si trova nel pacchetto cdwrite e xcdroast (in quest'ultimo pacchetto è posizionato in /usr/lib/xcdroast-0.96d/bin/isosize, un po' scomodo).

Altre due utility interessanti, che trovate nel pacchetto xcdroast ed installate in /usr/lib/xcdroast-0.96d/bin/, sono isoinfo e isodetect. isoinfo permette di vedere il contenuto del CDROM, mentre isodetect permette di vedere le informazioni associate al filesystem ISO9660 (etichetta di volume, nome di chi l'ha preparato, eccetera). Se non avete installato xcdroast, li potete trovare nel pacchettino PJ-isoutil.tgz, e compilare con:

gcc -O2 -Wall isodetect.c -o isodetect
gcc -O2 -Wall isosize.c -o isosize
gcc -O2 -Wall isoinfo.c -o isoinfo

Note finali

In questi mesi ho fatto una scoperta interessante. Dopo aver ``bruciato'' alcuni CDROM, ho provato a mettere un ventilatore davanti al PC aperto (dal lato dischi/masterizzatore). Quasi istantaneamente non ho più rovinato CDROM, sono riusciti tutti al primo colpo!

Se appoggiando una mano sul masterizzatore lo sentite un po' troppo caldo, sappiate che ci sono rischi concreti di bruciare CDROM! :-)

di Michele Dalla Silvestra


[precedente] Comp. GNOME - Copertina - AWK [successivo]