Lecture d'image disque
Maintenant sur http://linux-attitude.fr/post/Lecture-dimage-disque
Niveau:
Résumé: losetup, qemu-img, dd, fdisk
Sous unix tout est fichier. Un disque est un fichier, une partition est un fichier, un fichier est un fichier.
Ceci a de gros avantage, par exemple il n'y a quasiment pas de différence entre monter une partition et monter une image disque. Exemple :
Image disque
Créons maintenant une image d'un disque :
Et voila, c'est tout simple nous avons extrait une image de CD
Maintenant si nous voulons utiliser cette image plutôt que le CD, la commande mount a tout prévu pour nous. Le montage est très simple :
Et ceci fonctionne aussi avec l'image d'une partition, il suffit de remplacer /dev/cdrom par /dev/hda1.
Détaillons l'action de mount pour mieux la comprendre. Elle se passe en 2 temps. Tout d'abord elle crée un fichier spécial loopback à partir de l'image. Ceci transforme un fichier normal en fichier de type device. Indispensable pour que le noyau accepte de monter le contenu.
Nous avons maintenant le device /dev/loop1 qui est un device normal. Mount peut donc faire son travail :
Image d'un disque
Compliquons un peu la chose. Supposons que vous ayez l'image d'un disque complet, avec la table des partitions.
La méthode précédente ne fonctionne alors plus car on ne trouve pas directement de système de fichier dans l'image. Il existe certains patchs pour permettre le partitionnement de loop device. Mais en leur absence, il existe une autre solution.
Fdisk voit lui aussi les disques comme des fichiers, il peut donc lire leur table de partition.
Les informations importantes ici sont l'unité et la position de début des partitions.
Supposons que nous voulions monter la partition 1, ce qui nous faut est la position du début de la partition en octets :
Et ô miracle, losetup dispose de l'option qui nous intéresse :
Et nous avons notre partition dans le fichier /dev/loop2 que l'on peut monter naturellement. Par contre, faites attention, ce n'est pas réellement la partition, mais un peu plus (tout le disque à partir de la position 32256 en fait). Ce qui veut dire que pour une activité autre que le mount (dd, mkfs, ...) c'est à vous de ne pas dépasser la taille de la partition en écriture.
Image qemu
Maintenant si vous avez une image disque au format qemu, ceci ne fonctionne pas. Il vous suffit alors d'utiliser la commande qemu-img pour changer le format de l'image et retomber dans la situation précédente.
Bien sûr il vous faut un peu de place libre pour écrire la nouvelle image.
Niveau:
Résumé: losetup, qemu-img, dd, fdisk
Sous unix tout est fichier. Un disque est un fichier, une partition est un fichier, un fichier est un fichier.
Ceci a de gros avantage, par exemple il n'y a quasiment pas de différence entre monter une partition et monter une image disque. Exemple :
Image disque
Créons maintenant une image d'un disque :
$ dd if=/dev/cdrom of=image.iso
Et voila, c'est tout simple nous avons extrait une image de CD
Maintenant si nous voulons utiliser cette image plutôt que le CD, la commande mount a tout prévu pour nous. Le montage est très simple :
$ mount -o loop image.iso /mnt
Et ceci fonctionne aussi avec l'image d'une partition, il suffit de remplacer /dev/cdrom par /dev/hda1.
Détaillons l'action de mount pour mieux la comprendre. Elle se passe en 2 temps. Tout d'abord elle crée un fichier spécial loopback à partir de l'image. Ceci transforme un fichier normal en fichier de type device. Indispensable pour que le noyau accepte de monter le contenu.
$ losetup -f # cherche le premier loopback disponible
> /dev/loop1
$ losetup /dev/loop1 image.iso # crée ce loopback
> /dev/loop1
$ losetup /dev/loop1 image.iso # crée ce loopback
Nous avons maintenant le device /dev/loop1 qui est un device normal. Mount peut donc faire son travail :
$ mount /dev/loop1 /mnt
Image d'un disque
Compliquons un peu la chose. Supposons que vous ayez l'image d'un disque complet, avec la table des partitions.
$ dd if=/dev/hda of=image.img
La méthode précédente ne fonctionne alors plus car on ne trouve pas directement de système de fichier dans l'image. Il existe certains patchs pour permettre le partitionnement de loop device. Mais en leur absence, il existe une autre solution.
Fdisk voit lui aussi les disques comme des fichiers, il peut donc lire leur table de partition.
$ fdisk image.img
> Commande (m pour l'aide): u
> Commande (m pour l'aide): p
Disque image.img: 0 Mo, 0 octets
255 têtes, 63 secteurs/piste, 0 cylindres, total 0 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Périphérique Amorce Début Fin Blocs Id Système
image.img1 * 63 3566429 1783183+ 83 Linux
image.img2 3566430 4192964 313267+ 82 Linux swap / Solaris
> Commande (m pour l'aide): q
> Commande (m pour l'aide): u
> Commande (m pour l'aide): p
Disque image.img: 0 Mo, 0 octets
255 têtes, 63 secteurs/piste, 0 cylindres, total 0 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Périphérique Amorce Début Fin Blocs Id Système
image.img1 * 63 3566429 1783183+ 83 Linux
image.img2 3566430 4192964 313267+ 82 Linux swap / Solaris
> Commande (m pour l'aide): q
Les informations importantes ici sont l'unité et la position de début des partitions.
Supposons que nous voulions monter la partition 1, ce qui nous faut est la position du début de la partition en octets :
$ echo $((512*63)) # nombre de secteur * taille des secteurs
> 32256
> 32256
Et ô miracle, losetup dispose de l'option qui nous intéresse :
$ losetup -o 32256 /dev/loop2 image.img
Et nous avons notre partition dans le fichier /dev/loop2 que l'on peut monter naturellement. Par contre, faites attention, ce n'est pas réellement la partition, mais un peu plus (tout le disque à partir de la position 32256 en fait). Ce qui veut dire que pour une activité autre que le mount (dd, mkfs, ...) c'est à vous de ne pas dépasser la taille de la partition en écriture.
Image qemu
Maintenant si vous avez une image disque au format qemu, ceci ne fonctionne pas. Il vous suffit alors d'utiliser la commande qemu-img pour changer le format de l'image et retomber dans la situation précédente.
$ qemu-img convert image.qemu -O raw image.img
Bien sûr il vous faut un peu de place libre pour écrire la nouvelle image.