[precedente] Localizzare - Copertina - Colori in bash [successivo]


OPEN

Creare CDROM

Questo articolo è il primo di una serie di articoli dedicati a come preparare CDROM utilizzando unicamente Linux come piattaforma di preparazione e scrittura fisica dei dati.

Panoramica

Preparare un CDROM dati e/o audio prevede la preparazione dei dati su disco fisso, mediante file contenenti l'immagine di un filesystem (in caso di CDROM dati) o in formato audio (precisamente 16 bit stereo 44100 Hz, senza segno). Successivamente con un programma apposito questi dati impacchettati vengono ``fissati'' su un supporto ottico.

Il processo fisico di scrittura del CD è semplicissimo dal punto di vista dell'operatore, ma comporta un maggior impegno delle risorse della macchina (specialmente i dischi e il bus dati). Più complessa per l'operatore è la preparazione dei dati, specialmente perché in genere ci si ricorda sempre troppo tardi di un file che doveva essere inserito nel CD ormai fatto. :-)

Uno dei vantaggi a masterizzare da Linux è l'enorme disponibilità di software per la preparazione dei dati da inserire nel CD. Questi possono risiedere con tranquillità in più dischi (anche remoti), e messi insieme utilizzando gli strumenti preferiti (ci sono file manager per tutti i gusti; inoltre sotto Linux si può sempre giocare con i link simbolici). Il programma che prende tutti i dati e prepara l'immagine da masterizzare è unico, ben progettato e capace di adattarsi a qualsiasi gusto: potete star certi che i CD fatti sotto Linux saranno visibili anche sotto qualsiasi altro sistema operativo, entro i limiti che voi stessi decidete in fase di preparazione (tipo la lunghezza massima dei nomi dei file, 8+3 o 32 caratteri) o l'uso di estensioni più o meno riconosciute.

Inoltre potete sempre preparare tutto il materiale sotto Linux, e compiere la sola operazione di scrittura sotto altri sistemi operativi (perché il masterizzatore non è supportato da Linux oppure è collegato ad una macchina dove non è installato Linux). I vantaggi in queste operazioni ci sono quasi sempre: alcune funzionalità (anche importanti) spesso non sono presenti nei programmi forniti insieme al masterizzatore (e non sempre ben implementate in altri costosi software commerciali).

Attenti: non pretendete di imparare subito a masterizzare. Bisogna creare un po' di CD di tipo diverso, e arrivare anche a ``bruciarne'' più di qualcuno.

Composizione del CDROM

