Commande dd vs extraction de l'iso pour usb bootable

Salut, ce n’est pas vraiment un problème, juste que je ne comprends pas ce que fait la commande dd à coté d’une extraction d’un iso pour créer par exemple une clé usb.

Par exemple, existe-t-il une différence entre:

dd if=/chemin/image.iso of=/dev/sdc
sdc étant une clé usb

et
extraire l’iso, puis copier le contenu extrait dans la clé usb.

Pourriez-vous m’éclairez ? merci

salut,
Un peu de lecture
https://www.debian.org/CD/faq/#write-usb

La différence majeure, c’est que la copie du contenu ne créera pas une clé bootable.

ok, mais pourquoi ?

Que fait donc dd en plus d’une copie ? pourquoi est-ce que le fait qu’il n’y ait que les fichiers de l’image ne soit pas suffisant pour créer une clé usb bootable ?

C’es ça que je ne comprend pas :hushed:

Parce que copier des fichiers sur un support ne l’a jamais rendu bootable. La partie bootable ne se situe pas dans les fichiers visibles. (note : ce n’est plus tout-à-fait vrai pour booter en mode UEFI)

La commande dd copie tout, pas seulement les fichiers visibles mais aussi la partie bootable et bien d’autres méta-données.

La magie n’est pas cachée dans dd, mais dans /dev/quelquechose.
Les concepteurs d’Unix, puis de Linux ont souhaité unifier les accès aux données d’un système de façon à ce que, vu du programmeur, tout soit un fichier.
Ils ont donc imaginé pour le système de fichiers :

  • les fichiers ordinaires
  • les répertoires
  • des fichiers dits “spéciaux” qui ne contiennent en réalité pas de données, mais qui fournissent un accès au noyau, c’est à dire aux pilotes de périphériques, aux outils de communication interprocesses (pipes nommés), etc.

Dans un fichier (spécial) du type /dev/sdc se cachent en réalité les clés (major et minor numbers) d’accès au pilote du disque scsi “c”. Toute écriture (write()) vers ce fichier spécial effectue en réalité une écriture physique sur le disque à partir du track 0 sector 0. Sans tenir compte d’une quelconque interprétation des données. Action réciproque en lecture (read()), évidemment.

dd est un utilitaire qui accède de façon très basique aux appels système read et write du système de fichier. Par défaut il commence au premier octet de sa source (if=) et de sa destination (of=).

Quand il est utilisé pour créer un fichier .iso il permet de faire une copie “physique”, octet par octet, du contenu d’un disque qui sera enregistrée dans un fichier ordinaire. Réciproquement, la copie d’une image iso vers un disque restitue le clone d’un disque.

Voir, par exemple :
http://www.linux-france.org/article/kafkafr/node19.html

2 J'aime

Effectivement la magie n’est pas dans dd, on peut aussi utiliser cp pour lire ou écrire directement depuis un périphérique.

Je crois que je pige mieux, mais dans ce cas comment vérifier qu’un iso possède bien une partie bootable ? comment accéder à ces fichiers “invisibles” ?

J’imagine que c’est pas seulement “afficher les fichiers cachés” :sweat_smile:

D’abord, une petite mise au point sur la notion d’image ISO employée à tort et à travers.

“ISO 9660” est un format de système de fichiers en lecture seule conçu pour les disques optiques (CD, DVD…). Une “image ISO (9660)” est un fichier qui contient un système de fichiers à ce format. Une extension de ce format appelée “El Torito” permet d’y inclure un ou plusieurs “programmes” d’amorçage pour diverses architectures (PC-BIOS, PC-UEFI, Mac…). Cette extension ne se trouve pas dans la partie visible du système de fichiers.

Pour amorçer un disque optique au format ISO 9660, il faut donc

  • qu’il contienne un programme d’amorçage au format El Torito correspondant à l’architecture de la machine (un CD bootable sur PC ne l’est pas forcément sur Mac et vice versa)
  • que le firmware de la machine supporte le format El Torito.

Divers programmes tels que file ou isoinfo (du paquet genisoimage) peuvent détecter la présence d’un “programme” d’amorçage El Torito dans un système de fichier ISO (contenu dans une image ou un support optique). D’autres programmes comme geteltorito permettent d’extraire le programme d’amorçage.

Mais il n’y a pas que des images ISO et des supports optiques.
Par exemple un DVD vidéo n’est pas au format ISO mais au format UDF. Si on en fait une image, ce ne sera donc pas une image ISO mais plutôt une “image UDF”. Un disque dur, un SSD ou une clé USB qui est considérée globalement comme un disque dur ont un format totalement différent du format ISO : il y a généralement une table de partition, des partitions et un programme d’amorçage différents du format ISO/El Torito. Si on en fait une image, on obtient une image disque.

Si on copie une image ISO “pure” sur une clé USB classique, elle ne sera pas bootable sur PC car le firmware d’un PC ne s’attend pas à trouver un système de fichiers ISO et un programme d’amorce El Torito sur une clé qui est vue comme un disque dur. Il a existé des clés USB spéciales au format U3 émulant un disque optique et pouvant donc booter avec une image ISO, mais c’est très différent d’une clé USB classique.

Pour booter avec une clé USB, il faut que celle-ci contienne un programme d’amorce au format que le firmware s’attend à trouver sur un disque. Si le firmware est un BIOS : un MBR ; si le firmware est un UEFI : une partition système EFI.

Au début, il y a eu et il existe encore des programmes comme Unetbootin qui créent une clé bootable à partir d’une image ISO en ajoutant un programme d’amorce pour disque. Ça ne marche pas avec toutes les images ISO.

Une autre approche consiste à créer une image “hybride” qui a à la fois les caractéristiques d’une image ISO et d’une image disque. C’est pourquoi je parlais d’image ISO “pure” plus haut. Cela est possible car les deux formats ne stockent pas leurs méta-données au même endroit. Une telle image contient à la fois un système de fichiers ISO avec l’extension El Torito et un MBR avec une table de partition et un programme d’amorce. Sur un disque ou une clé USB on ne peut plus vraiment parler d’image ISO puisque c’est la table de partition et le programme d’amorçage pour disque, qui ne font pas partie du format ISO, qui sont alors utilisés pour booter. On peut d’ailleurs examiner son contenu avec les outils classiques pour disque dur comme fdisk pour afficher la table de partition.

Les images live et d’installation de Debian sont créées dans ce format hybride depuis plusieurs versions, c’est pourquoi elles sont bootables directement sur une clé USB ou un disque dur.

1 J'aime

merci Pascal, c’est devenu bien plu clair dans ma tête maintenant :wink:
ça faisait pas mal de temps que je me posais ce genre de question, content d’avoir acquis des connaissances aujourd’hui :slight_smile: