<!doctype Linuxdoc system>
<article>

<!-- labels1: createdev test utilisation perifgen faq iso ext -->
<!-- labels2: ecrire_cd logiciels noyau supportes possibil marchepa -->
<!-- labels3: montercd -->

<title>HOWTO Graveur de CDs

<author>Winfried Truemper, <tt/&lt;winni@xpilot.org&gt;/, traduit par
Olivier Tharan, <tt/&lt;tharan@int-evry.fr&gt;/

<date>Version 2.4.1, 16 décembre 1997

<abstract>
Ce document parle du processus de gravage de CDs sous Linux.
</abstract>

<toc>

<sect>Introduction
<p>

Ma première expérience avec des graveurs de CDs a été guidée par le
"Linux CD Writer mini-HOWTO" de Matt Cutts
&lt;cutts@cs.unc.edu&gt;. Merci Matt !

Bien que mon intention n'était que de mettre ce document à jour, je l'ai
réécrit à partir du début après avoir réalisé combien tout avait changé
depuis 1994. 

<sect1>Avertissement
<p>
<bf>
Je (Winfried Truemper) rejette toute garantie concernant ce
document, incluant toutes les garanties implicites de mise sur le marché
et d'utilité pour un certain usage ; en aucun cas on ne pourra me tenir
compte de dommages spéciaux, indirects ou consécutifs à, ni d'aucun
dommage quelqu'il soit résultant de la perte d'utilisation, de données ou
de profits, que ce soit dans une action contractuelle, de négligence ou
autre action, découlant de ou en relation avec l'utilisation de ce
document.
</bf>
En gros, lisez et utilisez à vos propres risques.

<sect1>Lectures suggérées
<p>

La FAQ sur les CD-R à <url
url="http://www.cd-info.com/CDIC/Technology/CD-R/FAQ.html"> est une
FAQ générale portant sur les disques compacts enregistrables (CD-R).

Le <it>HOWTO CD-ROM Linux</it> explique tout ce qu'on devrait savoir
sur les lecteurs de CD-ROMs sous Linux. En supplément, vous pourrez
jeter un coup d'oeil sur le <it>HOWTO SCSI Linux</it> et le <it>HOWTO
noyau Linux</it>.

<sect1>Terminologie... Lasers au maximum... Feu !
<p>

<it>CD-ROM</it> veut dire <it>Disque compact à mémoire en lecture
seule</it> (Compact Disc Read Only Memory), un support de stockage
utilisant un laser optique pour lire des trous microscopiques sur un
disque brillant en argent. (La brillance argentée vient d'une couche
aluminisée qui est le support.) Les trous représentent les morceaux
d'information (en quelque sorte) et sont si petits que des milliards
d'entre eux tiennent sur le disque. Un CD est donc un support de
stockage de masse.

Le terme <it>CD-R</it> est une forme abrégée de <it>CD-ROM
enregistrable</it> (Recordable) et se rapporte au CD qui n'a pas ces
"trous microscopiques" sur sa surface... Il est donc vide.

À la place de la couche aluminisée (argentée) un CD-R possède un film
spécial (coloré) dans lequel des "trous microscopiques" peuvent y
être brûlés. Ceci est réalisé en donnant au laser, qui normalement ne
fait que palper les trous, un peu plus de puissance pour qu'il brûle
les trous. Cette action ne peut se faire <bf>qu'une seule fois</bf>
sur un CD-R.

Vous pouvez toutefois laisser certaines parties vides pour une
écriture ultérieure, créant ce qu'on appelle un CD multi-sessions.

Ce HOWTO parle de la tâche d'écrire un CD-R. Bienvenue à bord,
Capitaine.

<sect1>Graveurs de CD-ROM supportés<label id="supportes">
<p>

La liste détaillée des modèles qu'on a vu fonctionner correctement (ou
pas) est disponible à

<quote>
<url url="http://www.shop.de/cgi-bin/winni/lsc.pl">
</quote>

La liste sera incluse dans les versions futures de ce HOWTO. La
plupart des graveurs de CD-ROM SCSI sont supportés et la toute
nouvelle version de cdrecord supporte même les graveurs de CD-ROM
ATAPI.

Si votre matériel n'est pas supporté, vous pouvez toujours utiliser
Linux pour créer une image du CD ultérieur, mais vous devrez alors
utiliser un logiciel sous DOS pour écrire l'image sur le CD-R. (Vous
aurez envie de faire ceci parce que la plupart des logiciels DOS ne
peuvent pas gérer les noms de fichiers longs disponibles avec Linux.)

Dans ce cas, vous pouvez passer toutes les sections relatives au
matériel (celles sur les <it>périphériques SCSI génériques</it> et
<tt>cdwrite/cdrecord</tt>).

<sect1>"Possibilités" supportées<label id="possibil">
<p>

En ce moment les logiciels pour graver des CDs sous Linux supportent les
caractéristiques principales suivantes :

<tscreen><verb>
Caracteristique         cd-write-2.1            cdrecord-1.7
-------------------------------------------------------------
Support ATAPI           non                     oui     
Multisession            en partie               oui

RockRidge               oui (mkisofs)           oui (mkisofs)
El Torito               oui (mkisofs)           oui (mkisofs)
HFS                     oui (mkhybrid)          oui (mkhybrid)
Joliet                  oui (mkhybrid)          oui (mkhybrid)
</verb></tscreen>

<it>RockRidge</it> est un extension qui autorise des noms de fichiers
plus longs et une arborescence de répertoires plus profonde. <it>El
Torito</it> peut permettre de produire des CDs bootables. Veuillez
consulter la documentation jointe pour plus de détails sur ces
possibilités spéciales. <it>HFS</it> permet à un Macintosh de lire le
CD-ROM comme si c'était un volume HFS. <it>Joliet</it> apporte les
noms longs (entre autres choses) à certaines variantes de Windows (95,
NT).

La section <ref id="logiciels"> liste la disponibilité des logiciels
mentionnés.

<sect1>Listes de distribution
<p>

Si vous voulez rejoindre l'équipe de développement (avec l'intention
de les <em/aider/ activement), envoyez un courrier électronique à

