Gcolpart.com by reg

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 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...       M
Vous 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 /graveur
Ensuite 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 mkisofs
Vé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: 100D
Ensuite, 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,0
Pour un noyau 2.6.x, on mettra directement le périphérique, par exemple :
CDR_DEVICE=/dev/hdd
Sinon 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,0
Attention, 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=4
Cela 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,26924
Ceci 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 obtient
0,yyy
c'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 CDs
Lea-Linux: La gravure en ligne de commandes
DLFP: graver sous Linux




powered by Apache     powered by Debian     Valid XHTML 1.1     Valid CSS     ecrit avec Vim    
Copyright (c) 2002-2014 Gregory Colpart. Infogerance serveur