Monter une partition unique à partir de l'image du disque entier (périphérique)

96

J'ai fait une image de mon disque entier avec

dd if=/dev/sda of=/media/external_media/sda.img

Maintenant, le problème est que je voudrais monter un système de fichiers ext4 qui était sur ce disque mais

mount -t ext4 -o loop /media/external_media/sda.img /media/sda_image

donne évidemment une erreur de superbloc puisque l’image contient le disque entier (MBR, autres partitions) et pas seulement la partition dont j’ai besoin. Je suppose donc que je devrais trouver un moyen de faire apparaître l'image disque dans le dossier /dev/ ...

Est-ce que quelqu'un sait comment faire cela?

PS: Je peux toujours co% afficher% l'image sur le disque d'origine, mais cela serait très gênant (j'ai mis à jour le système d'exploitation et je souhaite le conserver tel quel)

    
posée Nicola Feltrin 19.10.2011 - 18:36
la source

7 réponses

123

Obtenir la disposition de la partition de l'image

$ sudo fdisk -lu sda.img
...
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...
  Device Boot      Start         End      Blocks   Id  System
sda.img1   *          56     6400000     3199972+   c  W95 FAT32 (LBA)

Calculez le décalage entre le début de l’image et le début de la partition

Taille du secteur * Démarrer = (dans le cas) 512 * 56 = 28672

Montez-le sur / dev / loop0 en utilisant le décalage

sudo losetup -o 28672 /dev/loop0 sda.img

Maintenant, la partition réside sur / dev / loop0 . Vous pouvez fsck le monter, le monter, etc.

sudo fsck -fv /dev/loop0
sudo mount /dev/loop0 /mnt

Démonter

sudo umount /mnt
sudo losetup -d /dev/loop0
    
réponse donnée arrange 19.10.2011 - 21:55
la source
87

Mise à jour pour Ubuntu 16.04: Avec le nouveau losetup , c'est désormais plus facile:

sudo losetup -Pf disk_image.raw

Voir le reste de la réponse pour les anciennes versions d’Ubuntu.

Une solution simple consiste à utiliser kpartx : il déterminera la structure de la partition et mappera chacun d’eux sur un bloc. Après cela, il ne vous reste plus qu'à monter celui que vous voulez.

Ouvrez Terminal, localisez l'image disque et entrez cette commande:

$ sudo kpartx -av disk_image.raw 
add map loop0p1 (252:2): 0 3082240 linear /dev/loop0 2048
add map loop0p2 (252:3): 0 17887232 linear /dev/loop0 3084288

Cela a créé loop0p1 et loop0p2 sous /dev/mapper . De la sortie, vous pouvez voir les tailles des partitions qui vous aident à les identifier. Vous pouvez monter celui que vous voulez avec:

$ sudo mount /dev/mapper/loop0p2 /mnt

Sinon, le périphérique bloc est détecté par Nautilus et vous pouvez le monter depuis la barre latérale:

Lorsque vous avez terminé, démontez ce que vous avez monté et supprimez le mappage de périphérique:

$ sudo umount /mnt
$ sudo kpartx -d disk_image.raw
    
réponse donnée Joni 02.10.2013 - 14:12
la source
21

Modifier : fonctionne avec util-linux & gt; = 2.21 . Au moment de l'écriture, Ubuntu est livré avec la version 2.20 uniquement

De man losetup :

       -P, --partscan
          force kernel to scan partition table on newly created loop device

Alors lancez simplement

$ sudo losetup -f --show -P /path/to/image.img

créer des nœuds de périphérique pour chaque partition de votre image disque sur le premier périphérique de boucle inutilisé et l’imprimer sur stdout. Si vous utilisez le périphérique /dev/loop0 , cela créera au moins /dev/loop0p1 que vous pourrez monter normalement.

    
réponse donnée Ludovic Ronsin 11.07.2014 - 19:29
la source
6

Essayez gnome-disk-image-mounter :

gnome-disk-image-mounter sda.img

Aucun sudo requis. Il sera monté à /media/your_user_name/partition_name , tout comme les clés USB.

    
réponse donnée Mihai Capotă 24.07.2015 - 00:02
la source
5

losetup -P automation

losetup -P est la meilleure méthode à partir d’Ubuntu 16.04, comme indiqué sur lien , voici des fonctions à automatiser si nécessaire . 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

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

Source:

los() (
  img=""
  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"
  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

C'est une méthode décente avant 16.04.

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 loop périphériques peuvent générer.

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

Pour le changer, nous pouvons soit ajouter:

options loop max_part=31

vers un fichier dans /etc/modprobe ou:

GRUB_CMDLINE_LINUX="loop.max_part=31"

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

Comment définir un paramètre de module est également couvert à: Comment ajouter des paramètres de module de noyau ?

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

sudo losetup -f --show my.img

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

C'est donc la méthode la plus pratique si vous êtes prêt à redémarrer.

Voir aussi

la source
4

Utilisez losetup pour attacher l’image du disque entier.

# sudo losetup /dev/loop2 sda.img

Utilisez ensuite mdadm pour créer un périphérique md et les périphériques de bloc seront créés pour toutes les partitions.

# sudo mdadm --build --level=0 --force --raid-devices=1 /dev/md2 /dev/loop2
mdadm: array /dev/md2 built and started.

Maintenant, vous devriez voir les périphériques de partition.

nile-172-b0fef38-76:/mnt/sdb1 # ls -l /dev/md2*
brw-rw---- 1 root disk   9, 2 Oct 10 12:37 /dev/md2
brw-rw---- 1 root disk 259, 0 Oct 10 12:37 /dev/md2p1
    
réponse donnée Mike Bappe 10.10.2014 - 14:45
la source
2

La manière la plus simple, à mon avis, d’utiliser mount -o loop,offset=... comme mentionné dans cette réponse sur StackOverflow . L'idée est la suivante:

fdisk -l $IMAGE
# calculate the offset in bytes
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPOINT

La méthode est la meilleure car elle ne nécessite pas la suppression du périphérique en boucle après le montage de la partition montée.

Pour simplifier davantage la tâche (ce qui est nécessaire si vous le faites souvent), vous pouvez utiliser mon script mountimg pour tout faire pour vous. Il suffit de l'obtenir de lien et utiliser comme ceci:

mountimg /media/external_media/sda.img 2 /media/sda_image

Vous pouvez aussi spécifier le type de système de fichiers et toute autre option de montage supplémentaire si vous aimez:

mountimg /media/external_media/sda.img 2 /media/sda_image -t vfat -o codepage=866,iocharset=utf-8

Lorsque vous avez terminé avec la partition, il vous suffit de umount it:

umount /media/sda_image
    
réponse donnée Alexander Amelkin 11.11.2016 - 11:13
la source

Lire d'autres questions sur les étiquettes