19.6. Création et utilisation de supports optiques (CDs)

Contribution de Mike Meyer.

19.6.1. Introduction

Les CDs se différencient des disques conventionnels par de nombreuses caractéristiques. Au départ, ils n'étaient pas inscriptible par l'utilisateur. Ils sont conçu pour être lut de façon continue sans délai pour déplacer la tête de lecture entre les pistes. Ils sont également plus facile à déplacer entre systèmes que les supports de même taille à cette époque.

Les CDs possèdent des pistes, mais cela fait référence à un ensemble de données qui peuvent être lues de façon continue et non pas à une particularité physique du disque. Pour produire un CD sous FreeBSD, il faut préparer les fichiers de données qui vont constituer les pistes sur le CD, puis écrire les pistes sur le CD.

Le système de fichiers ISO 9660 a été conçu pour gérer ces différences. Malheureusement il incorpore des limites du système de fichiers qui semblaient normale alors. Mais heureusement, il fournit un mécanisme d'extension qui permet au CDs proprement gravés de passer outre ces limites tout en restant lisibles par les systèmes qui ne supportent pas ces extensions.

Le logiciel sysutils/cdrtools comprend mkisofs(8), un programme que vous pouvez utiliser pour produire un fichier de données contenant un système de fichiers ISO 9660. Il dispose d'options pour le support de diverses extensions, et est décrit ci-dessous.

L'outil a utiliser pour graver un CD varie en fonction du type de graveur de CD: ATAPI ou autre. Les graveurs ATAPI utilisent le programme burncd qui fait partie du système de base. Les graveurs SCSI ou USB devraient utiliser l'utilitaire cdrecord du logiciel porté sysutils/cdrtools port. Il est également possible d'utiliser cdrecord et d'autres outils pour lecteurs SCSI sur du matériel ATAPI avec le module ATAPI/CAM.

Si vous voulez un programme de gravure de CD avec une interface graphique, vous devriez jeter un oeil à X-CD-Roast ou K3b. Ces outils sont disponibles sous une version pré-compilée ou à partir des logiciels portés sysutils/xcdroast et sysutils/k3b. X-CD-Roast et K3b nécessitent le module ATAPI/CAM avec des périphériques ATAPI.

19.6.2. mkisofs

L'utilitaire mkisofs(8), qui fait partie du logiciel porté sysutils/cdrtools, produit un système de fichiers ISO 9660 qui est une image de l'arborescence des répertoires dans un système de fichiers UNIX®. L'utilisation la plus simple est:

# mkisofs -o fichierimage.iso /chemin/vers/arborescence

Cette commande créera un fichierimage.iso contenant un système de fichiers ISO 9660 qui est une copie de l'arborescence /chemin/vers/arborescence. Durant le processus de création, les noms de fichiers seront modifiés de façon à respecter les limitations de la norme ISO 9660, et rejettera les fichiers ayant des noms non acceptables pour un système de fichiers ISO.

De nombreuses options sont disponibles pour passer outre ces restrictions. En particulier, -R qui autorise les extensions Rock Ridge communes aux systèmes UNIX®, -J qui active les extensions Joliet utilisées par les systèmes Microsoft, et -hfs peut être utilisé pour créer des systèmes de fichiers HFS utilisés par Mac OS®.

Pour des CDs qui sont destinés à n'être utilisé que sur des systèmes FreeBSD, l'option -U peut être utilisée pour désactiver toutes les restrictions au niveau des noms de fichiers. Quand elle est utilisée avec l'option -R, cela produit une image de système de fichiers qui est identique à l'arborescence FreeBSD d'origine, cependant ce système de fichiers pourra violer la norme ISO 9660 de nombreuses façon.

La dernière option d'usage général est l'option -b. Elle est utilisée pour indiquer l'emplacement de l'image de démarrage à utiliser dans la création d'un CD démarrable « El Torito ». Cette option prend en argument le chemin vers une image de démarrage à partir de la racine de l'arborescence qui va être copiée sur le CD. Par défaut, mkisofs(8) créé une image ISO dans un mode appelé « émulation de disquette », et s'attend donc à une image de démarrage de 1200, 1440 ou 2880 Ko en taille. Certains chargeurs, comme celui utilisé par les disques d'installation de FreeBSD, n'utilisent pas ce mode d'émulation, dans ce cas l'option -no-emul-boot devrait être utilisée. Aussi, si /tmp/monboot contient un système FreeBSD avec une image de démarrage dans /tmp/monboot/boot/cdboot, vous pourrez produire l'image d'un système de fichiers ISO 9660 dans /tmp/bootable.iso de cette façon:

# mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/monboot

Cela étant fait, si vous avez le pilote md configuré dans votre noyau, vous pouvez monter le système de fichiers avec:

# mdconfig -a -t vnode -f /tmp/bootable.iso -u 0
# mount -t cd9660 /dev/md0 /mnt

A ce moment vous pouvez vérifier que /mnt et /tmp/monboot sont identique.

Il existe de nombreuses autres options que vous pouvez utiliser avec mkisofs(8) pour régler finement son comportement. En particulier: les modifications d'une organisation ISO 9660 et la création de disques Joliet et HFS. Voir la page de manuel mkisofs(8) pour plus de détails.

19.6.3. burncd

Si vous disposez d'un graveur de CD ATAPI, vous pouvez utiliser la commande burncd pour graver une image ISO sur un CD. burncd fait partie du système de base, installé sous /usr/sbin/burncd. Son utilisation est très simple, car il dispose de peu d'options:

# burncd -f cddevice data fichierimage.iso fixate

Gravera une copie de fichierimage.iso sur cddevice. Le périphérique par défaut est /dev/acd0. Consultez burncd(8) pour les options pour fixer la vitesse d'écriture, éjecter le CD après gravure, et graver des données audios.

19.6.4. cdrecord

Si vous n'avez pas de graveur de CD ATAPI, vous devrez utiliser cdrecord pour graver vos CDs. cdrecord ne fait pas partie du système de base; vous devez l'installer soit à partir du logiciel porté sysutils/cdrtools ou de la version pré-compilée appropriée. Des modifications du système de base peuvent provoquer le dysfonctionnement des versions binaires de ce programme, et donner lieu à une production de “dessous de bouteille”. Vous devrez par conséquent soit mettre à jour le logiciel porté quand vous mettez à jour votre système, soit si vous suivez la branche -STABLE, mettre à jour le logiciel porté lorsqu'une nouvelle version est disponible.

Bien que cdrecord dispose de nombreuses options, l'usage de base est même plus simple qu'avec burncd. La gravure d'une image ISO 9660 se fait avec:

# cdrecord dev=device fichierimage.iso

La partie délicate dans l'utilisation de cdrecord est la recherche de la valeur à utiliser pour l'option dev. Pour déterminer le bon paramètre à utiliser, utilisez l'indicateur -scanbus de cdrecord, qui produira des résultats du type:

# cdrecord -scanbus
Cdrecord-Clone 2.01 (i386-unknown-freebsd7.0) Copyright (C) 1995-2004 Jörg Schilling
Using libscg version 'schily-0.1'
scsibus0:
        0,0,0     0) 'SEAGATE ' 'ST39236LW       ' '0004' Disk
        0,1,0     1) 'SEAGATE ' 'ST39173W        ' '5958' Disk
        0,2,0     2) *
        0,3,0     3) 'iomega  ' 'jaz 1GB         ' 'J.86' Removable Disk
        0,4,0     4) 'NEC     ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *
scsibus1:
        1,0,0   100) *
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) 'YAMAHA  ' 'CRW4260         ' '1.0q' Removable CD-ROM
        1,6,0   106) 'ARTEC   ' 'AM12S           ' '1.06' Scanner
        1,7,0   107) *

Cela donne la valeur dev appropriée pour les périphériques listés. Recherchez votre graveur de CD dans la liste, et utilisez les trois chiffres séparés par une virgule comme valeur pour dev. Dans notre cas le périphérique de gravure est 1,5,0, donc l'entrée appropriée serait dev=1,5,0. Il existe des manières plus simple de spécifier cette valeur, consultez la page de manuel cdrecord(1) pour des détails. C'est également la documentation à consulter pour des informations sur la gravure de pistes audios, le contrôle de la vitesse, et d'autres choses.

19.6.5. Dupliquer des CDs Audio

