Comment monter une image disque?

26

J'ai une image disque myimage.diskqui 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 souhaite monter la partition principale dans un répertoire local. Je sais comment monter une image de partition en utilisant les utilitaires de boucle mais ici j'ai une image disque. Je suppose que je dois monter l'image en "sautant" la table de partition mais comment faire?

Emiliano
la source
7
Voir aussi superuser.com/questions/117136/… Vous pouvez utiliser simplement losetup --partscan --find --show disk.imgsuivi demount /dev/loop0p1 /mnt/disk
Flow
1
Duplication possible de Montage d'une image disque multi-partition sous Linux
Cristian Ciupitu

Réponses:

44

L'outil kpartx facilite cela. Il crée des périphériques de boucle dans / dev / mapper pour chaque partition de votre image. Ensuite, vous pouvez monter le périphérique de boucle qui correspond à 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 de boucle:

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

Alternativement, 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 de cette façon:

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
scott.squires
la source
1
Vous n'avez pas besoin de ce qui -o loopprécède, /dev/mapper/loop0p1est déjà un périphérique de bloc (un périphérique de mappage au-dessus d'un périphérique de boucle, vous ne voulez pas une autre couche de périphérique de boucle au-dessus de cela).
sch
2
Si vous n'obtenez pas de périphériques de partition ( /dev/loop0p1etc.) après l'exécution losetup, exécutez partprobe /dev/loop0.
Vladimir Panteleev
kpartxsemble être installé par défaut dans Linux Mint 18.
unfa
4

Trouvé ceci:

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

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 décalage est en octets. La méthode suggérée pour obtenir le décalage consiste à pointer partedl'image, puis à l'unité B pour les octets et à prendre la valeur de départ de la sortie d'impression. Comme alternative, en supposant que vous avez l'espace disque, faites l'évidence: une fois que vous avez le décalage et la taille, utilisez simplement ddpour extraire chaque partition dans un fichier séparé.

Emiliano
la source
1
Pour avoir écrit une très bonne réponse, pourriez-vous expliquer les parties les plus importantes ici? Avoir un lien, c'est bien, mais avoir les informations ici serait mieux.
slhck
1
Voici la partie clé:, mount -o loop,ro,offset=32256 hda.img /mnt/rabbitoù la valeur de offsetest en octets. La manière suggérée pour obtenir le décalage consiste à pointer la partie sur l'image, puis unit Bà octets et à prendre la startvaleur de la printsortie. Comme alternative, en supposant que vous avez l'espace disque, faites l'évidence: une fois que vous avez le décalage et la taille, utilisez simplement ddpour extraire chaque partition dans un fichier séparé.
un CVn du
Oui, désolé d'être trop court. Comme Michael l'a souligné, la partie pertinente est, bien sûr, la mountligne contenant l' offsetoption.
Emiliano
2
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}
vomir
la source
1
Bien que cela puisse répondre à la question, ce serait une meilleure réponse si vous pouviez expliquer pourquoi .
DavidPostill
2

De nos jours, vous pouvez minimiser votre travail en utilisant udisks. Solution d' 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 de boucle et montrera l'image ISO prête à monter. Une fois démonté, le périphérique de boucle sera terminé par udev.

-r là pour l'option en lecture seule.

éphémère
la source
C'est incroyable, merci pour l'info. Fou comment c'est la première fois que je trouve une référence à udisksctl.
Oxwivi