Senza entrare in dettagli troppo tecnici, diciamo che un CDROM è composto di un certo numero di tracce. Una traccia è una sequenza di dati che il laser scrive senza interruzioni, e può essere di tipo dati o di tipo audio. Come si può intuire le tracce dati sono leggibili dal sistema operativo come filesystem contenenti file e directory (ma non solo), mentre le tracce audio sono ascoltabili tranquillamente da un lettore CD audio (anche quello dell'impianto Hi-Fi).

Il numero massimo di tracce presenti su un CDROM è 100, limite abbastanza alto data la capacità del CDROM. Le tracce all'interno del CD possono essere miste, anche se lo standard vuole che solo la prima possa essere di tipo dati (molti lettori infatti impongono questo). Un CDROM dati ha quindi un'unica traccia dati, mentre i CDROM misti hanno la prima traccia dati e le altre tracce audio. I CD di musica hanno solo tracce audio, tante quante sono i brani. Generalmente la traccia dati su un lettore audio ``gira'' senza produrre suono (non viene generato nessun segnale nell'uscita audio).

Ma quanto è grande un CDROM?

Un CDROM ``normale'' contiene 650Mb di dati, oppure 74 minuti di audio. Facendo un po' di conti noterete che 1 minuto di audio a 16 bit 44100 Hz stereo occupa circa 10Mb: i conti tornano perché le tracce dati vengono scritte con dei bit ridondanti, usati per la correzione degli errori. Quindi in un CDROM ci stanno al massimo 650Mb di dati oppure 740Mb di audio (o una via intermedia, in caso di CDROM misto).

Ma torniamo a Linux!

Come si vede la struttura delle tracce di un CDROM? Usando le utility del pacchetto cdtool. Debian 1.3 fornisce la versione 1.01, la Debian 2.0 (in prossima uscita) la versione 2.1.4. In questo pacchetto c'è un unico programma eseguibile, cdtool, e parecchi link simbolici: cdir, cdadd, cdplay, cdpause, cdstop, cdeject e cdvolume. La pagina man è cdtool(1).

Con il comando cdir viene elencata la struttura del CDROM inserito nel dispositivo /dev/cdrom in minuti e secondi. Le tracce dati sono evidenziate dalla scritta [DATA] subito dopo il tempo, le altre tracce sono audio.

Come appare intuibile, cdplay lancia l'ascolto delle tracce audio attraverso l'interfaccia audio (o lo spinotto per le cuffie del lettore CD), eventualmente da una traccia voluta se si specifica il suo numero sulla riga di comando; cdstop, cdpause e cdeject sono ovvi per chi conosce un po' il funzionamento di un normale impianto CD audio; cdvolume imposta il volume di uscita dell'audio e cdadd serve per creare un database da riempire con informazioni sul contenuto delle varie tracce, database che sarà utilizzato da cdir quando riconoscerà lo stesso CD (mostrando ad esempio i titoli delle canzoni).

Come si estraggono le tracce?

La prima traccia dati è normalmente accessibile dallo stesso dispositivo del CDROM. Cioè se il proprio lettore (IDE o SCSI) è ad esempio /dev/cdrom (ovvero /dev/cdrom è un link simbolico al corretto dispositivo del lettore CD), facendo un cat o less di /dev/cdrom si legge direttamente la traccia dati. Diventa quindi facile estrarre la traccia dati per scriverla su un nuovo supporto con il comando (nomedispositivo può essere /dev/cdrom o un altro lettore CD):
root@host:~# cat nomedispositivo > nomefile

Una volta su file, lo si può controllare facendo un mount tramite i dispositivi di loop:
root@host:~# mount -o loop nomefile /cdrom

Le tracce audio invece sono accessibili mediante chiamate particolari da dare al dispositivo del lettore CDROM, e a questo va aggiunto che non tutti i dispositivi (specialmente i vecchi lettori EIDE) sono in grado di estrarre correttamente le tracce audio digitali.

Per estrarre le tracce audio digitali si usa il comando cdda2wav, che in Debian si trova nell'omonimo pacchetto. Questo comando permette di salvare le tracce audio in file pronti (o quasi) per essere masterizzati oppure in formato wav per altri usi. Occhio che un file estratto da cdda2wav a qualità CD (massima) occupa circa 10Mb al minuto.

Attenzione: il fatto che sia tecnicamente possibile estrarre le tracce da un CDROM e riscriverle su un CD vuoto non significa che sia sempre permesso farlo. Controllate che il materiale non sia protetto legalmente contro la copia.

Procedimento normale

Generalmente si riserva su un disco (preferibilmente SCSI) uno spazio di almeno 700Mb (anche 750Mb in caso di solo audio) dove riversare i file immagine delle tracce, e da lì si dà il comando di masterizzazione una volta completata la raccolta del materiale.

La scrittura di un CDROM è un'operazione critica dal punto di vista dei dati: devono arrivare al masterizzatore con un flusso costante, e se per ritardi vari (elaborazioni complesse, problemi nella fonte dei dati, disco lento, ecc.) il masterizzatore finisce i dati accumulati nel suo buffer interno (oppure subisce una scossa meccanica), l'intera traccia viene bloccata, risultando in una parte filesystem accessibile o parte di brano ascoltabile. Generalmente in questi casi si finisce col buttare il CDROM.

È possibile masterizzare al volo (senza passare per il disco fisso), ma bisogna garantire il flusso di dati necessario al masterizzatore. Leggendo i dati da un altro CD è possibile che polvere o graffi creino pericolosi momenti di stallo. Scrivere da rete è particolarmente pericoloso (il flusso dei dati non è per niente garantito).

Masterizzando a velocità 2x (cioè doppia rispetto alla velocità normale di lettura delle tracce audio) bisogna garantire al masterizzatore circa 300 Kb/s, a 4x diventano 600 Kb/s.

In genere si cerca di evitare che durante la masterizzazione la macchina subisca picchi di carico e si fa in modo che i dati possano arrivare da una fonte affidabile e veloce. Generalmente si usano masterizzatori SCSI appoggiati a dischi fissi SCSI (i dischi EIDE ``pesano'' sulla CPU e rischiano di subire brevi interruzioni) e la macchina non deve svolgere servizi di rete pesanti durante la masterizzazione.

Personalmente ho visto macchine di media potenza masterizzare tranquillamente anche da dischi EIDE a velocità 4x, oppure masterizzare da disco SCSI ma continuare a svolgere servizi di rete: il processo di masterizzazione si porta automaticamente a priorità massima rispetto ad altri processi, e se si sta attenti si possono fare anche altri lavori non pesanti per la macchina (tipo leggersi la posta). Dipende molto anche dalla potenza di calcolo della macchina che si sta usando. L'uso del PLIP però ve lo sconsiglio durante la masterizzazione.

Inoltre è possibile anche ``simulare'' la masterizzazione (modalità dummy): si avvia il normale processo di scrittura del CD, ma con il laser spento. Questo serve a vedere se è configurato il giusto dispositivo, e se la macchina riesce a garantire il giusto flusso di dati al masterizzatore ed eventualmente anche svolgere altri servizi. In caso di ``buffer underrun'' bisogna diminuire la velocità di masterizzazione oppure ridurre il carico della macchina (a volte si stacca fisicamente il cavo di rete buttando fuori eventuali utenti collegati).

Hardware necessario

Oggi si trovano masterizzatori di tutti i gusti e che si collegano anche ai tostapane: infatti si trovano unità EIDE, SCSI e per porta parallela. I masterizzatori ``storici'' sono quelli SCSI, più affidabili perché si appoggiano su un controller intelligente e abbastanza indipendente dal processore principale del sistema.

I masterizzatori EIDE e paralleli sono un accrocchio per chi non vuole o non può affrontare la spesa di un sistema SCSI. Si appoggiano su controller diffusi praticamente su qualsiasi personal computer, ma sono meno intelligenti, caricano di più il processore principale, e non sono immuni da pericoli dovuti ad interrupt di sistema e probabili ritardi. Dovrebbero funzionare su Linux, ma lo sperimenterò prossimamente (non è facile procurarsi hardware vario su cui fare prove).

Prima di acquistare un masterizzatore, assicuratevi che sia supportato da Linux. Nel CD-WRITING-HOWTO ci sono i puntatori alle pagine con l'hardware supportato e non supportato.

Se pensate di fare più di qualche masterizzazione occasionale oppure tra il vostro lavoro c'è anche la preparazione e il test di parecchi CDROM, valutate bene la possibilità di prendere un sistema SCSI: le prestazioni rispetto ad un sistema EIDE si vedono, specie con Linux e a pieno carico (tipicamente in multitasking). Le applicazioni audio soffrono quando operazioni pesanti coinvolgono unità EIDE, mentre viaggiano senza problemi se sono al lavoro solo unità SCSI.

Un controller SCSI poi è inseribile anche in un sistema EIDE, e si possono usare indistintamente unità EIDE ed unità SCSI (sono però da preferire di queste ultime durante le operazioni di scrittura del CDROM).

A casa ho preso ad inizio anno un controller SCSI Adaptec con un HD da 2Gb, e di recente un masterizzatore Plexwriter. Ho fatto la spesa in due tempi, ed ho preso roba abbastanza solida (o almeno lo spero). Se qualcuno vuole masterizzare seriamente (cioè spesso e comodamente) consiglio di non risparmiare sull'hardware. Il software si trova facilmente e generalmente lo si trova nelle normali distribuzioni Linux; comunque non costa più di qualche scatto telefonico (i driver generalmente allegati al masterizzatore non servono). :-)

Il software

Qui vengono in aiuto moltissimi programmi. A meno di avere applicazioni speciali non per PC, da Linux potete fare ogni tipo di CDROM, utilizzando quasi esclusivamente software open source, e per di più facile da reperire.

Nelle varie distribuzioni trovate già quasi tutto, sicuramente in Debian trovate tutto il necessario per sfornare CD appena finita l'installazione.

Sono necessari gli strumenti per preparare le varie tracce, cat (in genere è fornito di sistema) e mkisofs per le tracce dati, cdda2wav, sox e altri per le tracce audio.

Per scrivere le tracce preparate sul supporto fisico ci vuole il programma apposito. Attualmente ce ne sono due: cdwrite e cdrecord. Oltre a questi ci sono le varie interfaccie grafiche, che però alla fin fine si appoggiano su questi comandi base (è più facile inserire il supporto per un nuovo masterizzatore in cdrecord e fare in modo che sia usato anche nell'interfaccia grafica che inserire lo stesso codice in più pacchetti diversi). L'interfaccia grafica a mkisofs e cdrecord si chiama xcdroast.

cdwrite è il primo programma di masterizzazione sviluppato sotto Linux. È molto semplice da usare (e pure da compilare!). Purtroppo poi è stato abbandonato, quindi le nuove funzionalità si trovano tutte su cdrecord.

cdrecord lo trovate già su molte distribuzioni (nella Debian 2.0 è presente la versione 1.6), eventualmente basta prendere i sorgenti, lanciare il comando ./Gmake.linux e prelevare l'eseguibile nella directory cdrecord/OBJ/unknown-linux-cc (magari mettendolo in /usr/local/sbin per comodità).

Primi esperimenti

L'uso dettagliato dei vari programmi lo spiegherò nelle prossime puntate. Per chi ha fretta e vuole iniziare a fare esperimenti riassumo un po' di comandi base. La preparazione della traccia dati si fa con mkisofs, dove un accenno è giò stato dato nel Pluto Journal di settembre 1997 (link articolo); ma sarà sicuramente ripreso presto. La preparazione delle tracce audio la vedremo in seguito.

I comandi usati in questa sezione sono utilizzabili solo dall'utente root, a meno di impostare opportunatamente i diritti di lettura nel dispositivo del CDROM (però non vale la pena: essendo un'operazione delicata, viene fatta direttamente da root, eventualmente riservando una macchina dove l'accesso a root ce l'hanno più persone fidate).

Il nuovo masterizzatore SCSI

Vediamo un attimo di provare il masterizzatore SCSI appena comprato. La prima cosa da fare è collegarlo alla catena SCSI e vedere se i collegamenti sono a posto. Generalmente lo si verifica all'avvio del sistema, quando durante la scansione dei dispositivi SCSI appare il masterizzatore nell'elenco dei dispositivi rilevati. La prova reale che i collegamenti sono fatti bene e che in linea di massima il dispositivo funziona si ha mettendo un CD registrato nel masterizzatore e provando a montarlo nel sistema (tramite /dev/scd0 se è l'unico lettore di CD della catena SCSI, oppure /dev/scd1 e così via).

Appena certi che il masterizzatore è riconosciuto come unità SCSI e funziona come lettore bisogna vedere se funziona (è supportato) anche come masterizzatore, e per le nostre prove usiamo cdrecord. Vediamo un attimo la situazione del bus SCSI:
root@host:~# cdrecord -scanbus

L'output sulla mia macchina è:

Cdrecord release 1.6 Copyright (C) 1995-1998 Jörg Schilling
scsibus0:
                  0) *
                  1) 'SEAGATE ' 'ST52160N        ' '0285' Disk
                  2) *
                  3) *
                  4) *
                  5) *
                  6) 'PLEXTOR ' 'CD-R   PX-R412C ' '1.03' Removable CD-ROM
                  7) *

