BETA La rivista ipertestuale tecnica (colleg. al sito Web)
BETA
BETA La rivista ipertestuale tecnicaBarra BETA
Barra Sito Beta.it
BETA 20/99 (3) - Gennaio/Febbraio 1999 - Unix: Masterizzazione CD-rom in ambito Unix  -  Indici | Guida

Masterizzazione CD-rom in ambito Unix

Andrea Ghirardini
Articolista, BETA

Introduzione

L'avvento di Internet ci ha davvero cambiato la vita (telematica e informatica ovviamente). La disponibilità di archivi enormi e strapieni di tutti i programmi open source possibili ed immaginabili è davvero una tentazione enorme.

Se poi si ha la fortuna, come il sottoscritto, di lavorare presso una ditta che possiede una linea dedicata con una banda passante non indifferente, si può, in breve tempo, farsi una softeca di dimensioni spropositate.

Il problema nasce però quando lo stesso software lo si usa anche a casa e lo si vuole trasportare. Scartato il fattore telematico rimangono supporti di tutti i tipi: Zip, Jaz, SparQ, Syquest vari ed altro.

Inutile dire che lo strumento principe per costo/capienza rimane il CD-rom. Oramai con 3000 lire si possono archiviare oltre 600 MB di dati su un supporto sicuro ed affidabile.

Il problema nasce dal fatto che masterizzare un CD-rom, spesso, non è così facile ed immediato come si pensa.

Dal principio

Un po' di teoria. Il formato dei dati risiedenti su un CD-rom viene regolato da una serie di standard e documenti che sono, in ordine:

Red Book: definisce il formato fisico del supporto CD-rom e la struttura dei CD DA (CD Digital Audio)

  • Yellow Book: definisce le specifiche riguardanti la memorizzazione di dati digitali (non audio) su CD-rom
  • Green Book: come sopra solo per la specifica piattaforma CDi (piattaforma inventata da Philips per il CD-rom interattivo, che morì poco dopo la sua nascita per scarso interesse commerciale)
  • Orange Book: L'equivalente del Red Book + Yellow book (da qui il nome Orange) per i CD-R (CD Registrabili)
  • File system ISO 9660 : file system comune a tutte le piattaforme sviluppato per l'uso dei CD-rom in campo informatico
  • Rock Ridge Extensions : estensioni al FS ISO 9660 per l'uso su piattaforma Unix
  • Joliet Extensions : estensione al FS ISO 9660 per il mondo Microsoft.
  • El Torrito Extensions : estensioni al FS ISO 9660 per la creazione di CD-rom da cui sia possibile effettuare il boot di un sistema operativo.
  • HFS Extensions : estensioni Apple per adattare il FS MAC (HFS appunto) su supporto CD-rom

Partiamo quindi dalle considerazioni fondamentali.

Al momento della stesura dello Yellow Book si definì un file system (ISO 9660) comune per permettere la portabilità dei dati sulle diverse piattaforme. Lo standard ISO 9660 venne definito come un "minimo comun denominatore" dei file sytem delle diverse piattaforme. Purtroppo allora MS-DOS era ancora vivo e vegeto e quindi le sue limitazioni stringenti dettarono le regole per l'ISO 9660. Quindi le sue principali caratteristiche divennero:

  1. Nomi file limitati a 8 caratteri + 3 di estensione
  2. Nessun supporto per i link
  3. Case insensitive
  4. Massimo otto livelli di annidamento per le directory
  5. Nessuna estensione ai nomi delle directory
  6. Nessun tipo di permesso sui file

