Comp. GNOME - Copertina - AWK |
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.
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.
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
.
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
~
) 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.
-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.
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.
Ci sono anche delle opzioni speciali per mkisofs
:
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.
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.
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
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 è 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.
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`
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
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! :-)
Comp. GNOME - Copertina - AWK |