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


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. Donc je suppose que je devrais trouver un moyen de faire apparaître l'image disque dans le /dev/ dossier...

Est-ce que quelqu'un sait comment faire ça?

PS: je peux toujours dd sauvegarder l'image sur le disque d'origine, mais ce serait très gênant (j'ai mis à jour le système d'exploitation et j'aimerais le garder tel quel)


98
2017-10-19 16:36


origine




Réponses:


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)

Calculer le décalage depuis le début de l'image jusqu'au début de la partition

Taille du secteur * Début = (dans le cas où) 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, etc.

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

Démonter

sudo umount /mnt
sudo losetup -d /dev/loop0

125
2017-10-19 19:55



Merci beaucoup! Travaillé comme un charme! Vous avez fait ma journée (et sauvé un Ocelot innocent d'être brutalement supprimé; P) - Nicola Feltrin
Au moins sur bash, le shell peut même faire le calcul pour vous: sudo losetup -o $((56*512)) /dev/loop0 sda.img - Enno Gröper
Ce n'est pas seulement utile, c'est absolument génial. - andho
Et s'il y a un .img1 et un .img2? "win8.raw1 * 2048 718847 358400 7" et "win8.raw2 718848 52426751 25853952 7" - Enkouyami
Encore plus simple: mount -o loop,offset=$((56 * 512)) sda.img /mnt. La source: madduck.net/blog/… - ostrokach


Mise à jour pour Ubuntu 16.04: Avec le nouveau losetup c'est maintenant plus facile:

sudo losetup -Pf disk_image.raw

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


Une solution simple utilise kpartx: il déterminera la disposition de la partition et mappera chacun à un périphérique de 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 en dessous de /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:

enter image description here

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

88
2017-10-02 12:12



Excellente réponse, rapide et facile, éviter la multiplication est bien - Elder Geek
sudo apt-get install kpartx - avoir accès à kpartx. le kpartx Le lien au début du message est un «piège» à mon avis. Les liens qui impliquent l'installation de logiciels sont des no-no. - Hannu
@Hannu, les liens qui s’intègrent avec Software Center sont un pratique courante sur askubuntu, bien que dans ce cas particulier, l'icône typique puisse être ajoutée et l'URL doit être mise à jour. - Joni
losetup -Pf avait été précédemment mentionné par askubuntu.com/a/496576/52975 Je vous recommande de lier au moins cette réponse. - Ciro Santilli 新疆改造中心 六四事件 法轮功


modifier : marche avec util-linux> = 2.21. Au moment de l'écriture, Ubuntu est livré avec la version 2.20 seulement

De homme losetup :

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

Alors lancez-vous

$ 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 en sortie standard. Si vous utilisez /dev/loop0 appareil va créer au moins /dev/loop0p1 que vous pourrez monter comme d'habitude.


22
2017-07-11 17:29



Où puis-je trouver cette version de losetup ? Celui que j'ai dans Ubuntu 14.04 a une page de manuel de juillet 2003 (util-linux) et aucune option `-P` (ou autre) pour analyser les partitions. - Hannu
Désolé, j'ai fait une erreur, j'ai utilisé cette option sur Arch Linux qui vient avec une version plus récente du paquet util-linux. Il semble que Ubuntu soit malheureusement bloqué sur la version 2.20.1 qui a été lancée en janvier 2012! le --partscanl'option a été introduite dans util-linux 2.21 - Ludovic Ronsin
Bien, gnome-disks a une option pour monter une image disque et ses partitions. (<- c'est pour l'installation et l'utilisation de bash / Terminal, Disksdans le tiret le trouve aussi). - Hannu
Cela devrait être la réponse acceptée ... - matthid
@matthid Est-ce même possible changer une réponse acceptée? C'est bon (et la réponse kpartx dépend en fait de cette version de losetup), mais il est presque trois ans plus récent que la réponse acceptée - ce qui était la façon de le faire à l'époque. - Auspex


Essayer gnome-disk-image-mounter:

gnome-disk-image-mounter sda.img

Non sudo Champs obligatoires. Il sera monté à /media/your_user_name/partition_name, tout comme les clés USB.


7
2017-07-23 22:02



Travaillait bien le 16.04. Je viens d'installer un nouveau 18.04 et les outils demandent un mot de passe sudo pour accéder au périphérique virtuel / dev / loopXX :( - Laurent


losetup -P automatisation

losetup -P est la meilleure méthode à partir de Ubuntu 16.04 comme mentionné à https://askubuntu.com/a/496576/52975 , voici les fonctions à automatiser si 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

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

dit combien de partitions loop les appareils 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, on peut soit ajouter:

options loop max_part=31

à un fichier dans /etc/modprobe, ou:

GRUB_CMDLINE_LINUX="loop.max_part=31"

à /etc/default/grub et alors sudo update-grub.

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

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

sudo losetup -f --show my.img

il monte l'image à un /dev/loopX appareil, et monte automatiquement les partitions à /dev/loopXpY dispositifs.

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

Voir également


6
2017-09-12 11:04





Utilisez losetup pour joindre l'image du disque entier.

# sudo losetup /dev/loop2 sda.img

Ensuite, utilisez 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

4
2017-10-10 12:45



C'est un truc marrant :) - Johan Boulé


La manière la plus simple, à mon avis, utilise 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 de boucle après le montage de la partition montée.

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

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

Vous pouvez également 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, simplement umount il:

umount /media/sda_image

2
2017-11-11 10:13