63 votes

Comment puis-je monter une partition à partir d'une image créée par dd d'un périphérique de blocs (par exemple un disque dur) sous Linux ?

J'ai une image de l'ensemble du disque créée à l'aide de dd. La structure du disque est la suivante :

kent@cow:~$ sudo fdisk -l

Disk /dev/sda: 750,1 Go, 750156374016 octets
255 têtes, 63 secteurs/piste, 91201 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Identifiant de disque : 0x000b8508

   Périphérique Amorçage      Début         Fin      Blocs   Id  Système
/dev/sda1   *               5       90872   729929303+  83  Linux
/dev/sda2               90873       91201     2642692+   5  Étendue
/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 ?

Il n'est pas possible de recréer le disque dur, je sais comment le faire si j'avais seulement cloné la partition individuelle en elle-même. J'espère que c'est toujours possible avec l'image actuelle.

1voto

losetup -P automatisation

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

$ 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

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

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"
)

configuration du module de boucle max_part

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

loop est un module noyau, intégré dans le 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 combien de partitions les périphériques loop peuvent générer.

C'est 0 par défaut sur Ubuntu 14.04, c'est pourquoi aucun fractionnement automatique ne se produit.

Pour le changer, vous pouvez soit ajouter:

options loop max_part=31

dans un fichier dans /etc/modprobe, ou:

GRUB_CMDLINE_LINUX="loop.max_part=31"

dans /etc/default/grub et ensuite sudo update-grub.

Comment définir un paramètre de module est également expliqué à: https://askubuntu.com/questions/51226/how-to-add-kernel-module-parameters

Après un redémarrage, lorsque 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 êtes prêt à redémarrer.

Voir aussi

0voto

Kasun Points 174

Si vous disposez d'un système de fichiers en mode utilisateur tel que fuse, alors dans des environnements de bureau tels que Gnome et avez installé un outil tel que gnome-disk-image-mounter, vous pouvez l'ouvrir en faisant un clic droit sans même avoir les droits root.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X