<quote>
cdwrite-request@pixar.com
</quote>

et mettez la commande <tt>subscribe</tt> dans le corps du message.

<sect1>Disponibilité
<p>

La toute dernière version de ce document est toujours disponible à
partir de

<quote>
<url url="http://www.shop.de/~winni/linux/">
</quote>

(NdT : en France, c'est à <url url="http://www.freenix.fr/linux/">,
mais la version peut ne pas être la dernière en date.)

<sect>Préparez votre machine Linux pour graver des CD-ROMs
<p>

Avant novembre 1997, les logiciels pour Linux ne supportaient pas les
graveurs de CD-ROM ATAPI. En conséquence, la version actuelle de ce
HOWTO se concentre sur les périphériques SCSI.

La bonne nouvelle est que manipuler des périphériques ATAPI est bien
plus facile et vous pouvez quand même utiliser ce HOWTO si vous
oubliez le terme "périphérique SCSI générique". Pour trouver comment
dialoguer avec des périphériques ATAPI vous pouvez lancer la commande
<tt>cdrecord -scanbus</tt>.

<sect1>Configurez le matériel
<p>

Éteignez votre ordinateur, et branchez le graveur de CDs sur le bus
SCSI.

Assurez-vous que le bus SCSI est terminé proprement et choisissez une
ID SCSI libre pour le graveur. Regardez le HOWTO SCSI Linux si vous
n'êtes pas sûr. Si vous êtes complètement dépassé, demandez à un
expert.

Remettez le courant et regardez les messages que le BIOS du contrôleur
SCSI affiche immédiatement après l'allumage de l'ordinateur.  S'il ne
reconnaît pas votre graveur, revenez à l'étape précédente.  Vous
devriez voir un message comme celui-ci :

(Image manquante ; quelqu'un en a-t-il une copie d'ecran ?)

<sect1>Note sur le gravage de CDs sous Linux
<p>

Au contraire d'autres rumeurs, le noyau Linux <em/n'a pas/ besoin de
patch pour écrire sur des CDs. Bien que le fichier
<tt>drivers/scsi/scsi.c</tt> des sources du noyau contienne les lignes

<tscreen><verb>
                  case TYPE_WORM:
                  case TYPE_ROM:
                    SDpnt->writeable = 0;
</verb></tscreen>

ceci veut seulement dire que ces CDs et WORMs ne sont pas accessibles
en écriture à travers les périphériques standards <tt>/dev/sda</tt> -
<tt>/dev/sdh</tt>, ce qui est normal.

Au lieu d'utiliser ces périphériques, l'écriture des CDs se fait à
travers les <it>périphériques SCSI génériques</it> qui permettent
presque tout -- même l'écriture sur les CDs.

<sect1>Créez les périphériques génériques<label id="perifgen">
<p>

Le <it>HOWTO SCSI Linux</it> dit à propos des périphériques SCSI
génériques :

<quote>
Le pilote de périphérique SCSI générique fournit une interface pour
envoyer des commandes SCSI à tous les périphériques SCSI -- disques,
lecteurs de bandes, CDROMs, mécanismes de changement de support, etc.
</quote>

Parler des périphériques génériques en tant qu'<it>interfaces</it>
veut dire qu'ils fournissent une manière différente d'accéder au
matériel SCSI par rapport aux périphériques normaux.

Cette manière détournée est obligatoire parce que les périphériques
normaux sont faits pour lire des données à l'échelle du bloc à partir
d'un disque, d'un lecteur de bandes ou d'un lecteur de CD-ROM. D'un
autre côté, piloter un graveur de CD-ROM (ou un scanner) est plus
exotique, par exemple on doit pouvoir positionner le laser. Pour avoir
une implémentation propre (et par conséquent rapide) de ces
périphériques normaux, toutes ces actions exotiques doivent être
réalisées à travers les périphériques SCSI génériques.

Puisque l'on peut tout faire au matériel SCSI à travers les
périphériques génériques, ils ne sont pas limités à un usage
spécifique -- d'où le nom <it>générique</it>.

Déplacez-vous dans le répertoire <tt>/dev</tt> et vérifiez la présence
des périphériques SCSI génériques ; la commande <tt>ls</tt> devrait
montrer <tt>sga</tt> - <tt>sgh</tt> :

<tscreen><verb>
                bash> cd /dev
                bash> ls -l sg*
                crw-------   1 root   sys     21,   0 Jan  1  1970 sga
                crw-------   1 root   sys     21,   1 Jan  1  1970 sgb
                crw-------   1 root   sys     21,   2 Jan  1  1970 sgc
                crw-------   1 root   sys     21,   3 Jan  1  1970 sgd
                crw-------   1 root   sys     21,   4 Jan  1  1970 sge
                crw-------   1 root   sys     21,   5 Jan  1  1970 sgf
                crw-------   1 root   sys     21,   6 Jan  1  1970 sgg
                crw-------   1 root   sys     21,   7 Jan  1  1970 sgh
</verb></tscreen>

Si vous n'avez pas ces fichiers de périphériques, créez-les en utilisant
le script <tt>/dev/MAKEDEV</tt> :


<tscreen><verb>
                bash> cd /dev/
                bash> ./MAKEDEV sg
</verb></tscreen>

Maintenant les fichiers de périphériques devraient se montrer.

<sect1>Etablissez l'utilisation des périphériques <it>SCSI générique</it> et <it>loopback</it><label id="utilisation">
<p>

Le noyau Linux nécessite un module qui lui donne la possibilité de
gérer les périphériques SCSI génériques. Si votre noyau courant
possède cette aptitude, elle devrait être listée dans le
pseudo-fichier <tt>/proc/devices</tt> :

<tscreen><verb>
                bash> cat /proc/devices
                Character devices:
                 1 mem
                 2 pty
                 3 ttyp
                 4 ttyp
                 5 cua
                 7 vcs
                21 sg          <---------- veut dire "peripherique SCSI
                30 socksys                            generique"

                Block devices:
                 2 fd
                 7 loop        <---------- on peut meme utiliser le
                 8 sd                      loopback
                11 sr          <---------- veut dire "CD-ROM SCSI"
