web-dev-qa-db-fra.com

Comment monter une partition à partir d'un fichier image contenant plusieurs partitions sous Linux?

Le fichier image a une table de partition et il contient plusieurs partitions.

les périphériques de bouclage peuvent être une possibilité.

Sujets associés:

42
Atlas1j

Supposons que $ IMAGE est défini sur le chemin d'accès à votre fichier image. Vous pouvez écrire un petit script en utilisant

fdisk -u sectors -l $IMAGE

pour obtenir une liste des partitions à l'intérieur de l'image. Et puis utilisez une séquence de

mount -o ro,loop,offset=$OFFSET -t auto $IMAGE /media/$DEST

Où l'offset est calculé signifie les informations de fdisk (secteur de départ * taille d'un secteur en octets) et $ DEST un nom unique pour chacune des partitions.

Ce n'est pas directement la solution mais j'espère une assez bonne indication sur la façon de la réaliser. Si vous faites le travail une fois, vous avez un petit bon début pour une boîte à outils médico-légale!

26
jdehaan

Vous pourriez le faire comme ça, sans trop de tracas:

# kpartx -v -a logging-test.img 
add map loop0p1 (251:0): 0 497664 linear /dev/loop0 2048
add map loop0p2 (251:1): 0 66605058 linear /dev/loop0 501758
add map loop0p5 (251:2): 0 66605056 251:1 2
# ls /dev/mapper/
control  loop0p1  loop0p2  loop0p5
# mount /dev/mapper/loop0p1 /mnt/test
# mount  | grep test
/dev/mapper/loop0p1 on /mnt/test type ext2 (rw)
#

Et pour supprimer le périphérique de boucle après avoir terminé:

# kpartx -v -d logging-test.img
del devmap : loop0p2
del devmap : loop0p1
loop deleted : /dev/loop0
#
75
Andrew Y

Si vous avez util-linux v2.21 ou supérieur, vous pouvez maintenant le faire avec losetup. Utilisez le -P (--partscan) option pour lire la table de partition et créer des nœuds de périphérique pour chaque partition:

# losetup --show -f -P test.img
/dev/loop0

# ls /dev/loop0*
/dev/loop0
/dev/loop0p1
/dev/loop0p2

# mount /dev/loop0p1 /mnt/tmp
52
Andrew Oakley

losetup -P automatisation

losetup -P est la meilleure méthode à partir d'Ubuntu 16.04 comme mentionné sur https://stackoverflow.com/a/15200862/895245 , voici des fonctions à automatiser si vous le souhaitez. 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"
)

Ok, cette question est vieille, mais juste pour le sako de l'exhaustivité: Ceci ici me semble beaucoup plus facile.

Citation:

rmmod loop
modprobe loop max_part=63
losetup -f /path/to/your/disk/image.raw
mount /dev/loop0p1 /mnt/path
3
Pfiver

Un peu plus d'automatisation par rapport aux réponses précédentes qui étaient super.

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 auprès de https://github.com/AlexanderAmelkin/mountimg et d'utiliser comme ceci:

mountimg disk_image.img $PARTNO /mnt/mountpoint

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

mountimg disk_image.img $PARTNO /mnt/mountpoint -t vfat -o codepage=866,iocharset=utf-8

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

umount /mnt/mountpoint
0
Alexander Amelkin