Avanti Indietro Indice

3. Scrittura dei CD-R

"Se anche ti trasformi in fumo non credo smetterò di divertirmi mentre bruci." (Imperatore romano Nerone mentre bruciava i suoi CD classici, 64A.C. Non aveva capito molto.)

La scrittura dei CD-R si fa in 2 passi sotto Linux:

Questo capitolo descrive i passi per la creazione di CD audio e dati in maggior dettaglio.

3.1 Scrivere CD-ROM (solo dati)

Attenzione, mettere insieme il software di solito è una cosa più lunga di quanto uno non si aspetti. Stai attento perché file mancanti non possone essere aggiunti una volta scritto e finalizzato il CD.

Tieni sempre in mente che una parte dello spazio libero del CD deve essere usato per mantenere le informazioni del filesystem ISO9660. Di solito questo occupa non molti megabyte: per dare un'idea diciamo che 620MB di dati ci stanno di sicuro su un CD-R da 650MB,

Creare un'immagine del successivo CD-ROM

Prima di usare qualsiasi supporto (tipo floppy, hard-disk o CD) questo deve avere un filesystem (in lingua DOS: essere formattato). Il filesystem è responsabile di organizzare e incorporare i file che dovrebbero essere scritti sul supporto.

Le solite utility per creare filesystem su partizioni dell'hard disk scrivono su di esse un filesystem vuoto, che viene poi montato e riempito con dei file quando servono all'utente. Allora, un CD-R è scrivibile una sola volta, giusto? Possiamo scriverci sopra un filesystem vuoto, quindi formattarlo, ma poi resterebbe vuoto a vita. Questo è vero anche per i CD-RW visto che non si possono cambiare settori arbitrari, ma bisogna cancellare l'intero contenuto.

Dunque, quello che ci serve è un aggeggio che crei un filesystem mentre copiamo i file sul CD. L'utility si chiama mkisofs. Un uso tipico è simile a questo:

mkisofs  -r   -o cd_image   private_collection/
              `---------'   `-----------------'
                   |               |
             file immagine   directory sorgente

L'opzione '-r' imposta i permessi dei file perché siano leggibili da tutti sul CD e attiva le estensioni Rock Ridge. Questo è quello che si vuole di solito e l'uso dell'opzione è raccomandato a meno di non sapere esattamente quello si sta facendo (Attento: senza '-r' il punto di montaggio si becca i permessi di private_collection!).

mkisofs cercherà di mappare tutti i nomi di file nel formato 8.3 usato dal DOS per assicurare la massima compatibilità. In caso di conflitti per i nomi (file diversi hanno lo stesso nome 8.3), vengono usati dei numeri nei nomi e informazioni a proposito del nome scelto sono stampate sullo STDERR (che poi è lo schermo, di solito). Niente panico: sotto Linux non vedrete mai questi nomi in formato 8.3 perché Linux usa le estensioni Rock Ridge che contengono le informazioni dei file originali (permessi, nome ecc.).

Magari ora ti stai chiedendo perché diavolo non spedire l'output di mkisofs direttamente al masterizzatore. Per 3 ottimi motivi:

Il metodo per scrivere CD-R in un unico passo verrà descritto più avanti.