MS-DOS e' oramai morto e sepolto e quindi la maggior parte delle limitazioni del file system ISO 9660 non ha più ragione di esistere. Il problema comunque si pose prima della fine di MS-DOS. Il mondo Unix fu il primo ad affrontarlo. Il file system Unix nasce da sempre con tre importanti features ovvero i nomi di file lunghi, i link (estesamente usati sia dagli utenti che dagli sviluppatori) e ovviamente i permessi sui file. Si svilupparono quindi una serie di estensioni, ovvero le Rock Ridge Extensions. Con queste estensioni si può tranquillamente usare nomi di file lunghi, link simbolici e un numero di livelli di directory maggiore ad 8. Il file system, da notarsi, rimane comunque un ISO 9660 e quindi continua ad essere compatibile con le altre piattaforme. Semplicemente, mediante delle estensioni si implementa una sorta di "virtual file system" più complesso di quello permesso. Inoltre spesso in ogni directory il produttore del CD introduce un file (TRANS.TBL) che contiene una tabella che mette in relazione i nomi file ISO 9660 con quelli delle Rock Ridge. Questo consente a quelle piattaforme che non supportano queste estensioni di conoscere la corretta conformazione del file system.

Quando il DOS ufficialmente morì molti pensarono che queste estensioni sarebbero diventate uno standard anche nel mondo PC. A Microsoft infatti sarebbero state più che sufficienti dato che sia Windows 9X che Windows NT non supportano i link e Windows 9X nemmeno le permission. Microsoft invece penso' di basarsi su una diversa serie di estensioni, le Joliet, ovviamente incompatibili con le Rock Ridge. Microsoft ha imposto, con il suo peso, le Joliet come uno standard nel mondo della masterizzazione. La cosa e' talmente radicata che la stragrande maggioranza dei programmi di masterizzazione per PC supporta solamente le Joliet. Questo porta a delle situazioni paradossali come già successo ad un redattore di Beta: un amico gli masterizza, sotto Windows 95, un CD con la distribuzione Red Hat. Il redattore lo porta a casa e sulla sua Linux Box tutti i nomi dei file risultano troncati. Sulla macchina Windows 95 invece tutto OK. Risultato: CD inutilizzabile dato che il programma di installazione della Red Hat non trova i file da installare.

Potete spiegarvi benissimo cos'è successo. I nomi di file lunghi erano stati masterizzati con un programma PC e quindi mediante le Joliet, incompatibili, come specificato prima, con le Rock Ridge usate da Linux.

Due mondi incompatibili? No, come vedremo.

I programmi di masterizzazione in ambito Unix

In ambito Unix esistono una ristretta serie di programmi free che però hanno il vantaggio di funzionare con considerevole velocità ed affidabilità. Dato che tutti i programmi funzionano in modalità a linea di comando sono certamente meno intuitivi delle loro controparti in ambito Microsoft. Sono comunque disponibili una serie di GUI sotto X11 da utilizzarsi come front-end.

I programmi per Linux si distinguono in tre categorie:

  1. Gestione delle tracce audio
  2. Generazioni delle immagini ISO 9660
  3. Registrazione effettiva del CD

Analizzeremo ora alcuni casi reali e vedremo come utilizzare i principali tool disponibili.

CD-DA

L'uso del masterizzatore per la creazione e la copia di CD-DA è un fenomeno molto diffuso. A questo punto una premessa: non voglio nell'ambito di questo articolo lanciarmi in diatriba pro o contro la pirateria; ricordo solamente che per legge è vietato effettuare qualunque copia che non sia un semplice back-up del supporto. Inoltre, cosa ignorata dai più, è illegale effettuare delle copie di CD-DA su supporti che NON siano CD-R Digital audio. Mi spiego meglio. Sul mercato esistono due tipi di supporti CD-R: CD-R e CD-R Digital Audio. Tecnicamente i due supporti sono perfettamente identici.La differenza è solamente nel costo: i CD-R Digital Audio sono più cari in quanto vengono tassati in origine dalla SIAE per l'uso come supporto musicale.

Per masterizzare un CD-R Digital Audio è necessario preparare le tracce audio come file wav o au con le seguenti caratteristiche:

1- Frequenza di campionamento di 44,1 Khz

2- Stereo

3- Formato tipo PCM. Nessun tipo di compressione

Una volta che le nostre tracce audio possiedono queste caratteristiche è sufficiente registrarle tramite uno dei due tool di registrazione disponibile per la piattaforma Unix: cdrecord o cdwrite.

