Comment monter une image disque multi-partition sous Linux?

23

J'ai téléchargé une image de carte SD brute qui a deux partitions.

Cela a provoqué des erreurs de système de fichiers lorsque j'ai essayé de le copier directement sur une carte SD. Je ne sais pas si la carte est défectueuse ou l'image.

Existe-t-il un moyen d'examiner cette image sans l'écrire sur une carte physique? Comme essayer de monter les partitions séparément ou vérifier les tables?

Atilla Filiz
la source

Réponses:

20

Vous pouvez utiliser kpartx ou partx pour créer des périphériques de boucle pour les partitions sur l'image, puis les monter. Donc soit:

$ sudo kpartx -v -a file.iso
add map loop0p1 (253:17): 0 8382464 linear 7:1 2048
$ mount /dev/mapper/loop0p1 ./mnt_point
...  do something with the partition  ...
$ umount ./mnt_point
$ kpartx -d -v file.iso
del devmap : loop0p1
loop deleted : /dev/loop0

ou:

$ sudo partx -a -v file.iso
partition: none, disk: file.iso, lower: 0, upper: 0
Trying to use '/dev/loop0' for the loop device
/dev/loop0: partition table type 'dos' detected
range recount: max partno=1, lower=0, upper=0
/dev/loop0: partition #1 added
$ mount /dev/loop0p1 ./mnt_point
...  do something with the partition  ...
$ umount /dev/loop0p1 ./mnt_point
$ sudo partx -d -v /dev/loop0
partition: none, disk: /dev/loop0, lower: 0, upper: 0
/dev/loop0: partition #1 removed

Voir aussi Comment puis-je monter une image disque?

Catskul
la source
Merci @ frank-breitling. La modification a été rejetée par les critiques avant que j'aie pu y accéder.
Catskul
14

losetup -Pf dans util-linux> = 2.21 (Ubuntu 16.04)

sudo losetup -Pf disk.img
sudo mkdir /mnt/loop0p1
sudo mount /dev/loop0p1 /mnt/loop0p1

Voir la page de manuel losetup (8) et également /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/673257#673257

losetup -P automatisation

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"
)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source
1

Tu pourrais essayer:

mount -t type -o loop ./image / mnt

où "type" = type fs et "image" est le nom de votre fichier téléchargé

Tog
la source
3
En y réfléchissant, cela peut ne pas fonctionner avec une image contenant plusieurs partitions.
Tog
2
vous devrez spécifier l'offset de la partition unique à monter avec quelque chose comme "mount -o loop, ro, offset = XXXXXXXX imagefile / mnt"
Mr Shunz
1
Losetup ne fonctionnerait-il pas pour spécifier un décalage?
Tog
vous avez raison ... avec losetup, vous pouvez définir un décalage sur la partition pour créer un périphérique de bouclage qui peut être simplement monté avec mount / dev / loopX / mnt
M. Shunz
1

Cette réponse sur ServerFault suggère:

utiliser losetup pour obtenir une boucle / dev /? périphérique, puis utilisez kpartx dessus pour créer des mappages de dev pour les partitions dans le fichier image.

M. Shunz
la source