</verb></tscreen>

Vous devrez peut-être taper la commande <tt>insmod sg</tt>, <tt>insmod
loop</tt> ou <tt>insmod sr_mod</tt> pour charger le module dans le
noyau.  Re-vérifiez après avoir essayé ceci.

Si l'une d'entre elle ne fonctionne pas, vous devez reconfigurer votre
noyau et le recompiler.

<tscreen><verb>
                 bash$ cd /usr/src/linux
                 bash$ make config

                 [..]
                 *
                 * Additional Block Devices
                 *
                 Loopback device support (CONFIG_BLK_DEV_LOOP) [M/n/y/?] M

                 [..]
                 *
                 * SCSI support
                 *
                 SCSI support (CONFIG_SCSI) [Y/m/n/?] Y
                 *
                 * SCSI support type (disk, tape, CD-ROM)
                 *
                 SCSI disk support (CONFIG_BLK_DEV_SD) [Y/m/n/?] Y
                 SCSI tape support (CONFIG_CHR_DEV_ST) [M/n/y/?] M
                 SCSI CD-ROM support (CONFIG_BLK_DEV_SR) [M/n/y/?] M
                 SCSI generic support (CONFIG_CHR_DEV_SG) [M/n/y/?] M

                 [..]
                 ISO9660 cdrom filesystem (CONFIG_ISO9660_FS) [Y/m/n/?] M
</verb></tscreen>

Veuillez noter que j'ai omis les questions un peu moins importantes.

<sect1>Construire et installer le noyau<label id="noyau">
<p>

Si vous avez des questions concernant ceci, la lecture suggérée est le
HOWTO Noyau Linux. De plus, votre distribution Linux devrait contenir de
la documentation sur ce problème.

(Astuce : pendant la recompilation, vous pouvez continuer sur les étapes 
<ref id="createdev">
et au-delà)

<sect1>Redémarrer l'ordinateur pour amorcer le changement
<p>

Ne paniquez pas si le noyau Linux affiche les messages plus rapidement que
vous ne pouvez les lire, au moins l'initialisation des périphériques SCSI
peut être réaffichée avec la commande <tt/dmesg/ :

<tscreen><verb>
        scsi0 : NCR53c{7,8}xx (rel 17)
        scsi : 1 host.
        scsi0 : target 0 accepting period 100ns offset 8 10.00MHz
        scsi0 : setting target 0 to period 100ns offset 8 10.00MHz

          Vendor: FUJITSU   Model: M1606S-512        Rev: 6226
          Type:   Direct-Access                      ANSI SCSI
        Detected scsi disk sda at scsi0, channel 0, id 0, lun 0

          Vendor: NEC       Model: CD-ROM DRIVE:84   Rev:  1.0a
          Type:   CD-ROM                             ANSI SCSI
        Detected scsi CD-ROM sr0 at scsi0, channel 0, id 4, lun 0

        scsi : detected 1 SCSI disk total.
        SCSI device sda: hdwr sector= 512 bytes. Sectors= 2131992
</verb></tscreen>

On a montré ci-dessus uniquement la partie des messages
d'initialisation qui rapportent la détection des périphériques SCSI
présents physiquement.

<sect1>Création des <it>périphériques loopback</it><label id="createdev">
<p>

Déplacez-vous dans le répertoire <tt>/dev</tt> et vérifiez la présence
des <it>périphériques loopback</it>. Ce n'est pas grave si vous n'avez
pas ces périphériques, mais c'est pratique si vous les avez (Voir la
section <ref id="test">). Si vous les avez déjà, la commande
<tt>ls</tt> devrait montrer <tt>loop0</tt> - <tt>loop7</tt> :

<tscreen><verb>
                bash$ cd /dev
                bash$ ls -l loop*
                brw-rw----   1 root  disk    7,   0 Sep 23 17:15 loop0
                brw-rw----   1 root  disk    7,   1 Sep 23 17:15 loop1
                brw-rw----   1 root  disk    7,   2 Sep 23 17:15 loop2
                brw-rw----   1 root  disk    7,   3 Sep 23 17:15 loop3
                brw-rw----   1 root  disk    7,   4 Sep 23 17:15 loop4
                brw-rw----   1 root  disk    7,   5 Sep 23 17:15 loop5
                brw-rw----   1 root  disk    7,   6 Sep 23 17:15 loop6
                brw-rw----   1 root  disk    7,   7 Sep 23 17:15 loop7
</verb></tscreen>

Si vous n'avez pas ces fichiers de périphériques, créez-les en utilisant
le script <tt>/dev/MAKEDEV</tt> :

<tscreen><verb>
                bash> cd /dev/
                bash> ./MAKEDEV loop
</verb></tscreen>

La dernière commande ne réussit que si vous avez le module
<tt>loop</tt> dans votre noyau (voir la section <ref id="utilisation">
pour la manipulation des modules). Si <tt>insmod loop</tt> ne donne
rien, vous devez attendre que le nouveau noyau soit correctement
installé (voir <ref id="noyau">.

<sect1>Obtenez le logiciel pour graver les CDs<label id="logiciels">
<p>

<sect2>Utilitaires en ligne de commande
<p>

Le paquetage suivant est obligatoire pour générer des maquettes de CD-Rs :

<quote>
<url url="ftp://tsx-11.mit.edu/pub/linux/packages/mkisofs/">
(mkisofs)<p>
<url url="ftp://ftp.ge.ucl.ac.uk/pub/mkhfs"> (mkhybrid)
</quote>

Selon le modèle de votre graveur de CDs (voir <ref id="supportes">),
l'un des logiciels suivants est nécessaire pour écrire les maquettes
sur les CD-Rs :

<quote>
<url url="ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/"> (cdrecord)<p>
<url url="ftp://sunsite.unc.edu/pub/Linux/utils/disk-management/"> (cdwrite)
</quote>

Veuillez utiliser les miroirs de ces serveurs FTP les plus proches de
vous ou chargez-les à partir d'un CD.

Assurez-vous absolument que vous avez la version 2.0 ou supérieure de
<tt>cdwrite</tt>.  Aucune version plus ancienne et surtout aucune
version beta ne fonctionneront ! Ne croyez pas les pages de manuel du
(vieil) <tt>mkisofs</tt> qui indique que vous avez besoin de la
version 1.5 de <tt>cdwrite</tt>.

Pour avoir des informations sur le portage de cdwrite sur Irix et AIX,
visitez l'URL

<quote>
<url url="http://lidar.ssec.wisc.edu/~forrest/">
</quote>

Si vous utilisez un noyau antérieur à 2.0.31, vous aurez envie de
patcher <tt>mkisofs</tt> pour contourner un bogue du code du système
de fichiers de Linux. La distribution Debian fournit un patch pour la
version 1.05 de <tt/mkisofs/ qui lui ajoute l'option <tt/-K/ (voir
<ref id="iso">) ; il est disponible sur