Questi due tool permettono di stampare CD-R in formato Audio (CD-DA), Dati (CD-R) o misto Audio/Dati (CD-XA). Consiglio spassionatamente il primo. Cdwrite è stato il primo tool disponibile ma nel corso del tempo è stato ampiamente superato da cdrecord, sia per funzionalità disponibili sia per supporto alle molteplici marche e modelli di masterizzatori.

Ci concentreremo quindi prevalentemente su questo tool.

Cdrecord

Cdrecord nasce dalla brillante mente di Jörg Schilling per superare le limitazioni di cdwrite. Attualmente supporta sia ISO9660 sia, in Alpha Testing, il nuovo File System UDF utilizzato per i supporti DVD.

Prima premessa importante: cdrecord supporta solamente dispositivi SCSI. Unicamente con la piattaforma Linux è possibile utilizzare masterizzatori EIDE. Questa feature è possibile tramite i servizi di "SCSI Emulation" messi a disposizione dal kernel di Linux. Attivando questi servizi al posto dei canonici driver ATAPI è possibile gestire i dispositivi EIDE/ATAPI tramite i device SCSI. Per l'uso e l'attivazione di questi servizi vi rimando a successivi articoli di Beta e al kernel-HOWTO.

Seconda cosa da ricordare è la mancanza dei device SCSI generici in HP-UX 10.x. Insieme al sorgenti del tool viene fornito uno script che si incarica di creare, lanciato come root, i device necessari.

Una volta compilato ed installato cdrecord si incarica di scrivere le nostre immagini ISO9660 o i file au o wav su cd-r. Cdrecord è un prodotto molto complesso e articolato e è in grado di affrontare praticamente tutte le problematiche legate alla scrittura su CD-rom. Per questo motivo non è ne' semplice ne' di immediata comprensione. In particolare possiede una nutrita serie di switch, probabilmente seconda solo a ls! Per semplificare le cose quindi considereremo solamente quelle usate quotidianamente.

Cdrecord mette a disposizione sostanzialmente DUE serie di switch, una generale (ovvero valida per tutto il disco) e una specifica per la singola traccia che stiamo scrivendo. Tra le opzioni generali:

  • -speed=x: permette di settare la velocità di scrittura del nostro masterizzatore.
  • -dev=x,y,z : specifica il device da utilizzare per registrare il cd-r. X, y, e z specificano, rispettivamente, bus,id e lun del dispositivo scsi.
  • -v : indica il verbose mode. E' possibile utilizzare anche -V , un verbose mode che scrive a video tutte le operazione che cdrecord sa eseguendo sul bus SCSI. Da utilizzarsi solo in fase di debug se abbiamo modificato i sorgenti.

Tra le opzioni specifiche citiamo -audio per la scrittura di tracce audio in formato CDDA.

Quindi, tornando al caso iniziale, ovvero l'incisione di un CD audio, il comando da utilizzare, supponendodi avere i masterizzatore con ID SCSI 5 e LUN 0 è:

cdrecord -v -speed=2 -dev=5,0 -audio nome-traccia-1 -audio nome-traccia-2 ...

Con cdrecord è anche possibile scrivere un CDDA in più sessioni successive. Per far questo è sufficiente ricordarsi di "fissare" il CD solo nell'ultima sessione. In cosa consiste l'operazione di fixing?

I masterizzatori usano una specifica area del disco per scrivere il catalogo dei file presenti sul disco. Questa area, che prende il nome di PMA, è leggibile solo dai masterizzatori e da alcuni lettori CD-rom. Nel momento in cui il CD-rom viene "fissato" il masterizzatore prende il catalogo PMA e lo scrive in coda alla sessione sotto forma di TOC (Table of Contents). Il CD-rom così modificato non sarà più modificabile (a meno che non abbiamo specificato che si tratti di un cd multisessione, vedremo dopo) e sarà possibile leggerlo con qualunque lettore.

Nel caso del CDDA di prima, se si volesse registrarlo in più battute successive i comando da dare per e registrazioni sarà:

