Graver sous Linux
Voici un récapitulatif pour graver ou plus exactement brûler (de l'anglais to burn) sous Linux. Une fois votre graveur reconnu, il est assez aisé de graver sous Linux en console. Cela présente même certains avantages par rapport à Windows (gravure depuis n'importe quel poste, faire tourner des applications lourdes pendant la gravure, pas de logiciel à payer, plus d'options disponibles, ...)
Vous pouvez donner vos commentaires, remarques, critiques à reg@gcolpart.com
Allez directement à la section qui vous intéresse :
- Configurer le noyau Linux
- Tester votre graveur
- Créer une image ISO
- Effacer un CD-RW
- Graver
- Graver en plusieurs fois (multisessions)
- Copie de CD
- Copie de CD multisessions
- Logiciels de gravure
- Liens
Configurer correctement le noyau
- Si vous avez un graveur SCSI, votre graveur devrait être aisément reconnu sous Linux (avec le support SCSI)- Si vous avez un graveur IDE et un noyau Linux 2.4.x, il faut faire une "émulation SCSI" pour cela il faut avoir un noyau Linux 2.4.x compilé avec les options suivantes (voir recompilation de noyau):
Enhanced IDE/MFM/RLL... Y IDE/ATAPI CDROM M SCSI hostadaptor emulation M Loopback device M SCSI support Y ou M SCSI CD-ROM support Y ou M Enable vendor-specific Y SCSI generic support Y ou M (choisir un driver SCSI, n'importe lequel) ISO 9660 CDROM filesystem Y Microsoft Joliet cdrom... MVous devez avoir ces lignes dans /etc/lilo.conf :
image=/vmlinuz label=Linux read-only append="hdd=ide-scsi"(en supposant que votre graveur est sur /dev/hdd càd qu'il est esclave du lecteur CD-ROM)
N'oubliez pas de lancer la commande:
# lilo- Si vous avez un graveur IDE et un noyau Linux 2.6.x, il suffit de spécifier correctement vos périphériques IDE dans le noyau.
Créer ensuite un point de montage, par exemple:
# mkdir /graveurEnsuite rajoutez cette ligne dans /etc/fstab:
/dev/hdd /graveur iso9660 defaults,ro,user,noauto 0 0(Attention si vous utilisez l'emulation SCSI, mettez par exemple /dev/scd0 si vous n'avez pas d'autres périphériques SCSI)
Maintenant, vous pouvez lire les CD insérés dans votre graveur en user grâce à:
$ mount /graveur
Tests de reconnaissance de votre graveur
Passons aux choses sérieuses, la gravure:Deux programmes sont indispensables : cdrecord, mkisofs.
À priori, mkisofs est accessible par tous les utilisateurs alors que cdrecord n'est accessible qu'en root (par défaut). On peut ajuster les droits pour pouvoir y accéder en tant qu'utilisateur.
Il faut les installer. Sous Debian GNU/Linux:
# apt-get install cdrecord mkisofsVérifions maintenant que tout est prêt pour le grand saut avec deux commandes:
Pour vérifier que notre graveur est bien reconnu par le système :
dmesg | grep Vendor Vendor: CyberDrv Model: CW058D CD-R/RW Rev: 100DEnsuite, on vérifie qu'il est prêt à graver :
cdrecord -scanbus Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jörg Schilling Linux sg driver version: 3.1.24 Using libscg version 'schily-0.5' scsibus0: 0,0,0 0) 'CyberDrv' 'CW058D CD-R/RW ' '100D' Removable CD-ROM 0,1,0 1) * 0,2,0 2) * 0,3,0 3) * 0,4,0 4) * 0,5,0 5) * 0,6,0 6) * 0,7,0 7) *On retient donc 0,0,0 car c'est là que se "trouve" le graveur.
Avec un noyau 2.6.x, on ajoutera l'option dev=/dev/hdd par exemple...
Bref, le graveur est bien reconnu et on est prêt à graver.
On devra spécifier le périphérique (0,0,0 de l'exemple) quand on grave. Mais on peut retenir cette option dans le fichier /etc/default/cdrecord et mettre par exemple, pour un graveur SCSI ou un noyau 2.4.x :
CDR_DEVICE=0,0,0Pour un noyau 2.6.x, on mettra directement le périphérique, par exemple :
CDR_DEVICE=/dev/hddSinon on pourra toujours préciser l'option dev=... pour graver. Attention, on pourrait se contenter d'indiquer les 2e et 3e chiffres sortis par la commande cdrecord -scanbus mais dans certains cas, il faudra préciser les 3 chiffres notamment si vous des périphériques SCSI (Merci Muahdib)
Créer une image ISO
Rassemblez vos données à graver dans un répertoire, par exemple gravure/ puis :$mkisofs -r -v -J -o cd_image.iso gravure/
qui va créer une image ISO du répertoire gravure/
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.
L'option -v nous donne plus de de renseignements au cours de l'opération.
L'option -J (option Joliet) signifie que les CD-Rom seront lisibles sous windows même si des fichiers ont des noms longs.
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.
Chez moi cette commande donne :
mkisofs 1.14 (i686-pc-linux-gnu) Scanning gravure/ Joliet: protecting extension of but_gullit.mpg Joliet: protecting extension of ut_gullit.mpg Joliet: protecting extension of t_gullit.mpg Joliet: protecting extension of _gullit.mpg Joliet: protecting extension of gullit.mpg Joliet: protecting extension of but_gullit.mpg Joliet: protecting extension of ut_gullit.mpg Joliet: protecting extension of but_gullit.mpg Joliet: protecting extension of ut_gullit.mpg Joliet: protecting extension of _gullit.mpg Joliet: protecting extension of gullit.mpg 60.16% done, estimate finish Mon Dec 30 22:43:44 2002 Total translation table size: 0 Total rockridge attributes bytes: 1037 Total directory bytes: 0 Path table size(bytes): 10 Max brk space used 7644 8320 extents written (16 Mb)On peut même le faire avec plusieurs répertoires :
$mkisofs -R -v -J -o cd_image.iso gravure1/ gravure2/
Cette commande rassemble le contenu de ces deux répertoires à la racine de l'ISO
Testons maintenant notre image ISO cd_image.iso :
On monter le fichier cd_image créé ci-dessus dans un répertoire test_iso (créé préalablement), puis envoyez la commande en root:
#mount -t iso9660 -o ro,loop=/dev/loop0 cd_image.iso test_iso/
Normalement tout se passe bien, et en allant dans test_iso/ on voit ce que l'on vont graver...
N'oublions pas le #umount test_iso avant de passer à autre chose.
Effacer un CD-RW
en root, #cdrecord blank=all dev=0,0Attention, cette commande efface entièrement le CD-RW et peut donc prendre un bon bout de temps (30 min).
Voici ce que répond cette commande sur mon poste :
# cdrecord blank=all dev=0,0
Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jörg Schilling scsidev: '0,0' scsibus: 0 target: 0 lun: 0 Linux sg driver version: 3.1.24 Using libscg version 'schily-0.5' Device type : removable CD-ROM Version : 0 Response Format: 1 Vendor_info : 'CyberDrv' Identifikation : 'CW058D CD-R/RW ' Revision : '100D' Device seems to be: Generic mmc CD-RW. Using generic SCSI-3/mmc CD-R driver (mmc_cdr). Driver flags : SWABAUDIO Starting to write CD/DVD at speed 4 in write mode for single session. Last chance to quit, starting real write in 0 seconds. Operation starts.A noter que pour un effacement rapide, on pourra faire un #cdrecord blank=fast dev=0,0
D'autres options sont également disponibles (voir man cdrecord)
Pour effacer seulement la dernière session gravée : #cdrecord blank=session (ne marche pas chez moi :-/ )
Attention : lorsqu'un CD-RW est effacé, il n'est plus lisible car ne contient aucune donnée !
La commande mount /graveur va échouer :
mount : type fs incorrect, option incorrecte, superbloc incorrect sur /dev/scd0, ou trop de systèmes de fichiers montés
La gravure proprement dite
Gravons maintenant une image ISO sur un CD-R ou CD-RW (à faire en root)#cdrecord -v dev=0,0 speed=4 cd_image.iso
Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jörg Schilling TOC Type: 1 = CD-ROM scsidev: '0,0' scsibus: 0 target: 0 lun: 0 Linux sg driver version: 3.1.24 Using libscg version 'schily-0.5' atapi: 1 Device type : Removable CD-ROM Version : 0 Response Format: 1 Vendor_info : 'CyberDrv' Identifikation : 'CW058D CD-R/RW ' Revision : '100D' Device seems to be: Generic mmc CD-RW. Using generic SCSI-3/mmc CD-R driver (mmc_cdr). Driver flags : SWABAUDIO Drive buf size : 1806336 = 1764 KB FIFO size : 4194304 = 4096 KB Track 01: data 16 MB Total size: 18 MB (01:50.96) = 8322 sectors Lout start: 19 MB (01:52/72) = 8322 sectors Current Secsize: 2048 ATIP info from disk: Indicated writing power: 6 Reference speed: 2 Is not unrestricted Is erasable ATIP start of lead in: -11078 (97:34/22) ATIP start of lead out: 359849 (79:59/74) speed low: 0 speed high: 4 power mult factor: 3 5 recommended erase/write power: 3 A2 values: 56 43 23 Disk type: Phase change Manuf. index: 11 Manufacturer: Mitsubishi Chemical Corporation Blocks total: 359849 Blocks current: 359849 Blocks remaining: 351527 Starting to write CD/DVD at speed 4 in write mode for single session. Last chance to quit, starting real write in 0 seconds. Operation starts. Waiting for reader process to fill input buffer ... input buffer ready. Performing OPC... Starting new track at sector: 0 Track 01: 16 of 16 MB written (fifo 100%). Track 01: Total bytes read/written: 17039360/17039360 (8320 sectors). Writing time: 30.453s Fixating... Fixating time: 77.420s cdrecord: fifo had 269 puts and 269 gets. cdrecord: fifo was 0 times empty and 188 times full, min fill was 93%.Et voilà, le tour est joué pour graver simplement des données.
Remarquons que pour aller plus vite, créer un fichier /etc/default/cdrecord contenant les lignes :
#device donné par cdrecord-scanbus CDR_DEVICE=0,0,0 #vitesse de gravure par défaut CDR_SPEED=4Cela vous évite de spécifier les options dev= et speed=, mais vous pouvez tout de meme les spécifier (surtout si elles diffèrent des vitesses par défaut ;o) )
Notons que l'éjection/réinjection est souvent nécessaire afin de prendre en compte les changements (gravure, effacement,..)
Des options sont souvent utilisées par graver une image ISO:
-dao : disk-at-once ou session-at-once ce qui grave le CD en une seule session (on ne pourra ajouter de nouvelles sessions)
driveropts=burnfree Pour éviter les erreurs de Buffer Underrun (non disponible avec certains modèles de graveurs) Le graveur a une mémoire qui régule le flux de données à envoyer au graveur. Si le flux devient nul pendant un moment, cela peut entraîne des erreurs de Buffer Underrun.
-data : spécifie que les données sont écrites au format Yellow Book (CD-ROM mode 1). La taille des données doit être multiple de 2048 bits. Les données doivent être des systèmes de fichiers ISO-9660 ou Rock Ridge.
D'autres oprions moins importantes:
-eject : pour éjecter le CD une fois la gravure terminée
gracetime=n ou n>2 : pour attendre 2 secondes avant de commencer la gravure..
Une interface du type K3b lancera tout simplement une commande avec des options:
$ cdrecord -v gracetime=2 dev=/dev/hdd speed=12 -dao driveropts=burnfree -eject -data image.iso
Graver en plusieurs fois (multisessions)
$mkisofs -r -v -J -o session1.iso gravure/#cdrecord dev=0,0 -v -multi session1.iso
Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jörg Schilling TOC Type: 3 = CD-ROM XA mode 2 scsidev: '0,0,0' scsibus: 0 target: 0 lun: 0 Linux sg driver version: 3.1.24 Using libscg version 'schily-0.5' atapi: 1 Device type : Removable CD-ROM Version : 0 Response Format: 1 Vendor_info : 'CyberDrv' Identifikation : 'CW058D CD-R/RW ' Revision : '100D' Device seems to be: Generic mmc CD-RW. Using generic SCSI-3/mmc CD-R driver (mmc_cdr). Driver flags : SWABAUDIO Drive buf size : 1806336 = 1764 KB FIFO size : 4194304 = 4096 KB Track 01: data 16 MB Total size: 18 MB (01:50.96) = 8322 sectors Lout start: 19 MB (01:52/72) = 8322 sectors Current Secsize: 2048 ATIP info from disk: Indicated writing power: 6 Reference speed: 2 Is not unrestricted Is erasable ATIP start of lead in: -11078 (97:34/22) ATIP start of lead out: 359849 (79:59/74) speed low: 0 speed high: 4 power mult factor: 3 5 recommended erase/write power: 3 A2 values: 56 43 23 Disk type: Phase change Manuf. index: 11 Manufacturer: Mitsubishi Chemical Corporation Blocks total: 359849 Blocks current: 359849 Blocks remaining: 351527 Starting to write CD/DVD at speed 4 in write mode for multi session. Last chance to quit, starting real write in 0 seconds. Operation starts. Waiting for reader process to fill input buffer ... input buffer ready. Performing OPC... Starting new track at sector: 0 Track 01: 16 of 16 MB written (fifo 100%). Track 01: Total bytes read/written: 17039360/17039360 (8320 sectors). Writing time: 30.361s Fixating... Fixating time: 78.896s cdrecord: fifo had 269 puts and 269 gets. cdrecord: fifo was 0 times empty and 189 times full, min fill was 95%.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=0,0
19722,26924Ceci donne deux chiffres qui sont respectivement 19722 : le numéro de bloc du début de la dernière session et 26924 : le numéro de bloc du début de la prochaine session.
Maintenant, si on souhaite graver une autre session qui contiendra le contenu du répertoire session3/, 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 -J -v -o session3.iso -C 19722,26924 -M /dev/scd0 session3/
mkisofs 1.14 (i686-pc-linux-gnu) Rock Ridge signatures found Scanning langagec/ Joliet: protecting extension of but_gullit.mpg [...] Total translation table size: 0 Total rockridge attributes bytes: 1453 Total directory bytes: 0 Path table size(bytes): 10 Max brk space used 7000 26976 extents written (52 Mb)Notons qu'il est même possible de remplacer le paramètre -M /dev/scd0 par -M session_precedente.iso si session_precedente.iso est l'image de la dernière session gravée si session_precedente.iso est encore sur le disque dur (mais 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 session3.iso
Notons que lorsque l'on ne souhaite plus rajouter de nouvelle session, on supprime l'option -multi.
Et ne pas oublier qu'il peut être nécessaire d'éjecter/réinjecter le CD pour lire la dernière session.
Copie de CD non audio et non multisession
Pour vérifier que le CD n'est pas multisession, on l'insère dans le graveur puis #cdrecord -msinfo et si on obtient0,yyyc'est qu'il n'est pas multisession et on peut continuer, si ce n'est pas le cas, se reporter à la section Copie de CD-ROM multi-sessions.
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 -isosize speed=8 dev=0,0 /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.
#cdrecord -fix
peut ensuite nécessaire pour finaliser le disque si le disque est illisible.
Copie de 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.
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=8 dev=0,0 tsize=5000s -
Si mkisofs renvoie 5000 comme taille de l'image 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.
Logiciels de gravure
Il est important de savoir comment fonctionne la gravure en console.Les logiciels de gravure ne sont donc que des interfaces graphiques qui exécutent les commandes vues ci-dessus avec plus ou moins d'options. Ils peuvent s'avérer néanmoins pratiques. EN voici une petite liste:
k3b (celui que j'utilise)
eroaster
xcdroast
cdbakeoven
gcdmaster
Liens
HOWTO Graveur de CDsLea-Linux: La gravure en ligne de commandes
DLFP: graver sous Linux