<quote>
<url url="ftp://ftp.debian.org/pub/debian/rex/source/misc/mkisofs&lowbar;1.11-1.diff.gz">
</quote>

Ce patch n'est nécessaire que si vous voulez monter l'image du CD à
travers le périphérique loopback (voir <ref id="test">).

<sect2>Une interface utilisateur graphique (optionnelle)
<p>

X-CD-Roast est un programme de gravage de CDs fonctionnant entièrement
sous X, et succède à <tt>cdwtools-0.93</tt>. Il est disponible sur

<quote>
<url url="http://www.fh-muenchen.de/home/ze/rz/services/projects/xcdroast/e&lowbar;overview.html">
</quote>

En ce moment X-CD-Roast est basé sur une version patchée de
cdwrite-2.0 et possède par conséquent les mêmes caractéristiques (voir
<ref id="possibil">). Les versions futures pourraient être basées sur
le logiciel de remplacement cdrecord.

<sect>Écrire un CD<label id="ecrire_cd">
<p>

``Si en fumée tu te transformes, je ne cesserai de jouer pendant que
tu te consumes.'' (L'empereur Néron en écrivant ses propres CDs
classiques ; il n'avait rien compris)

En général l'écriture d'un CD se fait en deux étapes :

<itemize>

<item>récolter les logiciels désirés et les empaqueter en un grand
fichier avec <tt>mkisofs/mkhybrid</tt> ;

<item>écrire le grand fichier sur le CD enregistrable avec
<tt>cdwrite</tt> ou <tt>cdrecord</tt>.

</itemize>

Il est aussi possible de combiner les deux étapes en une avec un tube mais
ceci n'est pas recommandé parce que ce n'est pas fiable. Voir ci-dessous.

<sect1>Déterminez à quel périphérique SCSI générique le graveur est attaché
<p>

(Veuillez noter : la façon actuelle de nommage des périphériques SCSI
sous Linux est compliquée à souhait et pas assez fiable. Le fait que
je la décrive ici en maints détails ne devrait pas être mal interprété
comme la confirmation de cette état de faits. Les personnes possédant
un graveur de CD-ROMs ATAPI peuvent essayer "cdrecord -scanbus" pour
détecter le bon périphérique et sauter le reste de cette section.)

Après avoir suivi toutes les étapes du dernier chapitre, votre système
devrait être capable de gérer le gravage de CDs. Cette section peut être
utilisée comme preuve que tout fonctionne comme prévu.

Lancez la commande <tt>dmesg</tt>. Elle devrait rapporter les messages
du noyau Linux, avec ceux imprimés lors du démarrage (limitation :
seulement les 200 derniers) et contient des informations sur le
graveur de CDs connectés au bus SCSI.

Exemple simple :

<tscreen><verb>
              Vendor: YAMAHA  Model: CDR100       Rev: 1.11
              Type:   WORM                        ANSI SCSI revision: 02
            Detected scsi CD-ROM sr1 at scsi0, channel 0, id 3, lun 0
</verb></tscreen>

Cette machine possède quatre périphériques SCSI connectés (vous ne
pouvez pas le voir donc je vous le dis), avec les ID SCSI allant de 0
à 3. Le graveur est le quatrième périphérique SCSI physiquement
présent et doit donc être connecté sur <tt>/dev/sgd</tt> (le quatrième
périphérique SCSI générique quand on compte à partir de la lettre
a). Dans ce cas, la commande

<tscreen><verb>
            cdwrite  --eject  --device /dev/sgd
</verb></tscreen>

ouvre le tiroir et est un test pour voir si tout fonctionne
correctement. Un exemple plus compliqué :

<tscreen><verb>
            scsi0 : AdvanSys SCSI 1.5: ISA (240 CDB)
            scsi1 : Adaptec 1542
            scsi : 2 hosts.

              Vendor: HP      Model: C4324/C4325  Rev: 1.20
              Type:   CD-ROM                      ANSI SCSI revision: 02
            Detected scsi CD-ROM sr0 at scsi0, channel 0, id 2, lun 0

              Vendor: IBM     Model: DPES-31080   Rev: S31Q
              Type:   Direct-Access               ANSI SCSI revision: 02
            Detected scsi disk sda at scsi1, channel 0, id 0, lun 0

            scsi : detected 1 SCSI cdrom 1 SCSI disk total.
            SCSI device sda: hdwr sector= 512 bytes.
</verb></tscreen>

Dans cet exemple deux contrôleurs SCSI hébergent un périphérique SCSI
chacun. Quel gâchis (ils sont capables d'héberger jusqu'à sept
périphériques chacun). Ce n'est pas ma configuration alors arrêtez de
demander si j'ai trop d'argent... Cependant dans le but d'être un
exemple dont on peut se passer, cette configuration est
excellente. :-)

Dans l'exemple ci-dessus le graveur de CD a l'ID SCSI 2 mais elle est
associée au premier périphérique SCSI générique <tt>/dev/sga</tt> parce
que c'est le premier périphérique SCSI physiquement présent que Linux a
détecté. J'espère que ceci montre clairement que l'ID SCSI d'un
périphérique n'a rien à voir avec le périphérique générique associé.

