Graver en ligne de commande
La gravure en ligne de commandes
Pour exploiter pleinement les possibilités de gravure sous Linux, il est nécessaire de connaître quelques rudiments sur les outils de base dont les principaux sont cdrecord, cdrdao, readcd et cdparanoia. Voir aussi la logithèque de Léa, [../logi/index.php3?aff_rub=4 section gravure].
Tous les logiciels graphiques destinés à la gravure ne sont en fait que des interfaces qui utilisent ces outils.
Ces programmes figurent normalement sur toute distribution.
Ils font partie du package cdrtools dont les sources sont disponibles ici ou encore sur cette page qui contient d'autres informations, notamment une liste des graveurs compatibles.
On peut également récupérer les sources de cdparanoia à cette addresse
Note de Jice : sous Mandrake, les packages correspondants sont cdrecord, cdrdao et cdparanoia.
Cette page a été construite à partir notamment :
- des pages de manuel
- des divers fichiers Readme fournis avec les outils
- de la FAQ sur les CD-R dont la version originale (en anglais) se trouve ici et dont l'on trouvera une traduction ici
- de http://giminik.developpez.com/articles/debian-gnu-linux/gravure-audio-ligne-commande/
- de multiples essais personnnels
Cet article contient les informations suivantes :
- Les prérequis :
- [#config_machine Configurer sa machine],
- [#config_programmes Configurer les programmes],
- [#commandes_utiles Quelques commandes utiles],
- [#cdstruct Un peu de théorie sur les CD-ROM],
- et enfin la pratique :
- [#isoburn Graver une image ISO],
- [#creation_disque_donnees Créer un disque de données (backup, etc.)],
- [#copiecdrom Copier un CD-Rom de données],
- [#multisessions Créer ou copier un disque multisession],
- [#copiecdaudio Copier un CD audio],
- [#casparticuliers Créer ou copier un CD Extra] (mélange de CD Audio et de CD-Rom),
- [#bincue Graver une image .bin/.cue]
Avant toute chose, il convient de lire les sections suivantes sur la configuration de la machine et des programmes.
Avant de commencer
Configuration de la machine
Pour graver, il faut disposer d'un graveur SCSI ou IDE.
Avant le noyeau 2.6, pour utiliser un graveur ide, il fallait utiliser une émulation SCSI. Ce n'est plus le cas aujourd'hui.
Le noyau
Note de Jice : Si vous avez une distribution utilisant un noyeau 2.6.x (Mandrake à partir de 8.x, etc.), vous pouvez passer ce paragraphe.
Pour cela, dans la configuration du noyau, les options suivantes doivent être activées (par exemple en module) :
- SCSI emulation support (le module ide-scsi.o dans la rubrique ATA/IDE/MFM/RLL support de IDE/ATA and ATAPI Block devices pour un noyau 2.4.17 ou dans la rubrique Block devices pour d'autres noyaux)
- SCSI support (le module scsi_mod.o dans la rubrique SCSI support)
- SCSI CD-ROM support (le module sr_mod.o dans la même rubrique ; celui-ci n'est pas indispensable pour la gravure mais est nécessaire pour pouvoir monter le périphérique)
- SCSI generic support (le module sg.o dans la même rubrique)
Il peut aussi être utile d'activer l'option Loopback device support dans la rubrique Block Devices. Ceci permet de monter les images de disques afin d'en visualiser le contenu.
L'émulation SCSI
Enfin, il faut ajouter une entrée du type append="hdc=ide-scsi" dans le fichier /etc/lilo.conf (quelque part sous la ligne image=fichier_du_noyau). Pour obtenir le nom du fichier de périphérique du graveur (hdc dans l'exemple ci-dessus), on tape dmesg|less dans une console et on repère une ligne du type hdc: nom du graveur.
Enfin, pour activer l'émulation SCSI, il suffit de charger le module ide-scsi par la commande modprobe ide-scsi (les autres modules seront chargés automatiquement si l'option Kernel module loader de la rubrique Loadable module support est activée dans le noyau).
Dans certaines situations, il est nécessaire de disposer également d'un lecteur de CD-Rom SCSI (ou émulé). C'est le cas par exemple pour la copie directe de Cd-Rom audio avec cdrdao.
Pour qu'un lecteur ou un graveur IDE soit émulé en SCSI, il suffit de modifier l'entrée dans le fichier /etc/lilo.conf pour obtenir quelque chose du genre :
append="hdc=ide-scsi hdd=ide-scsi"
avec ici hdc le lecteur de Cd-Rom et hdd le graveur (selon la configuration). Les périphériques seront alors accessibles, selon les distributions, à travers /dev/scd0 et /dev/scd1 (ou /dev/sg0 et /dev/sg1, cela dépend des distributions), au lieu de /dev/hdc et /dev/hdd.
La plupart des programmes ne sont utilisables qu'en mode super-utilisateur. Pour les utiliser en mode utilisateur, on peut utiliser par exemple la commande sudo, ou su.
Obtenir l'adresse SCSI du graveur
Avant toute chose, il faut obtenir cette information en interrogeant le bus SCSI. Pour cela, on tape dans une console :
cdrecord -scanbus
Ou pour les noyeau 2.6.x:
"cdrecord dev=ATA -scanbus"
Celui-ci va renvoyer un certain nombre de lignes du type :
0,0,0 0) 'Nom du graveur' Removable Cd-Rom
Ce sont les trois premiers chiffres qui nous intéressent.
Ces trois chiffres correspondent respectivement au numéro de l'adaptateur (scsibus), au numéro d'identification du périphérique ou de la cible (target) et au numéro d'identification dans la chaîne SCSI (lun, Logical Unit Number).
Ces trois chiffres seront indispensables pour la suite.
Par exemple, le programme cdrecord devra toujours être lancé avec l'option dev=x,y,z avec x le premier chiffre (scsibus), y le deuxième (target) et z le troisième (lun). En fait, s'il n'y a qu'un seul bus SCSI, il suffit d'entrer les deux derniers. Ainsi, si les trois chiffres sont 0,1,0, on entrera cdrecord dev=1,0 etc.
Par la suite, on utilisera la notation dev=y,z et il faudra remplacer y et z par leur valeur.
C'est la même chose avec le programme readcd (on entrera donc readcd dev=y,z etc).
Pour cdrdao, l'option s'écrit --device y,z. Il est possible également que le programme ne reconnaisse pas votre graveur. Choisissez alors un pilote dans la liste qu'il proposera dans ce cas (par exemple, l'option --driver generic-mmc).
Attention : vous pouvez très bien avoir plusieurs bus SCSI sans le savoir. Par exemple, si vous utilisez le module usb-storage (pour un lecteur ZIP USB), celui-ci crée un bus SCSI. Et bien sûr, si vous avez une carte SCSI, vous avez encore un autre bus SCSI. Bref, dans ce cas, vous devrez donner en paramètres aux programmes les 3 chiffres. Par exemple cdrecord dev=0,1,0.
Configuration des programmes
Le programme cdrecord lit un fichier de configuration dans un fichier nommé /etc/default/cdrecord. Si l'on doit passer souvent les mêmes paramètres, il est pratique de les entrer dans ce fichier (si d'autres valeurs de paramètre sont passées en ligne de commande par la suite, celles du fichier correspondantes seront ignorées). Par exemple, si l'on grave à partir du même périphérique dont les numéros SCSI sont x,y,z, alors il faut créer le répertoire /etc/default s'il n'existe pas ainsi que le fichier /etc/default/cdrecord (par exemple, en tapant touch /etc/default/cdrecord), et saisir dans ce fichier la ligne :
CDR_DEVICE=x,y,z
La page de manuel explique les autres options pour ce fichier.
En ce qui concerne cdrdao, ces options sont stockées dans le fichier cdrdao.conf dans le répertoire /etc (on peut aussi le placer dans /etc/defaults/cdrdao ou utiliser le fichier $HOME/.cdrdao). Oui, les pages de man indiquent bien /etc/default/cdrecord pour cdrecord (default sans 's') et /etc/defaults/cdrdao pour cdrdao (default avec un 's')... Un petit lien symbolique (créé par : ln -s /etc/default /etc/defaults) permet d'avoir tout dans le même répertoire.
Si l'on utilise un graveur en x,y,z, géré par le pilote generic-mmc, alors ce fichier doit avoir la forme :
write_device: "x,y,z"
write_driver: "generic-mmc"
read_driver: "generic-mmc"
Tout ceci est expliqué dans la page de manuel. On peut également entrer les informations sur le lecteur (par exemple read_device=0,1,0). Il ne faut toutefois pas saisir cette ligne si l'on compte lire et copier un disque à partir du seul graveur car la commande copy de cdrdao ne fonctionne pas si les paramètres source-device et device ont les mêmes valeurs.
Dans ce cas, il faudra préciser le périphérique pour les commandes de lecture comme read-cd ou read-toc (par exemple, l'option --device y,z).
Quelques commandes utiles
Débloquer le graveur
Si pour une raison ou pour une autre le graveur ne répond plus à aucune commande, renvoie des messages d'erreur et refuse de s'ouvrir même ne appuyant sur le bouton d'éjection, alors vous pouvez utiliser cdrdao pour le réinitialiser :
cdrdao unlock --device y,z
Effacer un CD-RW
Pour effacer un disque, utilisez cdrecord :
cdrecord dev=y,z blank=fast
Ou pour les Kernels (noyaux) 2.6.x
cdrecord dev=ATAPI:x,y,z blank=all
ce qui lancera un effacement rapide du disque (il efface notamment la TOC, la PMA et les marques d'intervalle entre pistes, ce qui est généralement suffisant). Pour effacer complètement le disque, il faut remplacer l'option fast par all.
Obtenir de l'information sur le Cd-Rom
Avant de graver un Cd-Rom de données, il est important d'obtenir quelques informations, notamment pour savoir s'il s'agit d'un disque mono-session ou multi-sessions.
On entre alors dans une console :
cdrdao disk-info --device y,z
Il faut pour cela utiliser le graveur (un lecteur de Cd-Rom n'est généralement pas capable d'extraire ces informations).
Ceci va permettre de savoir notamment s'il s'agit d'un disque réinscriptible (CD-RW: yes), si le disque est vide (CR-R empty: yes,) s'il est fixé (appendable: no, on ne peut plus rien ajouter; dans ce cas, le programme renvoie également le début de la nouvelle session et la capacité restante sur le disque) et de connaître la capacité totale du disque, la plage de vitesse acceptable (pour un disque réinscriptible), le nombre de sessions et le numéro de la dernière piste (si le disque ne comporte qu'une seule session, ceci correspond au nombre de pistes sur le disque).
Structure d'un Cd-Rom
Sur un Cd, les informations sont gravées en spirale en partant du centre sur des pistes, elles-mêmes regroupées dans une session. Ainsi, un disque contient au moins une session comprenant au moins une piste. Beaucoup de graveurs n'acceptent de graver des pistes que si leur durée est d'au moins 4 secondes ou 300 secteurs.
En effet, l'unité de base sur un disque est le bloc ou secteur qui occupe 2352 octets, qu'il s'agisse de musique ou de données (l'occupation n'est toutefois pas la même).
Lorsqu'il s'agit de Cd de données, un secteur représente toujours 2352 octets mais seuls 2048 d'entre eux sont utilisés pour stocker les données, le reste étant utilisé en grande partie pour la correction d'erreurs.
Ainsi, pour stocker un Mo de données, soit 1024000 octets (1 Ko représente 1024 octets), il faudra 1024000/2048=500 secteurs.
Sur un disque audio, les 2352 octets d'un secteur sont occupés par la musique car la correction d'erreurs s'effectue à un autre niveau sur le disque (les couches C1 et C2 d'après les spécialistes).
La conversion analogique-numérique s'effectue par échantillonnage. Le Red Book (norme qui spécifie le standard des disques audio) précise que la fréquence d'échantillage doit être de 44100 Hz (hertz) ce qui représente 44100 échantillons par secondes, et que chaque échantillon doit être au format 16 bit, stéréo, PCM ("Pulse Code Modulation"). Ceci permet de reproduire des sons d'une fréquence variant entre 0 et 20000 Hz, avec une petite marge, qui est la fréquence audible de l'oreille humaine.
D'après certains How-To, pour représenter correctement un son d'une fréquence F, il faut une fréquence d'échantillonage d'au moins 2F Hz (ceci doit être la conséquence entre autre du théorème de Shannon qui indique que l'on peut reproduire un signal qui contient des fréquences inférieures à F si on le connaît aux instants multiples de 1/2 F).
Au total, une seconde de musique représentera 44100x16x2=1411200 bits, soit 1411200/8=176400 octets, soit encore 176400/2352=75 blocs ou secteurs.
Les disques audio ne contiennent en général qu'une seule session car les lecteurs ne sont capables que de lire la première session. Il est toutefois possible de créer des disques mélangeant des pistes de données ou des pistes audio. C'est le cas par exemple des Cd mixtes qui contiennent en général une piste de données et des pistes audio (par exemple, des Cd de jeux). C'est le cas également des Cd Extra qui contiennent une première session audio et une deuxième session de données. Ceci se révèle pratique pour stocker des informations relatives à la musique enregistrée, par exemple des fichiers video, sans que le lecteur audio n'affiche la piste comme une autre piste audio (le lecteur n'a accès qu'à la première session audio et ne voit pas la session de données qui reste néanmoins accessible par un ordinateur). Ce n'est pas le cas avec un Cd mixte: la première piste est considérée comme une piste audio par un lecteur (on pourrait crée une première session pour les données et une deuxième pour l'audio mais la deuxième session ne serait pas accessible par le lecteur audio).
Chaque session contient une zone de données dans laquelle sont stockées les pistes de données ou les pistes audio. Elle est précédée d'une en-tête, le Lead-In, qui contient la TOC ("Table of Contents" ou Table des Matières) ainsi que l'adresse éventuelle de la prochaine session. Elle se termine par une zone de fin, le Lead-Out qui ne contient rien mais sert à indiquer la fin de session. Cette zone de fin occupe 6750 secteurs pour la première session et 2250 pour la suivante.
La zone d'en-tête n'est écrite que lorsque la session est clôturée et peut occuper jusqu'à 4500 secteurs. Tant que la session n'est pas finie, la TOC est écrite dans la PMA ("Program Memory Area" ou Zone de Mémoire Programme).
La Table des Matières contient la longueur totale de la zone de données, le nombre de pistes et l'adresse de ces pistes sur le disque.
Il existe deux grandes façons de créer un disque: le mode Track At Once (une piste à la fois) ou le mode Disc At Once (le disque en une seule fois).
En mode Track At Once (TAO), on écrit les pistes une par une. En fait, le graveur éteint le laser à la fin de chaque piste ce qui laisse quelques secteurs vides entre les pistes qui en général sont silencieux (des run-in et run-out). Cette méthode est utile si l'on souhaite par exemple graver quelques pistes d'un disque et rajouter quelques pistes plus tard. Dans ce cas, il ne faut pas fermer la session mais le disque ne pourra être lu par un lecteur audio car la TOC ne sera pas générée. Cette méthode est dans certains la seule possible avec certains anciens graveurs. En outre certains d'entre eux laissent automatiquement un espace de 2 secondes entre les pistes.
En mode Disc-At-Once (DAO), les pistes sont gravées en une seule fois sans que le laser ne soit éteint. Ceci permet d'obtenir des disques sans espace entre les pistes (par exemple un concert). C'est la méthode la plus sûre pour réaliser une copie qui soit la plus proche possible de l'original.
Il existe également un mode dit Session At Once (une session à la fois), qui est une variante du mode DAO. Par exemple, on grave en une seule fois une première session audio en mode multissesion et l'on grave ensuite une deuxième session de données afin de créer un Cd-Extra (on peut également de graver une première session de données en mode DAO, mais cela ne semble pas possible pour une autre (cdrecord refuser cela).
Graver une image ISO
(par Jice)
En ces temps de connexion internet par ADSL ou câble, les personnes qui peuvent télécharger des images ISO (c'est à dire un fichier contenant l'image de ce qui se trouve sur un CD) sont de plus en plus nombreuses. On peut par exemple télécharger les CD d'une distribution Linux, etc.
Graver l'image ISO
Oui, mais... Comment graver le fichier image.iso ?
Une ligne de commande suffit :
cdrecord -v -dao speed=8 dev=x,y,z /chemin/image.iso
avec :
* speed : la vitesse du graveur 8 pour 8x par exemple,
* dev : l'adresse sur le bus SCSI du graveur, obtenue avec la commande cdrecord -scanbus
Si vous avez aussi téléchargé le fichier md5sums (lorsqu'il existe), vous pouvez tester votre image avant de la graver par la commande :'
md5sum -c md5sums
Note 1 : Sous Windows, utilisez votre logiciel de gravure, et choisissez la fonction "graver une image". Ouvrez alors le fichier contenant l'image ISO, et gravez-le.
Il paraît que Nero (Les fichiers .nrg de Nero seraient en fait des images ISO) et Easy CD Creator savent le faire.
Note 2 : une erreur classique consiste à graver le fichier image.iso sur le système de fichiers du CD (i.e. le CD contient un seul fichier, votre image ISO). Dans ce cas, vous pouvez toujours vous en servir en montant le CD, puis en montant l'image en loopback, mais c'est de la bidouille, et surtout c'est fichu pour booter sur le CD (ex : CD d'une distribution Linux).
Tester l'image ISO
Il est en effet possible de monter l'image dans un répertoire pour en vérifier le contenu. Par exemple, pour monter l'image dans le répertoire /mnt/cdrom, on fera :
mount image.iso -t iso9660 -o loop,ro /mnt/disk
et il suffira d'aller visiter le répertoire /mnt/disk pour consulter le contenu de notre image ISO.
Création d'un disque de données
Pour l'instant, on ne s'intéresse qu'à la création d'un disque mono-session pour sauvegarder des données stockées sur le disque dur (voir plus loin pour la création d'un Cd-Rom multi-sessions).
Il existe pour cela deux méthodes : soit on passe par la création d'une image sur le disque qui est ensuite gravée sur le Cd-Rom, soit on grave directement les données à partir des fichiers présents sur le disque dur.
Par ailleurs, qu'il s'agisse d'un disque mono ou multi-sessions, chaque session ne doit comporter qu'une seule piste.
Création d'une image ISO-9660
On a vu ci-dessus comment graver une telle image, mais il est bien plus intéressant de créer soi-même ses propres CD !
La méthode consiste à créer une image disque à partir des données à sauvegarder, c'est-à-dire un fichier qui pourra être reconnu par le logiciel de gravure, et qui représente le futur contenu d'un CD. On utilise pour cela le programme mkisofs. Par exemple, si l'on souhaite faire une image nommée image.iso contenant les fichiers du répertoire /home/copie, alors on fera :
mkisofs -R -o image.iso /home/copie
On peut ignorer les éventuels messages du type :
Using FICH000.TXT;1 for /home/copie/fichier.txt~ (fichier.txt)
Ceci signifie qu'il existe un fichier nommé fichier.txt et un autre nommé fichier.txt~ (qui est par exemple une sauvegarde du premier réalisée par Emacs). Le programme mkisofs fait cette transformation pour que le système de fichier soit conforme à la norme ISO-9660 mais l'extension Rock Ridge assure que le fichier sera visible à la lecture sous sa forme initiale (en fait, le fichier fichier.txt est sauvegardé sous le nom FICHI000.TXT dans l'arborescence du disque et le ;1 signifie qu'il s'agit d'une version du premier).
L'image sera alors gravée par :
cdrecord -v -dao speed=8 dev=y,z image.iso
Si cdrecord n'est pas lancé à partir du répertoire dans lequel se trouve le fichier image.raw, il faut préciser le chemin.
L'option -v est optionnelle. Elle active le mode bavard ( verbose ) ce qui permet de voir la progression du processsus de gravure.
L'option -dao est également optionnelle. Elle permet de graver l'image en mode Disc at Once. Si elle n'est présente, le Cd-Rom sera gravé en mode Track at Once et le graveur ajoutera à la fin de la piste 2 blocs qui seront illisibles, ce qui peut poser des problèmes si l'on veut par la suite faire une image de ce disque (ce problème peut toutefois être facilement résolu, voir plus loin).
L'option speed=8 sélectionne une vitesse de 8x. Si cette option n'est pas précisée, cdrecord va essayer de lire la vitesse acceptable sur le disque (celle-ci est inscrite sur les CD-RW mais pas sur les CD-R). Au demeurant, si l'on entre une vitesse supérieure à celle acceptable par le support, le programme va automatiquement l'ajuster. Toutefois, si aucune vitesse n'est inscrite, le disque risque d'être inutilisable.
De façon générale, la syntaxe de mkisofs est la suivante :
mkisofs options répertoire_à_sauvegarder
Ici, l'option -o image.iso signifie que l'image portera le nom image.iso et sera stockée dans le répertoire courant (si l'on veut stocker l'image ailleurs, il faut préciser le chemin). Le nom de l'image est peu important. Il faut seulement savoir que cdrecord est par défaut lancé avec l'option -data qui indique qu'il s'agit d'un Cd de données (CD-Rom mode 1) sauf si l'extension du nom de l'image .au ou .wav auquel cas cdrecord est lancé avec l'option -audio.
L'option -R signifie que l'on utilise l'extension Rock Ridge du système de fichiers, qui définit l'organisation des données sur le Cd-Rom. Initialement, la première norme définissant un système de fichiers pour Cd-Rom est la norme ISO-9660 qui, au niveau 1, n'autorise notamment que des noms de fichiers comportant 8 caractères (en majuscules) avec une extension de 3 caractères (le format 8.3). Il existe par ailleurs un certain nombre d'autres restrictions.
L'extension Rock-Ridge a été mise en place en 1990 pour les systèmes Unix. Elle autorise les noms de fichiers longs (jusqu'à 255 caractères), les liens symboliques et permet de sauvegarder les identifiants d'utilisateur et de groupe ainsi que les permissions.
Attention : un tel disque ne sera par lu correctement sous Windows. Les noms de fichiers n'apparaîtront qu'avec 8 caractères. Si l'on veut que le Cd-Rom soit également lisible sous ce système, il faut ajouter l'option Joliet (noms longs sur CD-Rom pour windows) avec : -J (mkisofs -R -J etc).
On peut si l'on préfère utiliser l'option -r à la place de l'option -R. Avec celle-ci, les identifiants d'utilisateur et de groupe sont mis à zéro (ce qui correspond à l'utilisateur et au groupe Root). En effet, l'option -R sera utile si le disque est lu sur la même machine mais donnera des résultats non souhaitables s'il est lu sur une autre machine (par exemple, des fichiers appartiendront à un utilisateur inconnu si le numéro d'identifiant ne correspond à aucun utilisateur ou à un utilisateur qui aura le même numéro que celui de la machine d'origine, ce qui n'est probablement pas ce que l'on souhaite).
L'option -r active également les droits en lecture pour tous, supprime tous les droits en écriture et autorise l'exécution pour tous si elle est autorisée pour un (propriétaire, groupe ou autres) sur le fichier initial.
Il est possible de créer une image à partir de plusieurs répertoires. Par exemple, si l'on veut sauvegarder l'ensemble des fichiers des répertoires /home/rep1 et /home/rep2, alors on fera :
mkisofs -o image.iso /home/rep1 /home/rep2
Attention : tous les fichiers seront sauvegardés à la racine du CD (voir plus loin l'option -graft-points si l'on veut recréer une arborescence différente sur le disque).
Il est possible de monter l'image dans un répertoire pour en vérifier le contenu. Par exemple, pour monter l'image dans le répertoire /mnt/cdrom, on fera :
mount image.iso -t iso9660 -o loop /mnt/disk
Quelques options pratiques de mkisofs
- L'option -no-bak exclut tous les fichiers qui contiennent les caractères ~ ou # ainsi que les fichiers qui se terminent par .bak.
- L'option -m permet d'exclure certains fichiers. Par exemple, si l'on veut exclure de l'image les fichiers /rep/file1 et /rep/file2, on lancera mkisofs avec les options -m /rep/file1 -m /rep/file2. Pour exclure tous les fichiers qui se terminent par .ext, on utilisera l'option -m '*.ext'.
- L'option -exclude-list permet d'exclure une liste de fichiers contenus dans un fichier. Par exemple, on créera un fichier nommé liste, contenant un ensemble de fichiers (un fichier par ligne) et on lancera mkisofs avec l'option -exclude-list liste.
- L'option -x permet d'exclure un répertoire. Par exemple, pour exclure les répertoires /home/rep1 et /home/rep2, on utilisera l'option -x /home/rep1 -x /home/rep2.
- Enfin, l'option -graft-points permet de créer une arborescence sur le Cd-Rom. Par exemple, si l'on souhaite sauvegarder les fichiers des répertoires /home/dir1 et /home/dir2 et que l'on souhaite les mettre respectivement dans les répertoires /rep1/sous_rep1 et /rep2/sous_rep2, alors on lancera mkisofs avec l'option -graft-points /rep1/sous_rep1=/home/dir1 /rep2/sous_rep2=/home/dir2 . Ceci fonctionne aussi avec les fichiers. Ainsi, l'option -graft-points /home/dir1/readme=/rep1/readme.txt copiera le fichier readme du disque en fichier readme.txt dans le répertoire rep1.
Il existe beaucoup d'autres options qui sont documentées dans la page de manuel.
Il convient de signaler également que mkisofs est par défaut lancé avec l'option -pad qui rajoute 16 blocs ou secteurs à la fin de la piste (soit 32ko) et en ajoute un certain nombre pour que la taille de l'image soit un multiple de 16. D'après la documentation, ceci est nécessaire pour assurer une lecture correcte des derniers fichiers du Cd-Rom sous Linux.
Gravure directe des données
La méthode consiste à rediriger directement la sortie de mkisofs vers cdrecord sans passer par un fichier image intermédiaire. Il faut auparavant obtenir la taille de l'image à graver. Pour cela, si les données à sauvegarder se trouvent par exemple dans le répertoire /home/copie , on tape dans une console :
mkisofs -R -q -print-size /home/copie
L'option -R sert à créer une image au format Rock Ridge, l'option -q (quiet) sert à limiter les informations qui seront affichées et l'option -print-size va donner la taille de l'image.
Ceci renvoie la taille de l'image en nombre de secteurs. On relance ensuite mkisofs en redirigeant la sortie standard vers cdrecord. Par exemple, si la taille de l'image est de 1000 blocs, on saisira :
mkisofs -R /home/original 2>/dev/null | cdrecord -v -dao speed=12 dev=y,z tsize=1000s -
La directive 2>/dev/null permet de rediriger les messages de mkisofs (la sortie stdout) vers le périphérique vide /dev/null afin qu'ils ne soient pas affichés (ceci n'est pas indispensable).
Les options -v et -dao sont optionnelles.
L'option tsize permet de spécifier la taille de l'image.
Le "s" à la fin sert à spécifier qu'il s'agit de secteurs (ou blocs). Si on l'omet, il faut spécifier la taille en octets (1 secteur ou bloc est équivalent à 2048 octets de données).
Enfin le signe - à la fin est obligatoire et permet de dire à cdrecord de rechercher les données dans la sortie de mkisofs.
Certains graveurs acceptent de graver sans connaître la taille de l'image. Dans ce cas, il est inutile de préciser l'option tsize (cela risque malgré tout de ne pas fonctionner en mode DAO).
Si l'on souhaite automatiser cela dans un script, on peut utiliser une variable pour stocker la taille de l'image. Par exemple, on pourra avoir quelque chose du type :
taille=`mkisofs -R -q -print-size /home/copie`
Le symbole ` est obtenu par Alt Gr 7.
On récupère l'information dans cdrecord par :
mkisofs -R /home/copie 2>/dev/null | cdrecord -v -dao speed=12 dev=y,z tsize=${taille}s -
Copie d'un Cd-Rom de données
Il existe deux méthodes pour cela : la copie directe d'un lecteur vers le graveur et la copie indirecte par création d'images.
Avant de commencer, il faut s'assurer qu'il s'agit d'un disque mono-session (le cas d'un disque multi-session est abordé plus loin). En effet, si le disque comporte plusieurs sessions, seule la première sera copiée. Utilisez cdrdao avec l'option disk-info pour obtenir le nombre de sessions sur le disque (utilisez le graveur pour que cdrdao lise les informations).
Copie directe
Copie avec cdrecord
La méthode la plus simple pour copier un Cd dans ce cas est d'utiliser cdrecord. Par exemple, si le disque à copier se situe dans le lecteur dont le fichier de périphérique est /dev/hdc, alors on tapera :
cdrecord -v -dao -isosize speed=12 dev=y,z /dev/hdc
L'option -dao évite qu'il y ait deux secteurs illisibles en fin de piste (ceci n'est pas indispensable).
Avec l'option -isosize, cdrecord utilise la taille du système ISO-9660 comme taille de l'image qui sera gravée. Ceci évite de lire les deux secteurs illisibles éventuels si le disque original a été gravé en mode Track at Once et des risques de buffer under run. La taille de la piste copiée sera ainsi inférieure à celle du disque original (outre les deux secteurs, d'autres secteurs vides ajoutés en fin ne seront pas non plus copiés).
Si l'on veut faire une copie exacte du Cd-Rom (pistes de même taille), il faut supprimer cette option (si le graveur accepte la copie) et supprimer également l'option -dao si le disque original a été créé en mode Track at Once.
Copie avec cdrdao
Une autre façon de faire consiste à utiliser cdrdao. Si par exemple, les deux derniers chiffres SCSI du lecteur sont 0,0 et ceux du graveur 1,0, alors on entre dans une console :
cdrdao copy --source-device 0,0 --device 1,0 --on-the-fly
Il faut préciser les options --source-driver et --driver si le lecteur et le graveur ne sont pas reconnus (ou entrer ces valeurs dans le fichier de configuration, voir la section Configuration des programmes plus haut).
On obtient une copie exacte si le disque original a été crée en mode Disc at Once sinon cdrdao va ajouter deux secteurs vides mais lisibles à la place des deux secteurs illisibles de fin de piste (en affichant un message du type "Warning: Padding with 2 zero sectors"). Pour qu'il ne crée pas ces deux secteurs, il faut activer l'option --tao-source.
Si l'option --on-the-fly n'est pas précisée, cdrdao va créer une image sur le disque qui sera effacée par la suite (pour la conserver, entrer l'option --keepimage).
Copie indirecte (utilisation d'une image)
C'est la méthode qu'il faut suivre si l'on ne dispose que d'un graveur qui est utilisé également comme lecteur.
Méthode simple
Le plus simple est alors d'utiliser cdrdao. Par exemple, si le disque original est dans le graveur, il suffit de taper dans une console :
cdrdao copy --device y,z
Le programme crée une image qui est effacée à la fin (voir plus haut pour la conserver). A la fin de la lecture, cdrdao va demander d'entrer un disque dans le graveur. On peut ignorer le message éventuel, "Error: cannot determine disk status: hit enter and try again". La copie sera exacte si le disque original a été créé en mode Track at Once et cdrdao ajoutera deux secteurs vides dans le cas contraire (voir plus haut).
Et pour les H4x0rz ;-) ... (utilisation avancée)
On peut utiliser également les programmes dd ou readcd pour créer une image d'un disque. Pour cela, on tape dans une console pour dd, si le lecteur est /dev/hdc et que l'on souhaite créer une image nommée image.raw dans le répertoire courant :
dd if=/dev/hdc of=image.raw
ou avec readcd (il faut alors un lecteur SCSI ou émulé SCSI) :
readcd dev=y,z f=image.raw
Il est préférable d'utiliser readcd car celui-ci fait plusieurs essais si la lecture sur le disque est difficile du fait d'un endommagement, ce que dd ne fait pas.
Dans les deux cas, il faut préciser le chemin si l'on ne souhaite pas que l'image soit créée dans le répertoire courant. Par ailleurs, le nom de l'image et l'extension (optionnelle) n'importent pas.
On grave ensuite l'image avec cdrecord :
cdrecord -v -dao dev=0,0 image.raw
Il est possible que les deux programmes signalent des erreurs d'entrée-sortie ("Input/output error"). Ceci vient probablement de ce que le disque initial a été créé en mode Track at Once, les deux programmes ne pouvant lire les deux secteurs illisibles en fin de piste. Normalement, les images sont utilisables. Si l'on veut éviter ces erreurs, il faut déterminer la longueur de la piste avec cdrdao :
cdrdao read-toc --device y,z image.toc
Avec la commande read-toc, cdrdao lit la Table des Matières (la TOC) et renvoie les informations de début et de fin de piste à l'écran. Il faut impérativement préciser un fichier (dont le nom importe peu) dans lequel sera stockée la longueur de la piste.
L'image est par défaut stockée dans le répertoire courant si l'on ne précise aucun chemin. Si l'on veut éviter que cdrdao crée ce fichier qui n'est pas utile ici et qu'il faudra effacer, il suffit de donner un nom de répertoire qui n'existe pas (cdrdao signale une erreur mais affiche les informations nécessaires à l'écran).
Les valeurs sont données au format mm:ss:bb avec mm le nombre de minutes, ss le nombre de secondes et bb le nombre de blocs à ajouter. Une seconde d'enregistrement représente 75 blocs et une minute 60 secondes. La conversion en nombre de blocs est donnée par cdrdao entre parenthèses.
Par exemple, si cdrdao renvoie les valeurs 00:00:00 (0) dans la colonne Start et les valeurs 00:42:55 (3205) dans la colonne Length, ceci signifie que la piste débute au secteur 0 et a une longueur de 3205 blocs (42x75 + 55).
Comme le disque a été écrit en mode Track at Once, il faut retirer les deux secteurs illisibles et copier 3203 secteurs.
Pour cela, on utilise uniquement readcd car dd continue de signaler des erreurs d'entrée-sortie :
readcd dev=y,z sectors=0-3203 f=image.raw
qui demande à readcd de lire du secteur 0 au secteur 3202 inclus, soit 3203 secteurs (il faut entrer sectors=0-3203 car readcd arrête la lecture au début du secteur 3203 et lit ainsi jusqu'au secteur 3202).
Il suffit ensuite de graver l'image avec cdrecord comme indiqué plus haut (avec le paramètre -dao si l'on veut un Cd en mode Disc at Once, sans si l'on veut faire une copie exacte du disque et conserver un disque en mode Track at Once (les deux secteurs illisibles seront alors rajoutés)).
On peut chercher à savoir au départ s'il s'agit d'un disque gravé en mode DAO ou en mode TAO. Pour cela, on récupère les informations de début et de longueur de piste avec cdrdao puis l'on essaie de lire les deux derniers secteurs avec readcd (pour l'exemple précédent, readcd dev=y,z sectors=3203-3205 f=essai, effacer ensuite le fichier essai). En cas d'errreur, il s'agit d'un disque gravé en mode TAO (à moins que le disque d'origine ne soit endommagé).
Une autre méthode consiste à utiliser cdrdao pour faire une image et la graver (ou cdrecord pour la graver) :
cdrdao read-cd --device y,z --datafile image.raw image.toc
Il faut impérativement préciser le nom d'un fichier pour la Table des Contenus (TOC).
Si l'option --datafile n'est pas précisée, l'image sera stockée sous le nom data.bin dans le répertoire courant.
L'image sera conforme au disque initial si celui-ci a été gravé en mode DAO et deux secteurs vides termineront la piste s'il a été réalisé en mode TAO (sauf si l'option --tao-source est activée).
L'image est ensuite gravée en utilisant le fichier TOC :
cdrdao write /home/image.toc
Il ne faut pas préciser le nom de l'image car celui-ci est présent dans le fichier image.toc.
L'image peut également être gravée avec cdrecord (avec l'option -dao, cela conduit au même résultat et sans, l'image comportera 4 secteurs de plus que la piste du disque original (les 2 secteurs vides rajoutés par cdrdao et les 2 secteurs illisibles du au mode TAO)).
Copie "logique"
Enfin, une dernière façon de procéder est possible. Elle consiste à monter le disque à graver dans un répertoire, à en faire une image avec mkisofs puis à la graver.
Note de Jice : je nomme cette copie "logique", par opposition à "physique", car on n'a alors pas une copie parfaite ou quasi parfaite du CD d'origine, mais la copie conforme de tous les fichiers et répertoires (ce qui est quand même le but recherché !).
Par exemple, on pourra faire si le disque original est sur /dev/hdc :
mount -t iso9660 /dev/hdc /mnt/cdrom
mkisofs -R -J -q -print-size /mnt/cdrom
mkisofs -R -J /mnt/cdrom 2>/dev/null | cdrecord -v -dao speed=12 dev=y,z tsize=5000s -
si mkisofs renvoie 5000 comme taille de l'image (voir plus haut) et pour une image au format Rock Ridge (-R) et Joliet (-J).
Les tailles de piste entre le disque original et la copie différeront probablement mais toutes les données seront sauvegardées.
Cd-Rom multi-sessions
Si on veut par exemple utiliser le même disque pour faire plusieurs sauvegardes successives, il faut créer un disque multi-sessions. Cela permet de créer un disque que l'on pourra lire entre temps et sur lequel on pourra par la suite rajouter des données.
Chaque session contient une piste de données ainsi qu'une Table des Matières qui est liée à la suivante, ce qui permet d'avoir accès à l'ensemble du contenu du disque.
Création d'un disque multi-sessions
La création d'un Cd-Rom de données multi-sessions est très simple. Il suffit d'ajouter quelques options à mkisofs et cdrecord.
Prenons un exemple :
Dans un premier temps, on cherche à sauvegarder le contenu du répertoire /home/session1. Pour cela, on réalise l'image de la façon habituelle :
mkisofs -R -o session1.raw /home/session1
D'après la documentation, il est indispensable de graver l'image au format Rock Ridge (l'option -R).
On grave ensuite l'image sous cdrecord avec l'option -multi :
cdrecord dev=y,z -v -multi session1.raw
L'option -dao peut être activée mais seulement pour la première session (cela ne semble pas fonctionner pour les autres avec cdrecord).
La première session est ainsi gravée et lisible comme n'importe quel autre CD-Rom.
Si l'on veut ensuite rajouter une autre session, il faut obtenir quelques informations sur le Cd-Rom. Pour cela, on place le Cd-Rom à graver contenant les premières sessions dans le graveur et on tape dans une console :
cdrecord -msinfo dev=y,z
Ceci donne deux chiffres qui sont respectivement le numéro de bloc du début de la dernière session et le numéro de bloc du début de la prochaine session (en fait, en multi-sessions, chaque Table des Matières est liée à la suivante). On note respectivement ces deux chiffres xxx et yyy.
Maintenant, si on souhaite graver une autre session qui contiendra le contenu du répertoire /home/session2, il faut inclure ces informations dans mkisofs. Si le disque contenant les sessions précédentes se trouve dans le graveur (dont le fichier de périphérique est /dev/scd0), on entre :
mkisofs -R -o session2.raw -C xxx,yyy -M /dev/scd0 /home/session2
Note : il est même possible de remplacer le paramètre -M /dev/scd0 par -M session_precedente.raw si session_precedente.raw est l'image de la dernière session gravée (bien sûr, en général on ne dispose plus de ce fichier).
On grave ensuite cette nouvelle session de façon habituelle :
cdrecord -v -multi dev=0,0 session2.raw
Note : on peut supprimer l'option -multi si l'on ne souhaite plus rajouter de nouvelle session par la suite.
Copie d'un Cd-Rom multi-sessions
La façon la plus simple de procéder est de monter le Cd-Rom sur un répertoire, d'en faire une image avec mkisofs puis de la graver avec cdrecord (éventuellement avec l'option -multi si l'on souhaite ajouter d'autres sessions par la suite).
Le nouveau disque ne comportera qu'une seule session mais contiendra l'ensemble des fichiers du disque original, ce qui est le plus important. Voir le paragraphe [#copielogique Copie logique].
Si l'on souhaite malgré tout faire une copie du disque original qui contienne le même nombre de sessions, il faut obtenir les informations sur le début et la longueur de chaque session et savoir si les sessions ont été gravées en mode DAO ou en mode TAO.
Dans un premier temps, on détermine le nombre de sessions sur le disque avec la commande cdrdao disk-info --device y,z.
Ensuite, on cherche le début et la longueur de chaque session. Par exemple, supposons que le disque original soit constitué de deux sessions. On tape alors dans une console :
cdrdao read-toc --device y,z --session 1 session1.toc
avec session1.toc le nom du fichier qui sera créé, le paramètre --session 1 permettant de lire les informations sur la première session (si l'on ne veut pas que cdrdao crée le fichier session.toc qui est inutile ici, il suffit d'entrer un nom de chemin inexistant (cdrdao renvoie un message d'erreur mais affiche les informations nécessaires)).
Supposons que sous la colonne Start, soit inscrit 00:00:00 et sous la colonne Length 03:00:06 (13506). Ceci signifie que la première session débute au bloc 0 et à une longueur de 13506 blocs ((3x60x75)+6).
On fait de même pour la deuxième session :
cdrdao read-toc --device y,z --session 2 session2.toc
Supposons que cdrdao renvoie un début de deuxième session au bloc 24906 et une longueur de 14568 blocs et une fin de piste en 39474 (la colonne Start=, et la ligne lout) ce qui correspond également à la somme des deux premiers.
On peut alors savoir si les sessions ont été gravées en mode DAO ou en mode TAO en essayant de lire les deux derniers secteurs de chacune d'entre elles. Par exemple, pour la première session, on fera :
readcd dev=y,z sectors=13504-13506 f=result
Si le disque a été gravé en mode TAO, readcd va renvoyer un message d'erreur (effacer le fichier result dans le cas contraire). Il n'est peut être pas nécessaire de faire cela pour les autres sessions car elles ont probablement été créées en mode TAO.
On réalise ensuite les images des deux sessions à partir du disque original en supprimant le cas échéant les 2 blocs de fin (les blocs illisibles liés à la gravure en TAO) :
readcd dev=y,z sectors=0-13504 f=session1.raw
readcd dev=y,z sectors=24906-39472 f=session2.raw
On grave ensuite la première session avec cdrecord :
cdrecord -v -multi dev=y,z session1.raw
On peut ensuite vérifier, par exemple avec cdrdao que la première session gravée débute en 0 pour se terminer en 13506 et que la deuxième session débute en 24906 pour finir en 39474.
Note : il est possible de graver la première session avec cdrdao mais il faut ensuite utiliser cdrecord pour les suivantes car cdrdao décale la suivante de deux secteurs (la deuxième session est alors illisibles car les liens entre les deux ne sont plus corrects). Par ailleurs, si l'on enregistre la première session avec cdrdao, celle-ci sera enregistrée au format Mode 2, Forme 2 avec 2336 octets par secteur. La deuxième session, s'il s'agit de la dernière, sera en revanche enregistrée au format de données avec 2048 octets par secteurs. La première session doit alors être gravée avec cdrado avec l'option --multi mais la deuxième doit l'être avec cdrecord.
Copie de Cd audio
La copie d'un disque audio peut se faire d'au moins trois façons: avec cdrdao, en combinant cdda2wav et cdrecord ou encore en combinant cdparanoia et cdrecord.
Méthode 1 : cdrdao
Ce logiciel permet de faire une copie directe du lecteur vers le graveur. Il faut que les deux soient reconnus comme des périphériques SCSI (par émulation ou non). Pour ce, si par exemple les deux derniers chiffres SCSI du lecteur sont 0,0 et les deux derniers du graveur 1,0, il suffit de faire :
cdrdao copy --source-device 0,0 --device 1,0 --on-the-fly
L'option --speed suivie de la vitesse permet de régler la vitesse de gravure.
Pour faire une copie indirecte du graveur vers le graveur, il suffit de taper :
cdrdao copy --device y,z fichier.toc
Il faut impérativement préciser un nom de fichier (ici fichier.toc, le nom peut être quelconque) dans lequel cdrdao va enregistrer des informations sur la Table des Matières (la TOC).
Le programme cdrdao va lire les pistes et créer une image dans le répertoire courant (nommée cddaxxx.bin, xxx étant un nombre aléatoire). Pour conserver cette image, il faut utiliser l'option --keepimage.
A la fin de la lecture, il demande d'insérer un disque et d'appuyer sur la touche Entrée. A priori, on peut ignorer les erreurs du type "ERROR: Cannot determine disk status - hit enter to try" ou encore "Cannot read CD text data - maybe not supported by drive" (dans ce dernier cas, c'est que le graveur ne peut pas lire les informations CD-Text qui contiennent le nom de l'artiste, le titre de l'album et le titre des pistes, ou que ces informations ne sont pas présentes sur le disque).
Le fichier de TOC contient un certain nombre d'informations importantes. En voici un exemple pour les trois premières pistes d'un disque :
// Track 1
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
SILENCE 00:00:32
FILE "data.wav" 0 04:04:46
START 00:00:32
// Track 2
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.wav" 04:04:46 03:03:68
START 00:02:42
// Track 3
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.wav" 07:08:39 04:20:50
START 00:02:06
Les durées sont exprimées au format mm:ss:bb, avec mm le nombre de minutes, ss le nombre de secondes et bb le nombres de blocs ou secteurs. Une seconde audio représentant 75 blocs, ce dernier compteur va de 0 à 74 (à 75, on le met à 0 et on incrémente le compteur de secondes qui va de 0 à 59).
La ligne SILENCE 00:00:32 signifie que la piste un débute par un silence de 32 secteurs (il s'agit d'un "pre-gap"). La ligne FILE "data.wav" 0 04:04:46 indique que le début de la piste 1 est fixé à 0 et qu'elle à une longueur de 04:04:46. Enfin, la ligne START 00:00:32 indique que le titre débute après 32 secteurs.
En fait, la piste est positionnée au secteur 0 du disque, le lecteur va lire depuis le début du disque et commencer à décompter le début du titre (de la chanson par exemple) à partir du secteur 32. Puis, le compteur va tourner pendant une durée de 04:04:46 avant de commencer le décompte de l'intervalle avant le deuxième titre.
Celui-ci a une durée de 00:02:46 comme indiqué sur la ligne START de la piste 2. Le titre dure lui 03:03:68.
Physiquement, la piste 1 commence au secteur 0 et à une longueur équivalente à une durée de 04:07:13 (04:04:46+00:02:42) ce qui correspond à 18538 secteurs (soit ((4x60)+07)x75+13) car l'intervalle avant la prochaine piste est inclut dedans.
La piste 1 débutant en 0, elle se termine au secteur 04:07:12 et la piste 2 débute au secteur 04:07:13. Elle a une longueur de 03:03:32 (03:03:68-00:02:42+00:02:06). La piste 3 commencera ainsi physiquement au secteur 07:10:45 (04:07:13+03:03:32).
La ligne SILENCE 00:00:32 aurait pu être omise. Dans ce cas, on aurait eu pour la piste 1 les lignes FILE "data.wav" 0 04:05:03 et START 00:00:32 et pour la piste 2 FILE "data.wav" 04:05:03 03:03:68 et START 00:02:42.
La piste 1 aurait toujours eu une longueur de 04:07:13 (04:05:03-00:00-32+00:02:42). La différence avec la version précédente est que les 32 secteurs de silence initial sont inclus dans le fichier data.wav.
On peut récupérer ces informations sur la TOC en utilisant la commande read-toc :
cdrdao read-toc --device y,z file.toc
qui va se contenter de créer le fichier file.toc.
Si l'on ajoute l'option --fast-toc, le fichier obtenu ne contient que la durée totale des pistes ainsi que leur secteur de début, les indications sur les intervalles entre pistes étant omises. Un disque copié avec cette méthode aura perdu ces informations.
La commande show-toc permet elle d'afficher les informations contenues dans un fichier. Par exemple :
cdrdao show-toc file.toc | less
affichera notamment la durée des intervalles (pregap), le secteur de début de la piste et le secteur de fin sur le disque.
Il est possible également d'enregistrer d'abord l'image sur le disque puis de la graver ensuite. On crée l'image par la commande :
cdrdao read-cd --device y,z file.toc
et on la grave ensuite par :
cdrdao write --device y,z file.toc
L'option --datafile suivie du nom à donner permet de donner un nom à l'image autre que le nom par défaut.
L'image qui est créée contient les pistes sous forme brute, c'est-à-dire le contenu des secteurs audio du secteur 0 au secteur de fin de disque, y compris les silences entre pistes. Elle sera multiple de 2352 puisque un secteur audio utilise les 2352 octets d'un secteur. En fait, si l'on fait la somme de la durée totale des pistes et qu'on les convertit en octets, on obtient la longueur du fichier image. Par exemple, si le disque précédent est limité au trois pistes alors, la piste 3 ayant une durée de 04:21:28, la durée totale de l'image est de 11:31:73 (04:07:13+03:03:32+04:21:28) ce qui correspond à 51898 secteurs. Ceci occupe 122064096 octets sur le disque (51898x2352). Dans les deux cas précédents, les 32 secteurs de silence de 32 secteurs au début du disque ne sont pas inclus dans l'image.
Une dernière chose mérite d'être signalée. Comme le précise le manuel de cdrdao, la copie effectuée sera plus ou moins exacte. Par exemple, avec certains graveurs, la durée physique des pistes est la même mais la durée du titre est augmentée d'un secteur, celui de l'intervalle étant réduit du même secteur. Ceci affecte seulement le moment où le lecteur indique la fin de la piste (il indique la fin de la piste un secteur plus tard) mais cela ne change rien à ce que l'on entend.
Méthode 2 : cdda2wav et cdrecord
La méthode consiste à extraire les pistes audio avec cdda2wav pour en faire des fichiers d'ondes (qui ont souvent l'extension .wav) puis à les graver avec cdrecord . Si le lecteur audio correspond au fichier de périphérique /dev/hdc, on enregistre les pistes avec :
cdda2wav -v255 -B -D/dev/hdc
On grave ensuite les pistes par :
cdrecord -v -dao -useinfo dev=y,z audio_*.wav
Tout ceci mérite quelques explications. Commençons par cdrecord.
L'option -dao demande de graver le disque en mode Disc at Once, l'option -useinfo indique qu'il faut utiliser les fichiers inf créés par cdda2wav et l'argument audio_*.wav précise que les pistes à graver correspondent aux fichiers indiqués.
En effet, cdda2wav sauvegarde les pistes dans des fichiers audio_xx.wav avec xx un nombre allant de 01 au nombre total de pistes sur le disque.
En ce qui concerne ce dernier, l'option -D sélectionne le lecteur sur /dev/hdc (il est également possible de sélectionner un périphérique SCSI, par exemple en entrant par exemple -D y,z).
L'option -v255 active le mode bavard au niveau maximal (pour les différents niveaux possibles, consulter la page de manuel, sachant qu'il faut additionner les chiffres correspondant à chaque niveau). Il faut l'activer au moins au niveau 4 pour que cdda2wav enregistrer les marques de fin de piste (pour les intervalles). Dans le cas contraire, la copie contiendra des pistes de longueur physique égale à celles de l'original mais tous les intervalles entre les pistes auront une longueur de 2 secondes (en fait 00:01:74) pour être conforme à la norme définie dans le Red Book qui définit les Cd audio.
L'option -B permet de créer un fichier .wav pour chaque piste. En l'absence de cette option, un seul fichier sera créé pour l'ensemble du disque et la copie ne contiendra qu'une seule piste.
Il existe un certain nombre d'options documentées dans la page de manuel ou dans la documentation de cdda2wav. Par exemple, l'option -t2 sauvegarde les pistes de la deuxième à la dernière. L'option -t2+4 sauvegarde les pistes 2 à 4 et l'option -t2+2 sauvegarde uniquement la piste 2. L'option -S suivie de la vitesse permet de sélectionner la vitesse du lecteur (ne pas dépasser la vitesse maximale indiquée par le constructeur pour éviter les erreurs de lecture).
L'option -J permet de créer uniquement les fichiers inf (faire par exemple cdda2wav -J -D/dev/hdc). Par défaut, le mode bavard est activé pour sauvegarder les marques de fin de pistes. Il faut activer l'option -vX avec X<4 si l'on ne veut pas les enregistrer.
Ces fichiers nommés par défaut audio_xx.inf ( xx allant de 01 au nombre total de pistes) contiennent un certain nombre d'informations importantes comme le titre de l'album, le titre des pistes, le début de la piste ("Trackstart") ou la longueur de la piste ("Tracklength"). Ces fichiers contiennent également une ligne "Index0" qui contient le début de l'intervalle entre pistes. Toutes les longueurs sont exprimées en blocs (ou secteurs).
Avec cette méthode, la copie peut être plus ou moins parfaite. Par exemple, avec certains graveurs, la durée des titres est supérieure de 8 secteurs à celle de l'originale et la longueur de l'intervalle réduite de 8 secteurs. Ceci ne change strictement à la durée totale des pistes mais affecte seulement les durées affichées par le lecteur.
Méthode 3 : cdparanoia et cdrecord
Cette méthode est identique à la précédente à la différence que l'on perd les informations sur les intervalles.
cdparanoia a ceci de différent par rapport à cdda2wav qu'il permet de faire de la correction d'erreurs, ce qui peut être intéressant dans le cas d'un CD audio rayé. Si vous entendez des craquements dans les CD copiés avec cdda2wav, essayez cdparanoia. La contre-partie est un temps de copie des pistes audio qui peut être plus long.
On lance cdparanoia pour sauvegarder les pistes par :
cdparanoia -v -B -d /dev/hdc
Ceci va créer un ensemble de fichiers nommés trackxx.cdda.wav avec xx un nombre compris entre 01 et le nombre total de pistes. Ces fichiers sont créés dans le répertoire courant.
L'option -v active le mode bavard, l'option -B permet de créer un fichier par piste (en son absence, un seul fichier wav est créé, correspondant à la durée totale du disque) et l'option -d permet de sélectionner le lecteur.
Il est possible que cdparanoia crée un fichier track00.cdda.wav. Ce sera le cas avec l'exemple précédent du fait du silence de 32 secteurs avant le début réel de la piste 1. Il est préférable de le supprimer afin d'éviter d'avoir une piste vide au début du disque. De plus, si la durée de la piste est inférieure à 4 secondes (300 secteurs), il est fort possible que le graveur refuse de la graver et génère une erreur.
On les grave ensuite par :
cdrecord -v -dao dev=y,z track*.cdda.wav
Par défaut, si l'extension des fichiers est wav ou au, cdrecord considère qu'il s'agit de fichiers audio et l'option -audio est activée par défaut. Il faut l'activer si l'extension des fichiers est différente.
Avec cette méthode, les intervalles entre les pistes sont tous égaux à 2 secondes (ce qui ne change rien à l'écoute du disque mais modifie seulement la façon dont le lecteur affiche les durées). Si l'on veut supprimer ces intervalles, il faut ajouter l'option defpregap=0 . De façon générale, l'option defpregap indique l'intervalle entre toutes les pistes en secteurs (sans modifier le début de la première). Si l'on veut définir séparément chaque intervalle, il faut utiliser l'option pregap=# qui définit l'intervalle avant la prochaine piste exprimé en nombre de secteurs (par exemple cdrecord -v -dao dev=y,z track01.cdda.wav pregap=75 track02.cdda.wav pregap=150 track03.cdda.wav pour un intervalle de 1 seconde entre la première piste et la deuxième et un intervalle de 2 secondes entre la deuxième et la troisième).
Le programme cdparanoia permet également de tester la capacité d'extraction du lecteur. Pour cela, il suffit de taper :
cdparanoia -vQ /dev/hdc
qui va afficher le message "Verifying drive can read CDDA..." puis, si l'extraction audio est possible, le message "Expected command set reads OK" et afficher la TOC.
Comme pour cdda2wav, il existe un certain nombre d'autres options. Il est par exemple possible de n'extraire qu'une partie d'une piste. On peut également signaler l'option -pad qui complètera les pistes si leur longueur n'est pas multiple de 2352, évitant ainsi des erreurs de gravure (ce peut être le cas dans des cas autres que la copie, par exemple si les fichiers ont été obtenus par conversion à partir de fichiers mp3).
Les fichiers d'ondes créés par cdda2wav ou par cdparanoia sont strictement identiques. Leur longueur est égale au nombre de blocs multiplié par 2352, auquel il faut ajouter 44 octets d'en-tête du fichier.
Il est enfin possible de combiner les deux méthodes précédentes en enregistrant les pistes à partir de cdparanoia, en récupérant les informations sur les marques de fin avec cdda2wav et en gravant les pistes avec cdrecord.
Pour cela, on procède par exemple en trois étapes.
On crée les fichiers inf par :
cdda2wav -J -D /dev/hdc track
Le paramètre track permet de créer des fichiers nommés track_*.inf.
On enregistre ensuite les pistes par :
cdparanoia -B -d /dev/hdc 1- wav
Ceci permet de créer des fichiers qui seront nommés track*.wav du fait de la présente du paramètre track . L'option 1- est indispensable avec le paramètre wav , elle permet de sauvegarder toutes les pistes (de la 1 à la dernière).
Comme on veut utiliser les fichiers inf, il faut renommer tous les fichiers track_*.inf en track*.inf.
On utilise pour cela la commande suivante :
for i in *.inf ; do j=$(echo $i | tr -d '_') ; mv $i $j ; done
La commande tr -d '_' permet de supprimer le caractère de soulignement. Si l'on a enregistré les pistes sous le nom track*.cdda.wav (l'option par défaut de cdparanoia ), il faut ensuite lancer la commande suivante :
for i in track??.inf ; do j=$echo( $i | tr -d '.inf').cdda.inf ; mv $i $j ; done
On grave ensuite les pistes par :
cdrecord -v -dao -useinfo dev=y,z track*.wav
Les CD mixtes
Il existe certains disques qui mélangent données (notamment des fichiers video) et audio d'une façon particulière, c'est-à-dire sur une même première piste. Ainsi, sur un disque, cdrdao indique une première piste audio avec un début en 15:15:15. Le début de la piste est constitué de données lisibles avec dd ou avec readcd.
La copie d'un tel disque avec cdrdao ne semble pas possible : les données sont illisibles et les pistes audio sont décalées (la piste 1 devient la piste 4 et les dernières pistes ne sont pas copiées). Ceci paraît normal dans la mesure où données et audio n'occupent pas le même espace sur un secteur.
Au demeurant, les données ont été enregistrées dans le format hybride hfs, lisibles par un PC (ici Joliet) et par un Macintosh.
Le plus simple si l'on souhaite conserver les données est de créer un Cd-Extra contenant les pistes audio dans une première session et les données dans une deuxième. Ainsi, seules les pistes audio seront affichées par le lecteur audio mais la piste de données sera accessible par un ordinateur.
Création du Cd-Extra
Pour cela, le plus simple est d'enregistrer les pistes audio avec cdda2wav ou cdparanoia (ou de combiner les deux) et de les graver avec cdrecord en mode multissession (on n'utilise pas cdrdao car il faut sauvegarder seulement les pistes audio et pas les données situées au début du disque). Par exemple, si les pistes ont été enregistrées avec cdda2wav , on fera :
cdrecord -v -dao -multi dev=0,0 audio_*.wav
Il faut ensuite récupérer les informations sur le début de la première session et le début de la prochaine sur le disque par la commande cdrecord dev=y,z -msinfo (la copie étant dans le graveur). Ceci va renvoyer deux nombres que l'on appelera n1 et n2. Ensuite, pour faire l'image des données, le plus simple est ensuite de monter le disque au format hfs pour faire une image des données (il faut que l'option hfs soit activée dans le noyau, il s'agit de la rubrique File systems, Apple Macintosh file system support).
Pour être le plus fidèle possible, il faut même cacher les fichiers Apple en mode Joliet. Pour cela, le plus simple est d'utiliser l'option hide-joliet-list de mkisofs. On crée alors un fichier contenant la liste des fichiers et répertoires et supprimer les fichiers accessibles en Joliet afin qu'il ne reste que les fichiers Apple (et inversement certainement pour les fichiers Joliet à masquer en hfs).
Le disque original sera monté par la commande mount -t hsf /dev/hdc /cdrom (si le périphérique de lecture est lié à /dev/hdc et le répertoire de montage est /cdrom.
On crée ensuite la liste dans le répertoire courant par ls /cdrom > liste, ce qui génère le fichier nommé liste que l'on édite pour effacer les fichiers accessibles uniquement en Joliet.
On peut alors en faire une image (nommée image.raw dans le répertoire courant) par la commande mkisofs -hfs -J -hide-joliet-list liste -o image.raw -C n1,n2 /cdrom. Il est inutile d'utiliser l'option -M car il ne faut pas lier les deux sessions (la deuxième n'a pas besoin d'accéder à la TOC de la première).
On grave ensuite la deuxième session normalement avec cdrecord (cdrecord -v dev=y,z image.raw).
Copie d'un Cd-Extra
La copie d'un tel disque et d'un Cd-Extra en général peut se faire de plusieurs manières.
Une première méthode consiste à procéder comme ci-dessus en enregistrant les pistes audio avec cdda2wav ou cdparanoia et à en faire une première session pour à refaire une image de la session de données pour en refaire une deuxième session.
Une autre méthode consiste à enregistrer chaque session avec cdrdao et à les graver ensuite (on utilise cdrdao pour garder la taille de la première session).
Pour sauvegarder la première session, on fera par exemple :
cdrdao read-cd --device y,z --session 1 --datafile session1.bin session1.toc
qui va générer une image nommée session1.bin et un fichier de la Toc nommé session1.toc. On sauvegarde ensuite la deuxième session par :
cdrdao read-cd --device y,z --session 2 --datafile session2.bin session2.toc
On définit ici les noms des images car en l'absence de cette option cdrdao va utiliser le nom data.bin et la deuxième image viendra écraser la première (ou alors, il faut créer la première image et l'enregistrer et créer ensuite la deuxième).
On peut alors passer à la gravure des deux sessions.
On grave la première avec cdrdao car il s'agit de pistes audio (cdrecord ne créerait qu'une seule piste). Il faut toutefois modifier légèrement le fichier session1.toc du fait de la multisession. Pour cela, il faut éditer ce fichier et remplacer la première ligne CD_DA par CD_ROM_XA. On grave alors la première session par :
cdrdao write --device y,z --multi session1.toc
Pour la deuxième session, il faut utiliser cdrecord. En effet, l'image de la deuxième session contenant l'adresse de fin de la première et l'adresse du début de cette deuxième session, il faut impérativement que celle-ci soit située exactement au même endroit sur le disque. Or, cdrdao grave cette deuxième session avec un décalage de 2 secteurs ce qui rend le disque illisible.
On utilise donc cdrecord qui ne produit pas ce décalage :
cdrecord -v dev=y,z session2.bin
Il est possible de recréer la première session avec cdda2wav (ou cdparanoia) et cdrecord mais il faut s'assurer que cette session aura exactement la même taille que l'orginal car il faut que la deuxième soit située au même endroit. En effet, la deuxième session contient son adresse sur le disque et il faut donc que la copie soit située au même endroit.
Graver une image .bin/.cue
(par Jice)
Un logiciel windows bien connu produit ce genre de fichiers en tant qu'images de CD. Le contenu du CD est stocké dans un (gros) fichier le_cd.bin, tandis que la table des matières du CD est dans un fichier du même nom, le_cd.cue. On trouve fréquemment ce type de fichiers sur internet.
Sous Linux, vous pouvez graver cette image de cd, avec cdrdao. Il suffit simplement de remplacer le fichier .toc par le fichier .cue, car cdrdao comprend aussi la syntaxe des fichiers .cue. Par exemple :
cdrdao write --device 1,0,0 --driver generic-mmc /home/jice/le_cd.cue
Note 1 : le seul problème que vous puissiez avoir dans ce cas provient des noms de fichiers contenant des espaces. Si vos fichiers se nomment "le cd.bin" et "le cd.cue", renommez-les respectivement "le_cd.bin" et "le_cd.cue", et éditez le fichier .cue, afin de mettre à jour la ligne qui contient le nom du fichier .bin avec le nouveau nom.
Note 2 : cdrdao ne sait pas produire de fichiers .cue à partir d'un CD. Je ne sais pas actuellement comment faire cela sous Linux.
Conclusion
(par Jice)
Cet article vous permettra d'utiliser au mieux votre graveur de CD. Pour de nombreuses opérations, vous pouvez toutefois utiliser les interfaces graphiques, telles que xcdroast, gcombust ou autres (voir la [../logi/?aff_rub=4 logithèque]), qui utilisent elles-même les programmes présentés ici, mais simplifient le processus (tout en n'offrant pas autant de flexibilité que la ligne de commande).
Si vous souhaitez voir ici développées d'autres utilisations du graveur, merci de me le signaler. Je pense écrire des parties sur :
- graver un CD audio depuis des MP3,
- graver un VCD ou SVCD à partir de fichiers MPEG 1 ou 2 (utiliser les logiciels graphiques Arson ou Qvcd, et en ligne de commande vcdimager ; voir la [../logi/index.php3?aff_rub=4 logithèque]),
- etc.
Je manque de temps pour écrire ces parties, aussi si vous vous en sentez la compétence, vous pouvez chez altern point org me faire parvenir vos contributions. Merci d'avance.
Copyright
Copyright © 12/03/2002, Pascal Cussy
Ce document est publié sous licence Creative Commons Attribution, Partage à l'identique, Contexte non commercial 2.0 : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ |
Autres ressources
- Sur Léa : la [../logi/?aff_rub=4 logithèque, sous-partie gravure]
- Le CD-Writing HOWTO
- La documentation d'IBM