cdrecord -v -nofix -speed=2 -dev=5,0 -audio nome-traccia-1 -audio nome-traccia-2 ...

-nofix è un'opzione generale che dice a cdrecord di non "fissare" automaticamente il CDDA.

Nel momento in cui effettuiamo l'ultima registrazione sarà sufficiente dare il comando senza -nofix. Nel caso in cui volessimo semplicemente "fissare" il CD basterà scrivere:

cdrecord -v -fix -speed=2 -dev=5,0

Copia di un CDDA

La copia di un CDDA introduce ulteriori problematiche. Il sistema più semplice per effettuare un copia consiste nel campionare su disco il CDDA (usando la scheda audio) e successivamente scrivere il nuovo CDDA. Putroppo questo metodo degrada la qualità della copia. Durante il processo di campionamento la traccia digitale deve essere trasformata in segnale analogico, tramite i convertitori D/A del CD-rom, e successivamente ricampionata dalla scheda audio, usando i sui convertitori A/D. Questo processo invariabilmente introduce rumore nella registrazione.

Per evitare questo problema esistono dei programmi particolari, detti ripper, che, sfruttando le funzioni dei moderni lettori CD-rom, sono in grado di portare e tracce audio sul disco, direttamente in formato wav, evitando questa doppia conversione.

Il più efficiente di questi ripper, per il mondo Unix, è cdparanoia. Questo tool è tanto semplice da usare quanto potente. Di default estrae i brani dal device /dev/cdrom. Cdparanoia, di default, estrae tutto l'intervallo delle tracce specificato come un'unico file wav. Nonostante questo possa essere comodo per i cd live, nel caso che il nostro masterizzatore non possieda la funzione di Disk at Once (come alcuni Sony), ha lo svantaggio di incidere tutto il disco come una singola traccia. E' bene quindi ricordarsi di specificare ogni volta il parametro -B che invece crea un file wav per ogni traccia sul disco. Il parametro -Q invece esegue una query sul CDDA inserito leggendo la TOC e riportandoci il numero di brani inciso. Quindi, per spiegare il tutto con un esempio:

cdparanoia -Q

Se il report ci dice che ci sono 10 tracce nel cd e vogliamo digitalizzarle tutte e dieci:

cdparanoia -B 1-10

Masterizzeremo le tracce audio con cdrecord con il seguente comando:

cdrecord -v -speed=2 -dev=5,0 -audio track.*.wav

Il risultato è talmente elevato, visto che tutto il processo è svolto in digitale da essere indistinguibile dall'originale.

CD-rom ISO 9660 e varianti

La masterizzazione di un CD-rom introduce una serie ulteriori di programmi, ovvero i creatori di immagini ISO9660. Dato che, come abbiamo visto all'inizio dell'articolo, i CD-rom usano un file system particolare non è semplicemente pensabile di copiare i file dal nostro disco fisso al CD-rom. Perché?

Sostanzialmente il problema sta nel fatto che il file system ISO9660 contiene delle ottimizzazioni specifiche per il supporto CD-rom e quindi il file system deve essere analizzato e ottimizzato nella sua interezza in fase di creazione.

Questo ci spinge a trarre una conclusione. Per ottenere i migliori risultati e per evitare problemi con i nostri CD-rom è bene avere un'area libera sul nostro disco fisso di circa 1,4 Gb. Di questi infatti 680 Mb saranno riservati a contenere i file che dobbiamo masterizzare sul CD-rom (ovviamente con il nostro file system, ext2, hfs, veritas o altro) e 680 Mb per l'immagine in ISO9660 che andremo a creare per masterizzare il CD-rom.

Ci sono due tool utilizzati per la generazioni di immagini ISO9660: mkisofs e mkhybrid.

Mkisofs è il programma più avanzato per la gestione di immagini ISO9660 puro o con le Rock Ridge Extensions. Mkhybrid è invece un'hacking di mkisofs che, pur conservandone tutte le caratteristiche, permette invece la creazione di CD-rom con una combinazione qualsiasi di extensioni Rock-Ridge, Joliet e HFS di Apple.