Deux questions restent en suspens : qu'arrive-t-il si vous prenez le
mauvais périphérique ? Si vous ne spécifiez ni l'option
"--&lt;MANUFACTURER&gt;" ni n'écrivez de données sur le périphérique,
en général un message d'avertissement est affiché et rien de plus :

<tscreen><verb>
                bash$ cdwrite  --eject  --device /dev/sgb

                Unknown CD-Writer; if this model is compatible with any
                supported type, please use the appropriate command line
                flag.

                Manufacturer:  IBM
                Model:         DPES-31080
                Revision:      S31Q
</verb></tscreen>

Dans ce cas le périphérique <tt>/dev/sbg</tt> est un disque dur SCSI
(d'IBM).

Si vous écrivez des données sur le mauvais périphérique, vous en écrasez
le contenu d'origine et endommagerez votre système de façon probablement
irrémédiable. Faites attention, cela m'est déjà arrivé par accident.

<sect1>Rassembler les logiciels
<p>

En général cela prend plus de temps qu'on ne le croit ; Rappelez-vous
que les fichiers manquants ne pourront pas être ajoutés une fois que
le CD sera écrit. :-)

Gardez aussi à l'esprit qu'un certain montant de l'espace libre d'un CD
est utilisé pour stocker les informations sur le système de fichiers ISO
9660 (en général quelques Mo).

<sect1>Stocker les données sur un CD
<p>

Le terme <it>ISO 9660</it> se rapporte au format dans lequel les
données sont stockées sur le CD Pour être plus précis : c'est le
système de fichiers sur le CD.