Il masterizzatore è il dispositivo 6 del bus 0, quindi il dispositivo da specificare a cdrecord (nel formato bus,id,lun) è 0,6,0. Vediamo se il masterizzatore è riconosciuto e supportato:

root@host:~# cdrecord dev=0,6,0 -v -checkdrive
Cdrecord release 1.6 Copyright (C) 1995-1998 Jörg Schilling
TOC Type: 1 = CD-ROM
scsidev: '0,6,0'
scsibus: 0 target: 6 lun: 0
Device type    : Removable CD-ROM
Version        : 2
Response Format: 2
Capabilities   : SYNC LINKED 
Vendor_info    : 'PLEXTOR '
Identifikation : 'CD-R   PX-R412C '
Revision       : '1.03'
Device seems to be: Generic mmc CD-R.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags   : SWABAUDIO

Sembra di sì, quindi se c'è già da qualche parte un'immagine ISO9660 da scrivere su CD, il comando da dare è:
root@host:~# cdrecord dev=0,6,0 -dummy -v -eject speed=4 nomefile

Per questa volta ho usato l'opzione -dummy. Così facendo l'operazione viene svolta, ma con il laser spento. Questo serve a vedere se il masterizzatore funziona, riesce ad avere il corretto flusso di dati e arriva a completare l'operazione con successo. Le prime volte che masterizzate o quando lo fate in condizioni un po' anomale, provate con questa opzione. Poi appena prendete mano con il sistema lo potete fare la scrittura diretta senza il test con l'opzione -dummy.

Per maggiori informazioni

Se non avete tempo di aspettare, potete leggere alcune informazioni sul CD-Writing-HOWTO, che contiene altre URL ai vari programmi per masterizzare. Il CD-Writing-HOWTO lo trovate già tradotto in italiano nell'area della documentazione del PLUTO Linux User Group e nei vari mirror:
http://www.pluto.linux.it/ildp

E soprattutto non perdetevi i prossimi articoli del Pluto Journal, dove si parlerà in modo più approfondito dei vari programmi che servono per masterizzare.

Alcuni link

CD Writing HOWTO (in italiano, lo trovate tra il materiale Pluto):
http://www.pluto.linux.it/ildp/HOWTO/CD-Writing-HOWTO.html

Home page di cdrecord (in inglese):
http://www.fokus.gmd.de/nthp/employees/schilling/cdrecord.html

Mailing list (in inglese):
cdwrite@lists.debian.org (per iscriversi mandare un messaggio contenente la parola ``subscribe'' a cdwrite-request@lists.debian.org.

di Michele Dalla Silvestra


[precedente] Localizzare - Copertina - Colori in bash [successivo]