Accéder aux partitions d'un fichier image

Si vous êtes habitués à tester/utiliser des os dans des émulateurs, vous avez surement des fichiers images représentant des disques comportant plusieurs partitions.
Dernièrement, j’ai voulu accéder à l’une de ces partitions, et je me suis rendu compte, que ce n’était pas aussi simple (ou plutôt que je ne savais pas comment faire) qu’accéder à un fichier représentant une image d’un système de fichier.

Données

Prenons pour exemple un fichier de 5Go partionné en 2 partitions, et on veut accéder à la 2ème partition:

$ fdisk -ul disk_temp.img
Vous devez initialiser cylindres.
Vous pouvez faire cela à partir du menu des fonctions additionnelles.

Disque disk_temp.img: 0 Mo, 0 octets
255 heads, 63 sectors/track, 0 cylinders, total 0 secteurs
Units = secteurs of 1 * 512 = 512 bytes
Disk identifier: 0x9da12377

Périphérique Amorce    Début         Fin      Blocs    Id  Système
disk_temp.img1              63     3919859     1959898+  83  Linux
disk_temp.img2         3919860    10474379     3277260   83  Linux

L’option « -u » dans l’appel à fdisk est importante car elle permet de donner la taille en secteurs et non en cylindres, ce qui va nous servir par la suite.

Préparation

Il nous faut relier un fichier device à la partition.
Pour cela, on va utiliser la commande losetup en lui spécifiant un offset.
Cette commande est disponible selon les distributions dans le paquet mount pour debian,ubuntu, util-linux-ng pour archlinux ou fedora.

L’offset se calcule en multipliant la taille d’un secteur par la valeur donnée par fdisk -ul (3919860 selon la sortie de fdisk):

losetup -o $((3919860 * 512)) /dev/loop0 disk_temp.img

Plus qu’à utiliser

Il nous reste plus qu’à monter la partition dans un répertoire existant (disk par exemple):

mount /dev/loop0 disk

Détacher le périphérique loop

Pour détacher le périphérique une fois la partition démontée:

losetup -d /dev/loop0