Bien sûr, l'apparence des fichiers stockés dans ce format est unifiée
par le noyau Linux comme pour tout autre système de fichiers. Par
conséquent, si vous montez un CD dans l'arborescence des répertoires,
vous ne pouvez pas distinguer son contenu des autres fichiers... à
part le fait qu'on ne peut écrire dessus... même pas pour root. :-)
(Le mécanisme utilisé pour unifier l'apparence des fichiers est appelé
<it>système de fichiers virtuel</it>, en abrégé <it>VFS</it>.

Les possibilités du système de fichiers ISO 9660 ne sont pas si riches
comparées à celles du système de fichiers ext2 qui est normalement
utilisé sous Linux.  Par contre, le CD n'est inscriptible qu'une seule
fois et certaines possibilités n'ont même pas de sens. Les limitations
du système de fichiers ISO 9660 sont :

<itemize>

<item>uniquement huit niveaux de sous-répertoires autorisés (comptés à
partir du répertoire racine du CD) (utilisez les extensions RockRidge
pour augmenter ce nombre) ;

<item>longueur maximale des noms de fichiers : 32 caractères ;

<item>capacité de 650 Mo.
</itemize>

<sect1>Créer un système de fichiers ISO 9660<label id="iso">
<p>

Avant de pouvoir utiliser un support de stockage (par exemple une
disquette, un disque dur ou un CD), il doit avoir un système de
fichiers (en langage DOS : être formaté). Ce système de fichiers est
responsable de l'organisation et de l'incorporation des fichiers qui
devraient être stockés sur le support.

Bon, un CD inscriptible ne l'est qu'une fois et donc si nous y
écrivons un système de fichiers vide, il serait formaté -- mais
resterait pour l'éternité complètement vide. :-)

Nous avons donc besoin d'un outil qui crée le système de fichiers en
même temps qu'il copie les fichiers sur le CD. Cet outil s'appelle
<tt>mkisofs</tt>. Une utilisation simple ressemble à ceci :

<tscreen><verb>
                 mkisofs  -r  -o cd_image   collection_privee/
                              `---------'   `----------------'
                                   |                |
                   ecrire la sortie vers    prendre repertoire comme entree
</verb></tscreen>

L'option '-r' positionne les permissions de tous les fichiers pour
être lisibles publiquement sur le CD et permet les extensions Rock
Ridge. C'est ce que l'on veut en général et l'utilisation de cette
option est recommandée jusqu'à ce que vous sachiez ce que vous
faites. (Astuce : sans le '-r', le point de montage prend les
permissions de <tt>collection_privee</tt> !)

Si vous utilisez un noyau Linux antérieur à 2.0.31, vous devriez
ajouter l'option '-K' pour contourner un bogue du code du système de
fichiers. Vous avez besoin de la version patchée de mkisofs pour
cela. Cette option est équivalente à l'option '-P' de
<tt>cdwrite</tt>. Veuillez regarder la page de manuel de
<tt>mkisofs</tt> pour plus de détails.

<tt>mkisofs</tt> essaiera de convertir tous les noms de fichiers au
format 8.3 utilisé par DOS pour assurer une compatibilité maximale. En
cas de conflits de noms (des fichiers différents qui auraient le même
nom 8.3), des numéros sont utilisés dans les noms de fichiers et les
informations sur le nom de fichier choisi sont imprimées sur l'erreur
standard (en général l'écran).

<bf/Ne paniquez pas :/

<quote>
Sous Linux, vous ne verrez jamais ces noms de fichiers 8.3 parce que
Linux utilise les extensions Rock Ridge qui contiennent les
informations d'origine du fichier (permissions, nom de fichier, etc.).
</quote>

Maintenant vous pouvez vous demander pourquoi la sortie de
<tt>mkisofs</tt> n'est pas envoyée directement au périphérique de
gravage. Ceci est dû à deux raisons :

<itemize>

<item><tt>mkisofs</tt> ne connait rien sur la manière de piloter les
graveurs de CD (voir la section <ref id="perifgen">) ;

<item>On ne peut pas compter sur cette méthode (voir <ref id="faq">).

</itemize>

La synchronisation d'un graveur de CD est un point tellement critique
que nous ne le remplissons pas directement avec <tt>mkisofs</tt>
(rappelez-vous que Linux n'est pas un système d'exploitation en temps
réel et que les tâches peuvent être mal temporisées). À la place, il
est recommandé de stocker la sortie de <tt>mkisofs</tt> dans un
fichier séparé sur le disque dur. Ce fichier est alors une image
parfaite du CD à venir et est en fait écrite sur le CD avec l'outil
<tt>cdwrite</tt> dans un deuxième temps.

L'image parfaite est stockée dans un fichier énorme, et vous avez donc
besoin de la même quantité d'espace disque libre que ce que prennent
vos logiciels rassemblés. C'est le problème.

On pourrait penser à créer une partition supplémentaire pour cela et
écrire l'image sur cette partition plutôt que dans un fichier. Je suis
contre cette stratégie parce que si vous écrivez sur la mauvaise
partition (à cause d'une faute de frappe), vous pouvez perdre votre
système Linux en entier. De plus, c'est du gâchis d'espace disque
parce que l'image du CD représente des données temporaires que l'on
pourra effacer après avoir gravé le CD.

<sect1>Tester l'image CD<label id="test">
<p>

Linux a la possibilité de monter des fichiers comme si c'était des
partitions de disques. Ceci est très utile pour vérifier si la
structure des répertoires de l'image du CD est bonne. Pour monter le
fichier <tt>cd_image</tt> créé ci-dessus dans le répertoire
<tt>/cdrom</tt>, envoyez la commande

<tscreen><verb>
        mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom
</verb></tscreen>

Vous pouvez maintenant inspecter les fichiers sous <tt>/cdrom</tt> --
ils apparaissent exactement comme ils le seraient sur un vrai CD. Pour
démonter l'image CD, tapez simplement <tt>umount
/cdrom</tt>. Attention : si vous n'avez pas utilisé l'option '-K' avec
mkisofs, le dernier fichier sur <tt>/cdrom</tt> peut ne pas être
entièrement lisible.

Note :

<quote>
certaines versions anciennes de <tt>mount</tt> ne savent pas manipuler
les périphériques loopback. Si vous avez une version de <tt>mount</tt>
si vieille que ça, c'est une indication pour mettre votre système
Linux à jour.
<p>
Plusieurs personnes m'ont déjà suggéré de mettre des informations sur
la manière d'obtenir les dernières versions de mount dans ce HOWTO.
Je refuse toujours de le faire. Si votre distribution Linux contient
un vieux <tt>mount</tt>, dites-leur que c'est une erreur. Si votre
distribution Linux se met à jour difficilement, dites-leur que c'est
une erreur.
<p>
Si je devais donner toutes les informations nécessaires pour
contourner les erreurs des distributions Linux mal faites, ce HOWTO
serait beaucoup plus gros et dur à lire.
</quote>

<sect1>Remarques sur les disques CD Réinscriptibles vierges
<p>

Le magazine informatique allemand "c't" donne une liste de trucs
concernant les CD vierges dans leur numéro de novembre 1996 :

<itemize>

<item>les disques "sans-noms" (noname) ne sont en général pas de la
plus grande qualité et il vaut mieux ne pas les utiliser ;

<item>si un CD réinscriptible est défectueux, il y a des chances que
ça soit la même chose pour le paquet entier (si vous en avez acheté
plus d'un à la fois) ; vous avez peut-être de la chance et pouvez au
moins utiliser les 500 premiers Mo de tels CDs...

<item>ne touchez pas les CD sur leur face brillante avant l'écriture.

</itemize>

<sect1>Écrivez l'image du CD sur un CD
<p>

Plus grand chose à faire. Avant de vous montrer la dernière commande,
laissez-moi vous avertir que les graveurs de CDs doivent être
alimentés par un flot continu de données parce qu'ils n'ont que de
petits caches de données. Le processus d'écriture de l'image CD sur le
CD ne doit donc pas être interrompu ou bien le résultat est un CD
corrompu.

Pour être sûr que rien ne vient interrompre le processus, virez tous
les utilisateurs de votre système et débranchez le câble
Ethernet... Lisez le <it>Bastard Operator From Hell</it> pour en
apprendre sur la bonne attitude à adopter. ;-)

Si vous êtes prêt mentalement, mettez une blouse noire, multipliez l'ID
SCSI du graveur de CD par son numéro de version et allumez autant de
bougies, récitez deux strophes de la FAQ ASR et finalement tapez :

<tscreen><verb>
        cdwrite --device /dev/sgd cd_image
</verb></tscreen>

ou bien

<tscreen><verb>
        cdrecord -v speed=2 dev=4,0 cd_image
</verb></tscreen>

selon le logiciel que vous voulez utiliser. Vous devez bien sûr
remplacer le périphérique d'exemple par le périphérique SCSI auquel
votre graveur de CD est connecté.

Veuillez noter qu'aucun graveur ne peut repositionner son laser et
continuer au point où il a été dérangé. Par conséquent toute vibration
forte ou même un choc détruira complètement le CD que vous êtes en
train de graver.

<sect1>Si quelque chose va mal...
<p>

...rappelez-vous que vous pouvez toujours utiliser les CD ratés comme
dessous de bouteilles. :-)

<sect>Questions fréquemment posées, avec les réponses<label id="faq">
<p>

<sect1>"À quel point le processus de brûlure est-il sensible ?"
<p>

Réponse : cela dépend de votre graveur. Les graveurs modernes devraient
avoir un tampon de données de 1 Mo à peu près et peuvent tenir une à deux
secondes sans données. Voyez les manuels ou demandez au fabricant si vous
voulez connaître les détails. Indépendamment de la taille de ces tampons,
vous devez garantir un débit constant de 300 Ko/s ou 600 Ko/s sur une
longue période.

Les processus qui utilisent beaucoup le disque, comme la mise à jour
de la base de données <it>locate</it> diminuent le débit maximum et
abimeront certainement le CD ; vous feriez mieux de vérifier que de
tels processus ne sont pas démarrés par <tt>cron</tt>, <tt>at</tt> ou
<tt>anacron</tt> pendant que vous gravez des CD-Rs.

Par contre, certaines personnes m'ont dit qu'elles avaient compilé un
noyau pendant le gravage d'un CD sans aucun problème. Vous aurez bien sûr
besoin d'une machine rapide pour de telles expériences.

<sect1>"La fragmentation a-t-elle des mauvais effets sur le flot ?"
<p>

La fragmentation est en général tellement basse qu'on ne remarque pas son
impact.

Si vous n'en êtes pas certain, regardez les messages imprimés lors du
démarrage, le pourcentage de fragmentation est indiqué lors de la
vérification du système de fichiers. Vous pouvez vérifier cette valeur
avec la commande très dangereuse

<tscreen><verb>
                bash$ e2fsck -n  /dev/sda5        # '-n' est important !
                [partie effacee -- ignorez toute erreur]
                /dev/sda5: 73/12288 files (12.3% non-contiguous)
</verb></tscreen>

Dans cet exemple, la fragmentation semble être très grande -- mais il n'y
a que 73 fichiers très petits sur ce système de fichiers (utilisé sur
<tt>/tmp</tt>)
et la valeur <em/n'est pas/ alarmante.

<sect1>"Est-il possible de stocker l'image CD sur un système de fichier UMSDOS~?"
<p>

Oui. Le seul système de fichiers ni assez fiable ni assez rapide pour
graver des CD est NFS (<it>Network FileSystem</it>, système de
fichiers par le réseau).

J'utilise moi-même UMSDOS pour partager l'espace disque entre Linux et
DOS/Win sur un PC (486/66) dédié au gravage des CDs. 

<sect1>"Y a-t-il un moyen de passer outre les limitations de ISO 9660 ?"<label id="ext">
<p>

Oui. Vous pouvez mettre le système de fichiers qui vous plait sur le CD.
Mais certains systèmes d'exploitation ne pourront rien en faire.

Voici la recette :

<itemize>

<item>créez un fichier vide d'une taille de 650 Mo :

<tscreen><verb>
                dd if=/dev/zero of="fic_vide" bs=1024k count=650
</verb></tscreen>

<item>créez un système de fichiers ext2 sur ce fichier :

<tscreen><verb>
                bash$ /sbin/mke2fs fic_vide
                fic_vide is not a block special device.
                Proceed anyway? (y,n) y
</verb></tscreen>

(NdT : <tt/mke2fs/ demande confirmation de créer le système de fichiers
sur un fichier normal.) ;

<item>montez ce fichier vide à l'aide du périphérique loopback :

<tscreen><verb>
                mount -t ext2 -o loop=/dev/loop1 fic_vide /mnt
</verb></tscreen>

<item>copiez les fichiers vers <tt>/mnt</tt> et démontez-le après ;

<item>utilisez <tt>cdwrite</tt> ou <tt>cdrecord</tt> sur fic_vide (qui
n'est plus vide) comme si c'était une image ISO 9660.

</itemize>

Si vous voulez créer une entrée dans <tt>/etc/fstab</tt> pour un tel CD,
désactivez sa vérification, par exemple :

<tscreen><verb>
        /dev/cdrom      /cdrom  ext2    defaults,ro     0  0
</verb></tscreen>

Le premier 0 veut dire "ne me compte pas dans les dumps", la deuxième
(importante) veut dire "ne vérifie pas les erreurs au démarrage" (fsck
n'arrivera pas à vérifier les erreurs éventuelles sur le CD).

<sect1>"Comment lire et écrire des CDs audio ?"
<p>

Veuillez prendre les paquetages "cdda2wav" et "sox", disponibles sur
sunsite" et ses miroirs :

<quote>
<url url="ftp://sunsite.unc.edu/pub/Linux/apps/sound/cds/cdda2wav0.71.src.tar.gz">
<url url="ftp://sunsite.unc.edu/pub/Linux/apps/sound/convert/sox-11gamma-cb3.tar.gz">
</quote>

<tt>cdda2wav</tt> vous permet de prendre un intervalle spécifique (ou
une plage entière) de votre CD audio et le convertit en un fichier
.wav.  <tt>sox</tt> convertit les fichiers wav dans le format cdda (CD
audio) pour qu'on puisse l'écrire sur le CD-R avec <tt>cdwrite</tt>.

<sect1>"Comment rechercher des périphériques SCSI après le démarrage ?"
<p>

Le fichier <tt>drivers/scsi/scsi.c</tt> contient les informations
suivantes (NdT : traduites en français) :

<tscreen><verb>
/*
 * Utilisation : echo "scsi add-single-device 0 1 2 3" >/proc/scsi/scsi
 * avec "0 1 2 3" remplaces par vos "Carte Canal Id Lun".
 * Considerez ceci comme une caracteristique BETA.
 *     ATTENTION : Ceci n'est pas fait pour brancher vos
 *     peripheriques a chaud. Comme le SCSI n'a pas ete fait
 *     pour ca, vous pouvez endommager votre materiel !
 * Cependant il est peut-etre autorise d'allumer un
 * peripherique deja branche. Il n'est peut-etre pas garanti
 * que ce peripherique ne corrompe pas un transfert de donnees
 * en cours.
 */
</verb></tscreen>

<sect1>"Est-il possible de faire une copie exacte d'un CD de données ?"
<p>

Oui. Mais vous devriez être conscient du fait que toute erreur faite
en lisant l'original (due à la poussière ou à des rayures) donnera une
copie défectueuse.

Premier cas : vous avez un graveur de CDs et un lecteur de CD-ROM
séparé. En tapant la commande :

<tscreen><verb>
cdwrite -v -D /dev/sgc --pad -b  $(isosize  /dev/scd0) /dev/scd0
</verb></tscreen>

ou

<tscreen><verb>
cdrecord -v dev=3,0 speed=2 -isosize /dev/scd0
</verb></tscreen>

vous lisez le flot de données du lecteur de CD-ROM attaché à
<tt>/dev/scd0</tt> et l'écrivez directement sur le graveur par
<tt>/dev/sgc</tt>.

Deuxième cas : vous n'avez pas de lecteur de CD-ROM séparé. Vous devez
utiliser le graveur pour lire le CD-ROM comme ceci :

<tscreen><verb>
dd if=/dev/scd0 of=cdimage bs=1c count=`isosize  /dev/scd0`
</verb></tscreen>

Cette commande est équivalente au résultat de <tt>mkisofs</tt>, vous
devez continuer tel que c'est décrit à la section~<ref
id="ecrire_cd">. Veuillez noter que cette méthode ne fonctionnera pas
sur des CDs audio !

<sect1>"Linux peut-il lire des CDs Joliet ?"
<p>

Oui. Mais vous devez patcher le noyau et le recompiler. Pour plus de
détails, voyez

<quote>
<url
url="http://www-plateau.cs.berkeley.edu/people/chaffee/joliet.html">
</quote>

<sect1>"Comment puis-je lire/monter des CD-ROMs avec le graveur de CDs ?"<label id="montercd">
<p>

Comme vous le feriez avec un lecteur de CD-ROM normal. Aucune astuce
là-dessous. Notez que vous devez utiliser les périphériques <tt/scd/
(CD-ROM SCSI) pour monter les CDs en lecture. Voici un exemple pour
<tt>/etc/fstab</tt> :

<tscreen><verb>
        /dev/scd0       /cdrom  iso9660 ro,user,noauto  0  0
</verb></tscreen>

<sect>Dépannage
<p>

<sect1>Ça ne marche pas : sous Linux<label id="marchepa">
<p>

Veuillez d'abord vérifier que le graveur fonctionne avec un autre
système d'exploitation. Concrètement :

<itemize>

<item>Est-ce que le contrôleur reconnait le graveur comme un
périphérique SCSI ?

<item>Est-ce que le logiciel pilote reconnait le graveur ?

<item>Est-il possible de fabriquer un CD avec les logiciels fournis ?

</itemize>

Si "ça ne fonctionne pas" même sous d'autres systèmes d'exploitation,
vous avez un conflit matériel ou un matériel défectueux.

<sect1>Ça ne marche pas : sous DOS et assimilés
<p>

Essayez d'utiliser Linux. L'installation et la configuration des
pilotes SCSI pour DOS est une horreur. Linux est trop compliqué ? Ha !

<sect1>Erreurs SCSI pendant la phase de gravage
<p>

Il est fort probable que ces erreurs soient dues à :

<itemize>

<item>possibilité de déconnection/reconnection (scatter/gather)
manquante sur le bus SCSI ;

<item>matériel pas assez refroidi ;

<item>matériel défectueux (devrait être détecté par <ref
id="marchepa">).

</itemize>

Sous des circonstances variées, les périphériques SCSI se déconnectent
et se reconnectent par eux-mêmes (de manière électronique) du bus
SCSI. Si cette possibilité n'est pas disponible (vérifiez le
contrôleur et les paramètres du noyau), certains graveurs ont des
problèmes pendant le gravage ou le fixage du CD-R.

En particulier, le pilote SCSI NCR 53c7,8xx a cette possibilité
désactivée par défaut, et vous devriez donc vérifier ceci en premier :

<tscreen><verb>
        NCR53c7,8xx SCSI support                  [N/y/m/?] y
           always negotiate synchronous transfers [N/y/?] (NEW) n
           allow FAST-SCSI [10MHz]                [N/y/?] (NEW) y
           allow DISCONNECT                       [N/y/?] (NEW) y
</verb></tscreen>

<sect>Remerciements
<p>

<descrip>

<tag/Andreas Erdmann &lt;erdmann@zpr.uni-koeln.de&gt;/ a fourni
l'exemple du graveur Yamaha ;

<tag/Art Stone &lt;stone@math.ubc.ca&gt;/ a eu l'idée de mettre des
systèmes de fichiers non ISO 9660 sur un CD ;

<tag/Bartosz Maruszewski &lt;B.Maruszewski@zsmeie.torun.pl&gt;/ a
rapporté des erreurs de prononciation ;

<tag/Bernhard Gubanka &lt;beg@ipp-garching.mpg.de&gt;/ a remarqué le besoin
d'une version récente de mount pour utiliser le périphérique loopback
;

<tag/Brian H. Toby/ a fignolé l'orthographe ;

<tag/Bruce Perens &lt;bruce@pixar.com&gt;/ a donné des informations
sur la liste de distribution cdwrite ;

<tag/Dale Scheetz &lt;dwarf@polaris.net&gt;/ a aidé à améliorer la
section sur la création de l'image du CD ;

<tag/"Don H. Olive" &lt;don@andromeda.campbellsvil.edu&gt;/ a donné
l'URL de l'outil mkhybrid ;

<tag/Edwin H. Kribbs/ a remarqué que '-K' nécessite de patcher mkisofs
;

<tag/Gerald C Snyder &lt;gcsnyd@loop.com&gt;/ a testé l'écriture d'un
CD-ROM ext2 (voir <ref id="ext">) ;

<tag/Ingo Fischenisch &lt;ingo@mi.uni-koeln.de&gt;/ a fourni l'exemple
des deux contrôleurs hébergeant deux périphériques ;

<tag/Janne Himanka &lt;shem@oyt.oulu.fi&gt;/ pointeur vers le patch du
noyau pour lire des CDs Joliet ;

<tag/Joerg Schilling &lt;schilling@fokus.gmd.de&gt;/ informations sur
cdrecord ;

<tag/Jos van Geffen &lt;jos@tnj.phys.tue.nl&gt;/ a noté le problème
dans <ref id="montercd"> ;

<tag/Markus Dickebohm &lt;m.dickebohm@uni-koeln.de/

<tag/Pierre Pfister &lt;pp@uplift.fr&gt;/ a aidé à développer la
recette des copies exactes ;

<tag/Rick Cochran &lt;rick@msc.cornell.edu&gt;/ indice sur dis-/reconnect
désactivé par défaut dans le pilote NCR ;

<tag/Stephan Noy &lt;stnoy@mi.uni-koeln.de&gt;/ des informations et
son expérience sur l'écriture de CDs audio ;

<tag/Stephen Harris &lt;sweh@mpn.com&gt;/ a donné des indices sur
l'écriture des CDs audio ;

<tag/The Sheepy One &lt;kero@escape.com&gt;/ a suggéré l'utilisation
des CD ratés en dessous de bouteilles ;

<tag/Volker Kulhmann &lt;kuhlmav@elec.canterbury.ac.nz&gt;/ a remarqué
que le paquetage <tt/cdwrite/ ne contient pas <tt>mkisofs</tt>.

</descrip>

Fin du HOWTO graveur de CDs sous Linux

</article>