web-dev-qa-db-fra.com

Comment puis-je monter une image disque?

J'ai une image disque myimage.disk qui contient la table de partition et une partition principale (c'est-à-dire un système de fichiers FAT32). Pensez-y comme une image de stylo USB.

Je veux monter la partition principale sur un répertoire local. Je sais comment monter une image de partition en utilisant les utils de la boucle, mais ici, j'ai une image de disque. Je suppose que je dois monter l'image en "sautant" la table de partition, mais comment puis-je le faire?

26
Emiliano

L'outil kpartx facilite cela. Il crée des périphériques en boucle dans/dev/mapper pour chaque partition de votre image. Ensuite, vous pouvez monter le périphérique de boucle correspondant à la partition souhaitée sans avoir à calculer le décalage manuellement.

Par exemple, pour monter la première partition de l'image disque:

kpartx -a -v myimage.disk
mount /dev/mapper/loop0p1 /mnt/myimage

Lorsque vous avez terminé avec l'image, supprimez les périphériques en boucle:

umount /mnt/myimage
kpartx -d -v myimage.disk

Sinon, si vous avez un noyau récent et passez loop.max_part = 63 au démarrage (si la boucle est intégrée) ou à modprobe (si la boucle est un module), vous pouvez le faire comme suit:

losetup /dev/loop0 myimage.disk
partprobe /dev/loop0             # Re-read partition table if /dev/loop0 was used with a different image before
mount /dev/loop0p1 /mnt/myimage

Lorsque vous avez terminé avec la boucle:

losetup -d /dev/loop0
44
scott.squires

Trouvé ceci:

http://www.andremiller.net/content/mounting-hard-disk-image-including-partitions-using-linux

ce qui semble exactement ce que je cherchais.

Voici la partie clé:

mount -o loop,ro,offset=32256 hda.img /mnt/rabbit

où la valeur de l'offset est en octets. La méthode suggérée pour obtenir le décalage consiste à pointer parted sur l'image, puis l'unité B pour les octets et la valeur initiale de la sortie imprimée. En guise d'alternative, en supposant que vous disposiez de l'espace disque, procédez de manière évidente: une fois que vous avez le décalage et la taille, utilisez simplement dd pour extraire chaque partition dans un fichier séparé.

4
Emiliano
local_image_file=/var/tmp/image.img
first_byte=$(parted -m ${local_image_file} unit B print | grep Linux | cut --fields 2 --delimiter ':' | sed 's/.$//')
loop_file=/var/tmp/loop
mkdir -p ${loop_file}
mount -o loop,ro,offset=${first_byte} ${local_image_file} ${loop_file}
2
spew

De nos jours, vous pouvez minimiser votre travail en utilisant udisks. Solution de ArchWiki: udisks - Monter des périphériques en boucle

Pour monter facilement des images ISO, utilisez la commande suivante:

udisksctl loop-setup -r -f image.iso

Cela créera un périphérique en boucle et montrera l'image ISO prête à être montée. Une fois démonté, le périphérique de boucle sera terminé par udev.

-r existe pour l'option lecture seule.

2
ephemerr