¿Cómo montar una imagen de disco de múltiples particiones en Linux?

23

Descargué una imagen de tarjeta SD sin procesar que tiene dos particiones.

Causó algunos errores del sistema de archivos cuando intenté dd directamente en una tarjeta SD. No estoy seguro si la tarjeta es defectuosa o la imagen.

¿Hay alguna manera de examinar esta imagen sin escribirla en una tarjeta física? ¿Te gusta intentar montar las particiones por separado o verificar las tablas?

Atilla Filiz
fuente

Respuestas:

20

Puede usar kpartx o partx para crear dispositivos de bucle para las particiones de la imagen y luego montarlos. Entonces:

$ 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

o:

$ 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

Consulte también ¿Cómo puedo montar una imagen de disco?

Catskul
fuente
Gracias @ frank-breitling. Editar fue rechazado por los revisores antes de que tuviera oportunidad de hacerlo.
Catskul
14

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

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

Consulte la página de comando man losetup (8) y también /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/673257#673257

losetup -P automatización

Aquí hay funciones para automatizar si más. Uso:

$ 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

Fuente:

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 新疆 改造 中心 法轮功 六四 事件
fuente
1

Tu podrías intentar:

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

donde "type" = fs type e "image" es el nombre del archivo descargado

Ataviarse
fuente
3
Pensando en ello, eso puede no funcionar con una imagen que contiene múltiples particiones.
Tog
2
tendrá que especificar el desplazamiento de la partición única para montar con algo como "mount -o loop, ro, offset = XXXXXXXX imagefile / mnt"
Sr. Shunz
1
¿No perdería el trabajo para especificar un desplazamiento?
Tog
tienes razón ... con losetup puedes configurar un desplazamiento en la partición para crear un dispositivo de bucle invertido que simplemente se puede montar con mount / dev / loopX / mnt
Mr Shunz
1

Esta respuesta en ServerFault sugiere:

usa losetup para obtener un / dev / loop? dispositivo, luego use kpartx en él para crear asignaciones de desarrollo para las particiones en el archivo de imagen.

Señor shunz
fuente