Il mio "2 cents tip" è quello di utilizzare il primo se dovete creare molti CD-rom per Unix, mentre l'altro se dovete creare CD-rom per piattaforma Windows o CD-rom misti multipiattaforma.

Analizzeremo in questa sede soprattutto mkisofs. Tenete conto che, nella maggior parte dei casi serva creare un CD-rom misto per Unix/Microsoft sarà sufficiente usare mkhybrid con li stessi parametri di mkisofs ed il parametro -J.

Come cdrecord mkisofs possiede una notevole quantità di parametri:

-a Include nell'immagine tutti i file. Solitamente i file che cominciano per # o ~ non vengono inclusi dato che sono copie di backup

-A application-id permettere di inserire una stringa che specifica l'applicazione contenuta nel cd

-b boot-image specifica un'immagine di boot per costruire un cd secondo lo standard El-Torrito. E' tassativo che l'immagine (dato che si emula un floppy) sia esattamente di 1,2 o 1,44 o 2,88 Mb.

-c boot-catalog nome del file di catalogo necessario per i cd di boot. Il file viene creato in fase di masterizzazione da mkisofs. Unica accortezza e' di scegliere un nome file che non sia già presente nel CD

-D Non riloca le directory ma le masterizza così come sono. Lo standard ISO9660 permette al massimo 8 livelli di profondità dell'albero delle directory sul CD e quindi le directory più profonde devono essere rilocate per evitare di incorrere in errori. Questo viene superato dalle Rock Ridge Extension. Questo parametro forza mkisofs a creare un'immagine con più di 8 livelli senza le Rock Ridge. Viola lo standard ma spesso funziona. Da usarsi con cautela

