Hardware Copertina PCSpeaker

Articoli


Sguardo al formato ISO9660

Diamo un'occhiata alle principali caratteristiche del filesystem ISO9660, quello usato principalmente per i CD-ROM dati. Non entrerò nei dettagli, ma descriverò le principali caratteristiche e come un utente medio può giocarci.

Il formato ISO in generale

Intanto il nome ``ISO'' sta ad indicare che parliamo di uno standard, ovvero qualcosa di ben definito e con regole precise per essere più portabile possibile. E in effetti tutte le macchine (computer, ovviamente), o quasi, che posseggono un lettore CD riconoscono il formato ISO9660.

Quindi non solo i PC con dos/windows, e neanche solo le macchine Linux, ma pure macintosh riesce a leggere i CD ISO9660 (oltre a CD con un filesystem proprio, HFS, lo stesso usato per i dischi fissi), e moltissimi altri sistemi (probabilmente tutti).

Generalmente un filesystem ISO9660 non è modificabile al volo, anche se si trova su un supporto scrivibile, come una partizione di un disco fisso. Normalmente esistono programmi appositi (in Linux il più usato è mkisofs, l'ultima versione ufficiale che conosco è la 1.11) che prendono un albero di directory e da questo ricavano un unico file in formato ISO.

Questo è quello che accade nella preparazione di un CD-ROM, ovvero si prepara una directory contenente tutti i file e subdirectory, e lanciando un comando viene creata l'immagine ISO9660 in un file o direttamente nel primo settore di una partizione. Successivamente questa immagine viene fisicamente scritta nel supporto plastico (il CD).

Cose più interessanti: i nomi dei file

Forse non tutti sanno che lo standard ISO prevede fino a 32 caratteri, contenenti un solo `.' e senza distinzione maiuscolo/minuscolo. Il fatto che molti CD si presentino comunque in formato dos (8.3) è colpa del solito blocco psicologico introdotto e non abolito in tempo utile dal grande Bill Gates.

Tutte le macchine windows95, windowsnt, mac e Linux su cui ho provato un CD creato da mkisofs -l (-l serve appunto per abilitare l'uso dei nomi lunghi ISO) leggevano correttamente i nomi in maiuscolo (eccetto Linux che li vedeva minuscoli). Ma pure in un paio di macchine dos il CD si leggeva bene, ovviamente in formato 8.3 (troncando semplicemente il nome).

Superare la barriera dei 32 caratteri

Per abbattere una simile barriera sono sufficienti delle estensioni al formato ISO. In Linux (e Unix in generale) esistono le estensioni ``Rock Ridge'', per permettere l'uso di nomi più lunghi di 32 caratteri, estensioni multiple nei nomi, link simbolici, proprietari, permessi, caratteri strani nel nome (vocali accentate o altri simboli), eccetera. Un filesystem ISO9660 con estensioni Rock Ridge non si distingue da un normale filesystem Linux, salvo il fatto di essere in sola lettura.

Un CD-ROM con filesystem ISO9660 e Rock Ridge è perfettamente leggibile sia sotto Linux, sia con altri sistemi operativi, anche se con il limite di 32 o 8.3 caratteri in questi ultimi. Si crea con mkisofs -R -l.

Ma tanto per essere diversa dagli altri, Microsoft si è messa ad inventare delle estensioni sue per i CD, le più famose si chiamano ``Joliet'' (esistono anche le ``Romeo'', e sono limitate a 64 o 128 caratteri, non ricordo rispettivamente quali a 64 e quali a 128).

Creare e giocare con le immagini ISO9660

È sufficiente avere il kernel almeno 2.0.0, un mount recente (adeguato al kernel) e mkisofs. Prepariamo un'area contenente alcuni Mb di file e directory, quel tanto che basta per avere un po' di materiale, ma neanche troppo da rendere lenta la creazione dell'immagine o saturare completamente il disco fisso.

Diamo il comando:

mkisofs -R -l -o file-destinazione dir-sorgente

Dopo un po' otterrete file-destinazione, di dimensione di poco superiore allo spazio occupato dai file originali. Per vedere cosa apparirebbe se l'immagine fosse scritta su CD e montata nel sistema basta il seguente comando:

mount -o loop=/dev/loop0 file-immagine mount-point -t iso9660

Come mount-point si può anche usare il solito /cdrom.

A questo punto potete leggere la man page di mkisofs(8) e divertirvi da soli. Se non avete il masterizzatore a portata di mano, potete mettere l'immagine ISO in un disco con filesystem msdos, e poi spostare fisicamente il disco in una macchina fornita di masterizzatore e scrivere direttamente il file-immagine su CD.

Linux e Joliet

Linux non supporta ancora ufficialmente le estensioni Joliet, ma sono in giro delle patch, create da Gordon Chaffee <chaffee@bmrc.berkeley.edu>. Potete trovarle alle URL:

Le patch contengono il supporto anche per FAT32 e NLS. L'applicazione delle patch è semplice (occhio a prendere quelle per la corretta serie del kernel, 2.0.X o 2.1.X), e per compilarsi correttamente è sufficiente includere almeno il supporto per NLS e alcune codepage (consigliano la ISO8859-1, latin1).

Pagine HTML in CD Joliet

Il grandissimo difetto che hanno molte pagine HTML scritte da gente sotto windows sono le maiuscole. Visto che windows ignora la differenza tra maiuscolo e minuscolo, capita che un file referenziato in una pagina HTML in realtà abbia un nome diverso nel CD. Linux, invece, considera diversi i file che differiscono solo per il maiuscolo di una lettera.

Ma questo si può ovviare con alcune opzioni di mount. Per esempio, il filesystem ISO9660 possiede l'opzione check=r che permette di convertire in minuscolo i nomi dei file da cercare. Però questa funziona a metà, ovvero funziona se cerchiamo file in maiuscolo mentre nel CD è in minuscolo, ma non viceversa, cioè se cerchiamo un file in minuscolo ma nel CD è scritto in maiuscolo.

Trovando per le mani un CD di questo tipo, ho dovuto mettere le mani nel kernel per riuscire a navigare tra le pagine. La modifica è abbastanza semplice, basta applicare questa patch al file linux/fs/isofs/joliet.c (cd linux/fs/isofs/joliet.c; patch < joliet.c.diff) e ricompilare il kernel o il modulo isofs.o.

Al mount va data l'opzione ``-o check=r''; i nomi del CD si vedranno in minuscolo e se verranno cercati con qualche lettera in maiuscolo saranno comunque trovati.

Creare CD con estensioni Joliet

È in lavorazione un programma (per Linux) che permette di creare CD ``ibridi'', cioè ISO9660/Joliet/HFS. Si chiama mkhybrid e deriva da mkisofs. Si può trovare a:

C'è da dire che è ancora in fase sperimentale. Quando l'ho provato ho visto che non mi permette di utilizzare in contemporanea le estensioni Rock Ridge e Joliet, mostrando solamente quest'ultime.

Normalmente, per fare CD con nomi lunghi anche fuori da Linux, ho sempre usato l'opzione ``-l'' di mkisofs.

di Michele Dalla Silvestra


Hardware Copertina PCSpeaker