web-dev-qa-db-fra.com

Comment monter une partition à partir d'une image d'un périphérique en mode bloc créée par un dd (disque dur, par exemple) sous Linux?

J'ai une image de l'intégralité du disque créée à l'aide de 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 cela 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 partition unique. J'espère que c'est toujours possible avec l'image actuelle.

31
Deleted

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

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

mount /dev/loop0p1 /mnt

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

losetup -d /dev/loop0
44
bhelm

J'ai rencontré ce problème aujourd'hui et je voulais mettre à jour les réponses comme un rappel pour moi-même. Au lieu de calculer vous-même le décalage, 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 la seconde, etc.

12
GrGr

Vous avez la première partie: fdisk -l pour trouver le décalage de départ. Prenez ce nombre, multipliez-le par 512, et vous obtiendrez l'option offset à 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
6
baumgart

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 la boucle mount -o, offset = 32256 /path/to/image750.img/mnt fonctionnera pour vous. mais vous devriez vraiment lire le tutoriel mentionné.

4
Richard June

losetup -P automation

Méthode mentionnée par https://superuser.com/a/684707/128124 (ajouté dans util-linux v2.21, ajouté Ubuntu 16.04), ici sont des fonctions pour l'automatiser plus loin. 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 max_part config

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

loop est un module de 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

dit combien de partitions loop périphériques peuvent générer.

Il s'agit de 0 par défaut sur Ubuntu 14.04, raison pour laquelle aucune division automatique n'a lieu.

Pour le changer, on peut soit ajouter:

options loop max_part=31

dans un fichier dans /etc/modprobe, ou:

GRUB_CMDLINE_LINUX="loop.max_part=31"

à /etc/default/grub et ensuite Sudo update-grub.

La manière de définir un paramètre de module est également abordée à l'adresse suivante: https://askubuntu.com/questions/51226/how-to-add-kernel-module-parameters

Après un redémarrage, quand vous faites:

Sudo losetup -f --show my.img

il monte l'image sur un périphérique /dev/loopX et monte automatiquement les partitions sur des périphériques /dev/loopXpY.

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

Voir aussi

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
0
Journeyman Geek

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

0
Kasun