Vous pouvez dupliquer un CD audio en effectuant l'extraction des données audio du CD vers un ensemble de fichiers, puis graver ces fichiers sur un CD vierge. Le processus est légèrement différent entre lecteurs ATAPI et SCSI.

Procédure 19.1. Lecteurs SCSI
  1. Utiliser cdda2wav pour effectuer l'extraction audio.

    % cdda2wav -v255 -D2,0 -B -Owav
  2. Utiliser cdrecord pour graver les fichiers .wav.

    % cdrecord -v dev=2,0 -dao -useinfo  *.wav

    Assurez-vous que 2,0 est choisi correctement, comme décrit dans Section 19.6.4, « cdrecord ».

Procédure 19.2. Lecteurs ATAPI
  1. Le pilote CD ATAPI rend disponible chaque piste sous la forme /dev/acddtnn, où d est le numéro de lecteur, et nn est le numéro de la piste écrit sur deux digits décimaux. Donc la première piste sur le premier lecteur est /dev/acd0t01, la seconde est /dev/acd0t02, la troisième /dev/acd0t03, et ainsi de suite.

    Assurez-vous que les fichiers appropriés existent sous /dev. Si ces entrées sont absentes, forcez le système à lire le disque à nouveau:

    # dd if=/dev/acd0 of=/dev/null count=1
  2. Extraire chaque piste en utilisant dd(1). Vous devez également préciser une taille de bloc durant l'extraction des fichiers.

    # dd if=/dev/acd0t01 of=piste1.cdr bs=2352
    # dd if=/dev/acd0t02 of=piste2.cdr bs=2352
    ...
    
  3. Graver les fichiers récupérés en utilisant burncd. Vous devez spécifier que ce sont des fichiers audio, et que burncd devra fermer le disque une fois terminé.

    # burncd -f /dev/acd0 audio piste1.cdr piste2.cdr ... fixate

19.6.6. Dupliquer des CDs de données

vous pouvez copier un CD de données vers un fichier image équivalent au fichier créé avec mkisofs(8), et vous pouvez l'utiliser pour dupliquer n'importe quel CD de données. L'exemple présenté ici suppose que votre lecteur de CDROM est les périphérique acd0. Remplacez-le avec le périphérique correct.

# dd if=/dev/acd0 of=fichier.iso bs=2048

Vous disposez maintenant d'une image, vous pouvez la graver comme décrit plus haut.

19.6.7. Utiliser des CDs de données

Maintenant que vous avez créé une CDROM de données standard, vous voulez probablement le monter et lire les données présentes. Par défaut, mount(8) suppose que le système de fichier à monter est de type UFS. Si vous essayez quelque chose comme:

# mount /dev/cd0 /mnt

vous obtiendrez une erreur du type Incorrect super block, et pas de montage. Le CDROM n'est pas un système de fichiers de type UFS, aussi toute tentative de montage de ce type échouera. Vous devez juste préciser à mount(8) que le système de fichiers est du type ISO9660, et tout fonctionnera. Cela se fait en spécifiant l'option -t cd9660 option à mount(8). Par exemple, si vous désirez monter un CDROM, contenu dans le lecteur /dev/cd0, sous /mnt, vous devrez exécuter:

# mount -t cd9660 /dev/cd0 /mnt

Notez que votre nom de lecteur (/dev/cd0 dans cet exemple) pourra être différent, en fonction de l'interface utilisée par votre lecteur de CDROM. De plus l'option -t cd9660 ne fait qu'exécuter la commande mount_cd9660(8). L'exemple précédent pourrait être réduit à:

# mount_cd9660 /dev/cd0 /mnt

Vous pouvez généralement utiliser des CDROMs de données de n'importe quelle provenance de cette façon. Les disques avec certaines extensions ISO 9660 pourront se comporter de façon étrange, cependant. Par exemple, les disques Joliet conservent tous les noms de fichiers en utilisant des caractères Unicodes sur 2 octets. Le noyau FreeBSD ne comprend pas l'Unicode, mais le pilote CD9660 de FreeBSD est en mesure de convertir au vol les caractères Unicode. Si des caractères non-anglais apparaissent sous la forme de points d'interrogation, vous devrez préciser la table de caractères locale que vous utilisez avec l'option -C. Pour plus d'information, consultez la page de manuel mount_cd9660(8).

