Comment puis-je monter une partition à partir d'une image créée par DD d'un périphérique de bloc (par exemple HDD) sous Linux?


34

J'ai une image du disque entier créé en utilisant dd . La structure du disque suit:

kent@cow:~$ sudo fdisk -l

Disk /dev/sda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b8508

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           5       90872   729929303+  83  Linux
/dev/sda2           90873       91201     2642692+   5  Extended
/dev/sda5           90873       91201     2642661   82  Linux swap / Solaris

L'image a été créée en utilisant:

dd if=/dev/sda of=image750.img

Comment pourrais-je, si c'est possible, monter / dev / sda1 à partir de l'image pour pouvoir en lire le contenu?

Ce n'est pas une option pour cloner à nouveau le disque dur, je sais comment le faire si je n'avais cloné que la seule partition. J'espère que c'est toujours possible avec l'image actuelle.



Réponses:


49

De nos jours, il existe un meilleur moyen, plus besoin d'utiliser des décalages ou kpartx:

losetup --partscan --find --show disk.img

mount /dev/loop0p1 /mnt

pour libérer loop0, utilisez après umount:

losetup -d /dev/loop0

8
Sur mon installation Ubuntu 14.04, losetup ne fournit pas d'option --partscan.
Cutter

1
@Cutter, il a été ajouté dans util-linux 2.21, Ubuntu 16.04. :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Après avoir utilisé le kpartxpremier, qui monte les partitions comme /dev/mapper/loop3p1, je veux juste souligner que losetupcrée les périphériques comme /dev/loop0p1. La réponse le note, mais je l'ai relu probablement 10 fois. : /
Randy Syring

13

J'ai rencontré ce problème aujourd'hui et je voulais mettre à jour les réponses juste pour me rappeler. Au lieu de calculer le décalage par vous-même, vous pouvez utiliser un outil qui vous fournit des périphériques montables à partir d'une image dd: kpartx

http://robert.penz.name/73/kpartx-a-tool-for-mounting-partitions-within-an-image-file/

http://linux.die.net/man/8/kpartx

Dans le cas donné, il faudrait quelque chose comme

sudo kpartx -a image750.img
sudo mount /dev/mapper/loop1p1 /mount/point -o loop,ro

où loop1p1 représente la première partition, loop1p2 pour la seconde, etc.


6

Vous avez la première partie: fdisk -l pour trouver le décalage de départ. Prenez ce nombre, multipliez par 512, et vous obtiendrez l'option de décalage à monter. Donc, pour sda1 dans votre cas, 5 * 512 = 2560. Exécutez ensuite le montage:

mount -o loop,offset=2560 -t auto /path/to/image.dd /mount/point

4

Le montage en boucle n'est qu'une partie de la réponse.

Consultez http://wiki.edseek.com/guide:mount_loopback#accessing_specific_partitions_in_the_image pour obtenir de l'aide sur la spécification de la partition. Je pense que la boucle de montage -o, offset = 32256 /path/to/image750.img / mnt fonctionnera pour vous. mais vous devriez vraiment lire le tutoriel mentionné.


le décalage semble incorrect; cela correspond à un début de partition de 63 (<i> 63 * 512 = 32256 </i>). le décalage dans la réponse de baumgart semble plus correct pour cette situation. le lien est une bonne référence, mais ce serait une meilleure réponse si vous preniez le temps de résumer les étapes ou les commandes nécessaires à cette procédure. Merci!
Quack Quichote

1

losetup -P automatisation

Méthode mentionnée par /superuser//a/684707/128124 (ajoutée dans util-linux v2.21, ajoutée Ubuntu 16.04), voici des fonctions pour l'automatiser davantage. Usage:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

La source:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    sudo mkdir -p "$dst"
    sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)

module de boucle config max_part

Méthode décente avant util-linux v2.21.

loop est un module du noyau, intégré au noyau dans Ubuntu 14.04.

Si vous le configurez correctement, Linux divise automatiquement les périphériques pour vous.

cat /sys/module/loop/parameters/max_part

indique le nombre de partitions que les looppériphériques peuvent générer.

C'est 0par défaut sur Ubuntu 14.04, c'est pourquoi aucune séparation automatique ne se produit.

Pour le changer, on peut soit ajouter:

options loop max_part=31

vers un fichier dans /etc/modprobe, ou:

GRUB_CMDLINE_LINUX="loop.max_part=31"

à /etc/default/grubpuis sudo update-grub.

La façon de définir un paramètre de module est également abordée sur: /ubuntu/51226/how-to-add-kernel-module-parameters

Après un redémarrage, lorsque vous effectuez:

sudo losetup -f --show my.img

il monte l'image sur un /dev/loopXpériphérique et monte automatiquement les partitions sur les /dev/loopXpYpériphériques.

C'est donc la méthode la plus pratique si vous souhaitez redémarrer.

Voir également


0

Si vous avez un système de fichiers en mode utilisateur comme fusible, alors dans les environnements de bureau comme Gnome et avez installé un outil comme gnome-disk-image-mounter, puis sans même root par clic droit et ouvrez-le.


0

Je crois que le montage en boucle est la réponse -

sudo mkdir /path/to/dir/
mount -o loop example.img /path/to/dir/

Ce qui précède devrait le monter sous ce répertoire.

Cela devrait le démonter:

umount /path/to/dir
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.