Si potrebbe anche pensare di creare una partizione extra per fare tutto questo e scrivere l'immagine sulla partizione invece che su un file. Non sono d'accordo su questa strategia perche se per caso scrivi sulla partizione sbagliata (perché hai scritto male il comando), puoi anche perdere l'intero sistema Linux (insomma: a me è successo). In più è uno spreco di spazio su disco perché l'immagine del CD è un dato temporaneo che può essere cancellato dopo aver scritto il CD. Comunque, usare partizioni grezze ti risparmierebbe il tempo di cancellare file di 650MB. (Se hai spazio su disco sufficiente una partizione extra ti permette di risparmiare il tempo di cancellazione dell'immagine.)

Testare l'immagine del CD

Linux ha la possibilità di montare file come se fossero partizioni. Questa capacità è utilissima per controllare che la disposizione delle directory e i permessi sull'immagine siano ottimali. Anche se i dischi non costano molto il processo di scrittura è comunque abbastanza lungo e se non altro potresti evitare di perdere tempo con un veloce test.

Per montare il file cd_image creato prima sulla directory /cdrom impartisci il comando

mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom

Ora puoi ispezionare i file sotto /cdrom - essi appaiono esattamente come se fossero su un vero e proprio CD. Per smontare l'immagine del CD basta dire umount /cdrom. (ATTENZIONE: Se usi kernel di Linux più vecchi della v. 2.0.31 l'ultimo file su /cdrom potrebbe non essere completamente leggibile. Usa kernel più recenti come la v. 2.0.36. L'opzione -pad di cdrecord si applica ai soli CD audio; per poterla usare anche con mkisofs è necessario una patch, la cui utilità è più o meno quella di applicare un upgrade a un kernel senza bug.)

Nota:

alcune antiche versioni di mount non sono in grado di usare i device loopback. Se hai ancora una versione così vecchia forse è ora di aggiornare il sistema.

Parecchia gente ha già chiesto di inserire in questo HOWTO informazioni su come procurarsi le più recenti utility mount. Io rifiuto sempre. Se la tua distribuzione Linux ha una versione troppo vecchia di mount: riportalo come un bug. Se la tua distribuzione di Linux non è facilmente aggiornabile: riportalo come un bug.

Se avessi incluso tutte le informazioni necessarie per aggirare i bug in distribuzioni Linux mal progettate questo HOWTO sarebbe stato mooolto più lungo e difficile da leggere.

Scrittura dell'immagine sul CD

Non c'è più molto da fare. Se non hai già provato a farlo è ora di dare il comando

cdrecord -scanbus

Questo ti indicherà a quali periferiche SCSI è collegato il tuo masterizzatore. Tutti gli altri metodi per individuare le informazioni così gentilmente stampate da cdrecord sono stati rimossi da questo HOWTO (specialmente lo schema di denominazione per periferiche SCSI generiche, in qualche modo pericoloso).

Prima di mostrarti l'ultimo comando, lascia che ti avverta di una cosa: i masterizzatori hanno bisogno di essere alimentati con un flusso di dati costante in quanto hanno solo dei piccoli buffer per i dati. Dunque il processo di scrittura del CD non deve essere interrotto oppure ti risulterà un CD inusabile. È facile interrompere il processo di scrittura cancellando un grosso file. Per esempio, mettiamo il caso che tu voglia cancellare un file di 650MB: il kernel deve aggiornare informazioni per circa 650.000 blochhi sull'hard-disk (mettendo il caso che tu abbia una dimensione di blocco pari a 1KByte per il tuo filesystem). Questa operazione ha bisogno di un po' di tempo ed è facile che rallenti l'attività del disco abbastanza perché il flusso di dati si interrompa per alcuni secondi. Comunque, leggere la posta, navigare sul web o persino compilare un kernel generalmente non interrompono il processo su macchine moderne. (NDT: in generale, se avete un po' di cognizione, non fatevi troppi problemi ad usare la macchina. Vi faccio il mio esempio: io ho un sistema SCSI e durante una copia diretta, posto di aver assegnato un buffer di 20MB al processo di scrittura, il mio k6-2 350MHZ non viene usato per più del 3%. Capite come ciò non costituisca un grosso sforzo per la macchina.)

Tieni presente che nessun masterizzatore può riposizionare il laser e riprendere da una posizione precisa sul CD se viene disturbato. Quindi anche forti vibrazioni oppure shock meccanici probabilmente distruggeranno il CD in fase di scrittura.

OK, se sei mentalmente preparato, indossa una tunica nera, moltiplica l'ID SCSI del masterizzatore per la sua revisione ANSI e accendi tante candele quant'è il risultato, recita 2 versi dell'ASR-FAQ (newsgroup alt.sysadmin.recovery) e infine scrivi:

shell> SCSI_BUS=0   # dalla lista 1 "scsibus0:"
shell> SCSI_ID=6    # dalla lista 1 "TOSHIBA XM-3401"
shell> SCSI_LUN=0
shell> cdrecord -v speed=2 dev=$SCSI_BUS,$SCSI_ID,$SCSI_LUN \
                   -data  cd_image

# come sopra ma più in breve:
shell> cdrecord -v speed=2 dev=0,6,0  -data  cd_image

Per una maggiore comprensibilità la coordinate del masterizzatore sono memorizzate in 3 variabili d'ambiente chiamate SCSI_BUS, SCSI_ID, SCSI_LUN. L'opzione -data non è obbligatoria ma viene impostata per rendere la riga di comando comparabile a quella usata per scrivere CD audio.

Se vuoi usare cdrecord per riscrivere un CD-RW devi usare l'opzione "blank=..." per cancellare il vecchio contenuto. Fatti un favore, leggi la pagina man per maggiori informazioni su come svuotare un CD-RW.

In tempi in cui tutti escluso me (escludete pure anche me NDT) hanno a casa una macchina a 400 MHZ si può in genere passare l'output di mkisofs direttamente a cdrecord:

shell> IMG_SIZE=`mkisofs -R -q -print-size private_collection/  2>&1 \
  | sed -e "s/.* = //"`
shell> echo $IMG_SIZE
shell> [ "0$IMG_SIZE" -ne 0 ] && mkisofs -r  private_collection/  \
|cdrecord  speed=2  dev=0,6,0
            tsize=${IMG_SIZE}s  -data  -
#     non dimenticare la s --^         ^-- leggi i dati da STDIN

Il primo comando è un'esecuzione mirata a determinare la dimensione dell'immagine (è necessaria la versione di mkisofs della distribuzione di cdrecord perché questo funzioni). Può darsi che il tuo masterizzatore non richieda di conoscere la dimensione dell'immagine da scrivere, in tal caso è possibile saltare questo passo. La dimensione stampata deve essere passata come parametro tsize a cdrecord (è mantenuta nella variabile d'ambiente IMG_SIZE). Il secondo comando è una sequenza di cdrecord e mkisofs accoppiati con una pipe.

3.2 Scrittura di CD audio

La procedura per i CD audio è molto simile ai passi descritti sopra. Le due differenza principali sono che i CD audio consistono di tracce che sono organizzate in immagini separate. Quindi se vuoi avere dieci tracce su un CD devi anche preparare dieci immagini. (NDT: con cdrdao non è necessaria la creazione di file immagine multipli) L'altra differenza è che il formato delle immagini non è ISO-9660 (o un altro filesystem a scelta) ma è "campionamenti a 16 bit stereo in formato PCM a 44100 campionamenti/sec (44.1kHz)".

Una utility per convertire i tuoi file audio nel formato richiesto è sox. Il suo utilizzo è immediato

shell> sox  killing-my-software.wav  killing-my-software.cdr

Questo comando converte la canzone killing-my-software dal formato WAV al formato CDR-audio. Dai un'occhiata alla pagina man di sox per maggiori dettagli a proposito dei formati e delle estensioni per i nomi di file che sox riconosce. Siccome la conversione ha bisogno di molto spazio su disco è stata implementata in cdrecord la capacità di scrivere formati WAV e AU senza bisogno di conversione manuale, a patto che i file sonori abbiano estensione .wav o .au (e ovviamente siano in qualità "stereo, 16 bit, 44.1kHz").

Cdrecord scrive le immagini come tracce audio, se l'opzione -audio è specificata. Le altre opzioni sono identiche a quelle usate per scrivere CD di dati (a meno di esigenze particolari). Ecco tre esempi che effettuano la stessa operazione, ma leggono le tracce da formati di file sonori diversi:

shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.cdr track2.cdr...
shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.wav track2.wav...
shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.au  track2.au...

Un caso speciale è rappresentato dai file MPEG Layer 3 che possono essere convertiti nel formato richiesto con il comando "mpg123 -cdr -s track1.mp3 > track1.cdr". L'opzione -cdr assicura che la traccia sia codificata nel modo corretto (vedi sopra). La conversione da WAV a MPEG può essere fatta con LAME per i file WAV (estrarre le tracce da un CD audio con cdda2wav e codificarle in MP3 con LAME). Per creare un CD audio da un insieme di file MP3 è possibile usare la seguente sequenza di comandi:

for I in *.mp3
do
    mpg123 -cdr -s $I | cdrecord -audio -pad -swab -nofix -
done
cdrecord -fix

In dipendenza della velocità della tua macchina può essere necessario abbassare la velocità di scrittura a "speed=1" (opzione di cdrecord). Se usi "speed=4" significa che la macchina deve essere in grado di riprodurre file MP3 a velocità quadrupla. mpg123 ha bisogno di molto tempo di CPU! Se non sei sicuro prova prima una simulazione con -dummy (mantiene il laser spento). Al momento i CD prodotti avranno 2 secondi di pausa fra la tracce audio. Se il tuo masterizzatore supporta la scrittura in modalità "disc-at-once" (DAO), puoi provare le nuove versioni di cdrecord per sbarazzarti delle pause.

DAO

Se vuoi evitare le pause fra le tracce audio è necessario usare la modalità di scrittura disk-at-once e non la track-at-once prima descritta. Il supporto per il DAO attualmente è più avanzato in cdrdao. Dai un'occhiata alla sua homepage per maggiori dettagli. Utilizzando il parametro read-cd di cdrdao sarai persino in grado di creare copie 1:1 di CD audio.

3.3 CD-ROM in modalità mista (Mixed Mode)

Non c'è più molto da dire. Basta indicare il tipo delle (successive) immagini con le opzioni -data e -audio

cdrecord  -v dev=0,6,0  -data  cd_image  -audio  track*.cdr


Avanti Indietro Indice