Note:

Pour pouvoir effectuer cette conversion de caractères à l'aide de l'option -C, le module cd9660_iconv.ko devra être chargé. Cela peut être fait soit en ajoutant au fichier loader.conf la ligne:

cd9660_iconv_load="YES"

puis en redémarrant la machine, soit en chargeant directement le module avec kldload(8).

Occasionnellement, vous pourrez obtenir le message Device not configured (périphérique non configuré) lors d'une tentative de montage d'un CDROM. Cela veut généralement dire que le lecteur de CDROM pense qu'il n'y a pas de disque dans le lecteur, ou que le lecteur n'est pas visible sur le bus. Cela peut demander plusieurs secondes à un lecteur de CDROM de s'apercevoir qu'il a été chargé, soyez donc patient.

Parfois, un lecteur de CDROM SCSI peut être manquant parce qu'il n'a pas eu suffisamment de temps pour répondre à la réinitialisation du bus. Si vous avez un lecteur de CDROM SCSI, veuillez ajouter l'option suivante à la configuration de votre noyau et recompiler votre noyau.

options SCSI_DELAY=15000

Ceci demande à votre bus SCSI une pause de 15 seconds au démarrage, pour donner à votre lecteur de CDROM une chance de répondre la réinitialisation du bus.

19.6.8. Graver des CDs de données brutes

Il est possible de graver directement un fichier sur CD, sans créer de système de fichiers ISO 9660. Certaines personnes le font dans le cas de sauvegardes. Cela est beaucoup plus rapide que de graver un CD standard:

# burncd -f /dev/acd1 -s 12 data archive.tar.gz fixate

Afin de récupérer les données gravées sur un tel CD, vous devez lire les données à partir du fichier spécial de périphériques en mode caractère:

# tar xzvf /dev/acd1

Vous ne pouvez monter ce disque comme vous le feriez avec un CDROM classique. Un tel CDROM ne pourra être lu sous un autre système d'exploitation en dehors de FreeBSD. Si vous voulez être en mesure de monter le CD, ou d'en partager les données avec un autre système d'exploitation, vous devez utiliser mkisofs(8) comme décrit plus haut.

19.6.9. Utilisation du pilote de périphérique ATAPI/CAM

Contribution de Marc Fonvieille.

Ce pilote permet d'accéder aux périphériques ATAPI (lecteurs de CD-ROM, graveurs CD-RW, lecteur de DVD etc...) par l'intermédiaire du sous-système SCSI, et autorise l'utilisation d'applications comme sysutils/cdrdao ou cdrecord(1).

Pour utiliser ce pilote, vous devrez ajouter la ligne suivante au fichier /boot/loader.conf:

atapicam_load="YES"

puis redémarrez votre machine.

Note:

Si vous préférez compiler en statique dans le noyau le support atapicam(4), vous devrez ajouter au fichier de configuration du noyau la ligne:

device atapicam

Vous avez également besoin des lignes suivantes dans votre fichier de configuration:

device ata
device scbus
device cd
device pass

qui devraient être déjà présentes. Puis recompilez, installez votre nouveau noyau, et enfin redémarrez votre machine.

Lors du démarrage, votre graveur devrait apparaître, comme suit:

acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4
cd0 at ata1 bus 0 target 0 lun 0
cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device
cd0: 16.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed

Le lecteur doit être accessible via le nom de périphérique /dev/cd0, par exemple pour monter un CD-ROM sous /mnt, tapez juste ce qui suit:

# mount -t cd9660 /dev/cd0 /mnt

En tant que root, vous pouvez exécuter la commande suivante pour obtenir l'adresse SCSI du graveur:

# camcontrol devlist
<MATSHITA CDRW/DVD UJDA740 1.00>   at scbus1 target 0 lun 0 (pass0,cd0)

Donc 1,0,0 sera l'adresse SCSI à utiliser avec cdrecord(1) et tout autre application SCSI.

Pour plus d'information concernant ATAPI/CAM et le système SCSI, consultez les pages de manuel atapicam(4) et cam(4).

Ce document, ainsi que d'autres peut être téléchargé sur ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.

Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.