-f segue i link simbolici. Quando NON vengono usate le Rock Ridge (che permettono l'uso di link simbolici) questa opzione segue il link e crea una copia fisica del file a cui il link sta puntando

-l forza l'uso di nomi di file a 32 caratteri. Questo viola lo standard ISO9660 e va usato con cautela. Non necessario con le Rock Ridge.

-L permette ai nomi di file di cominciare con un punto. Solitamente per ragioni di compatibilità con MS-DOS il punto iniziale viene automaticamente sostituito con un underscore

-m permette di escludere dei file. Possono essere usati caratteri jolly. Per esempio "-m core -m *.tmp" esclude tutti i core ed i file che hanno tmp come estensione

-M path specifica un immagine ISO9660 che deve essere fusa con quella che stiamo generando.

-N Omette il numero di versione del file. Viola lo standard ISO9660 e va usato con cautela

-o filename Nome del file in cui verrà creata l'immagine ISO9660.

-P publisher-id indica il nome della società che ha pubblicato il CD

-p preparer-id indica il nome di chi ha masterizzato l'immagine

-R Abilita le Rock Ridge Extension

-r Come -R con delle differenze però. Abilitando "-r" al posto di "-R" si hanno le seguenti variazioni:

1- uid e gid sono settati a 0 dato che sono utili sono sul file system della macchina su cui si sta preparando l'immagine

2- Viene forzato il permesso di lettura per ALL così che il cd sia accessibile in scrittura da tutti. NB: ovviamente poi dipende dai permessi che si settano sulla directory in cui si farà il mount.

3- Per i file eseguibili viene forzato il permesso di eseguibilità per ALL.

4- Per le directory viene forzata l'accessibilità per tutti

-T Crea il file TRANS.TBL che contiene la corrispondenza file_8.3 --> Nome_di_file_lungo per quei sistemi che non supportano le Rock Ridge. Verrà creato un file TRANS.TBL per ogni directory sul CD-rom

-V Volume-ID Specifica la label del CD-rom

-v Verbose mode

-x path esclude un path dall'immagine del CD-rom

Quindi pensiamo di dover generare un'immagine del file system del nostro disco a partire dalla directory in cui siamo e con estensioni Rock Ridge. Il comando da dare sarà, per esempio:

mkisofs -V "I CD-rom" -P "La mia società inc." -p "Andrea Ghirardini" -v -r -a -l -o cd.iso .

Nel caso volessi effettuare una copia di un CD-rom?

Se il CD-rom possiede solamente una traccia dati (potete verificarlo con il parametro -toc di cdrecord) la cosa è molte semplice. Sarà sufficiente usare il solito comando Unix dd per copiare il file system ISO9660 come un file immagine sul disco. Ad esempio:

dd if=/dev/cdrom of=cd.iso

Dd alla fine restituirà un codice di errore. Non preoccupatevi, è assolutamente normale. Il file ottenuto è un'immagine ISO9660 che potrete utilizzare con cdrecord per ottenere una copia. E' anche possibile copiare un CD-rom di questo tipo direttamente dal lettore al masterizzatore (senza passare per il disco fisso) mediante il comando:

cdrecord -v -speed=2 -dev=5,0 -isosize /dev/cdrom

ATTENZIONE! Ricordiamoci sempre che, nella masterizzazione dei CD-rom la cosa principale è che venga garantito un flusso continuo di 150 Kb/sec moltiplicato per la velocità di scrittura del masterizzatore (nel caso di prima quindi 300 Kb/sec). Nonostante il multitasking di Unix faciliti di molto le cose (con Windows 95 lo stesso screen saver può rubare abbastanza CPU per fallire questo compito), è bene non gravare la macchina con operazioni di I/O particolarmente gravose.

Nel caso il cd abbia una traccia dati e successive tracce audio (è il caso della maggior parte dei videogiochi) si userà dd per copiare la traccia dati sul disco fisso e, successivamente, cdparanoia per il ripping delle tracce audio. La copia verrà masterizzata con il seguente comando:

cdrecord -v -speed=2 -dev=5,0 -data cd.iso -audio track*.wav

Finiamo questo articolo con un'ultimo caso, ovvero la multisessione. Nel caso, ad esempio, si vogliano trasferire dati dall'ufficio a casa e non si voglia bruciare un CD per poche decine di Mb è possibile usare il metodo della multisessione. Mediante questa funzione è possibile appendere ad un CD ulteriori sessioni, o immagini ISO9660.

Per fare questo si usa il comando:

cdrecord -v -speed=2 -dev=5,0 -multi cd.iso

Il parametro -multi scrive una TOC particolare che indica al lettore CD-rom che ci possono essere ulteriori TOC successive. Il lettore CD-rom andrà a leggersi tutte le TOC presenti, in successione, effettuando un merge tra queste per ricavare la mappa completa dei file presenti sul CD-rom.

Da notarsi che tutte le sessioni, tranne l'ultima, dovranno essere masterizzate con il parametro -multi. L'ultima dovrà essere masterizzata con il comando -data che fisserà definitivamente il CD-rom

Buona masterizzazione!


Andrea Ghirardini è Articolista di BETA dal 1998; è raggiungibile su Internet tramite la redazione oppure all'indirizzo andrea@sodalia.it.

Copyright © 1999 Andrea Ghirardini, tutti i diritti sono riservati. Questo Articolo di BETA, insieme alla Rivista, è distribuibile secondo i termini e le condizioni della Licenza Pubblica Beta, come specificato nel file LPB.


BETA 20/99 (3) - Gennaio/Febbraio 1999: Sommario | Indice Numero | Redazione | Liste/Forum | Informazioni | Indici di BETA | Installazione | Licenza Pubbl. Beta | Mirror ufficiali | Guida | Ricerche | Stampa


Beta.it (http://www.beta.it)email info@beta.it
Barra Sito Beta.it

Copyright © 1994-99 Beta, tutti i diritti sono riservati. Documento Lpb. BETA sul Web: http://www.beta.it
Sommario Internet Id Redazione Liste/Forum Informazioni Browser Mirror ufficiali Beta Home Page Beta Home Page english Beta News BETA Rivista Articoli BETA Beta Edit, pubblicazioni Beta Logo, premi Beta Lpb, Licenza Pubblica e Articoli Lpb Beta Navigatore Beta Online Beta Library Beta Info Gruppo Beta