Montar partición única de la imagen de todo el disco (dispositivo)

97

Hice una imagen de todo mi disco con

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

Ahora el problema es que me gustaría montar un sistema de archivos ext4 que estaba en ese disco, pero

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

obviamente da un error de superbloque ya que la imagen contiene todo el disco (MBR, otras particiones) no solo la partición que necesito. Así que supongo que debería encontrar una manera de hacer que la imagen del disco aparezca en la carpeta /dev/ ...

¿Alguien sabe cómo hacer eso?

PD: siempre puedo dd devolver la imagen al disco original, pero eso sería muy inconveniente (actualicé el sistema operativo y me gustaría mantenerlo como está)

    
pregunta Nicola Feltrin 19.10.2011 - 18:36

7 respuestas

124

Obtener el diseño de la partición de la imagen

$ 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)

Calcula el desplazamiento desde el inicio de la imagen hasta el comienzo de la partición

Tamaño del sector * Inicio = (en el caso) 512 * 56 = 28672

Móntelo en / dev / loop0 con el desplazamiento

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

Ahora la partición reside en / dev / loop0 . Puede fsck , montarlo, etc.

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

Desmontar

sudo umount /mnt
sudo losetup -d /dev/loop0
    
respondido por el arrange 19.10.2011 - 21:55
87

Actualización para Ubuntu 16.04: con el nuevo losetup , ahora es más fácil:

sudo losetup -Pf disk_image.raw

Vea el resto de la respuesta para versiones anteriores de Ubuntu.

Una solución fácil es usar kpartx : descubrirá el diseño de la partición y asignará cada uno a un bloque de dispositivos. Después de eso, todo lo que tienes que hacer es montar el que quieras.

Abre Terminal, busca la imagen del disco e ingresa este comando:

$ 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

Esto creó loop0p1 y loop0p2 debajo de /dev/mapper . Desde la salida, puede ver los tamaños de las particiones que le ayudan a identificarlos. Puede montar el que desee con:

$ sudo mount /dev/mapper/loop0p2 /mnt

Alternativamente, el dispositivo de bloque es detectado por Nautilus y puedes montarlo desde la barra lateral:

Cuando haya terminado, desmonte lo que montó y elimine la asignación del dispositivo:

$ sudo umount /mnt
$ sudo kpartx -d disk_image.raw
    
respondido por el Joni 02.10.2013 - 14:12
22

Editar : funciona con util-linux & gt; = 2.21 . En el momento de escribir, ubuntu solo se envía con la versión 2.20

De man losetup :

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

Solo ejecuta

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

para crear nodos de dispositivo para cada partición de su imagen de disco en el primer dispositivo de bucle no utilizado e imprimirlo en stdout. Si usa /dev/loop0 device, creará al menos /dev/loop0p1 que podrá montar como de costumbre.

    
respondido por el Ludovic Ronsin 11.07.2014 - 19:29
6

losetup -P automation

losetup -P es el mejor método que se inicia en Ubuntu 16.04 como se menciona en enlace , aquí hay funciones para automatizar si . 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=""
  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"
)

módulo de bucle max_part config

Este es un método decente antes de 16.04.

loop es un módulo kernel, integrado en el kernel en Ubuntu 14.04.

Si lo configura correctamente, Linux divide automáticamente los dispositivos por usted.

cat /sys/module/loop/parameters/max_part

indica cuántas particiones pueden generar los dispositivos loop .

Es 0 por defecto en Ubuntu 14.04 por lo que no se produce división automática.

Para cambiarlo, podemos agregar:

options loop max_part=31

a un archivo en /etc/modprobe , o:

GRUB_CMDLINE_LINUX="loop.max_part=31"

a /etc/default/grub y luego a sudo update-grub .

Cómo configurar un parámetro de módulo también se trata en: Cómo agregar los parámetros del módulo kernel ?

Después de reiniciar, cuando lo haga:

sudo losetup -f --show my.img

monta la imagen en un dispositivo /dev/loopX y monta automáticamente las particiones en /dev/loopXpY devices.

Así que este es el método más conveniente si está dispuesto a reiniciar.

Ver también

6

Pruebe gnome-disk-image-mounter :

gnome-disk-image-mounter sda.img

No se requiere sudo . Se montará en /media/your_user_name/partition_name , al igual que las unidades USB.

    
respondido por el Mihai Capotă 24.07.2015 - 00:02
4

Usa losetup para adjuntar toda la imagen del disco.

# sudo losetup /dev/loop2 sda.img

Luego use mdadm para crear un dispositivo md y se crearán dispositivos de bloqueo para todas las particiones.

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

Ahora debería ver los dispositivos de partición.

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
    
respondido por el Mike Bappe 10.10.2014 - 14:45
2

La forma más simple, en mi opinión, es usar mount -o loop,offset=... como se menciona en esta respuesta en StackOverflow . La idea es la siguiente:

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

El método es mejor porque no requiere eliminar el dispositivo de bucle después de desmontar la partición montada.

Para simplificar aún más la tarea (que es necesaria si lo haces a menudo), puedes usar mi script mountimg para hacer todo por ti. Solo obténgala de enlace y utilízalo así:

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

También puede especificar el tipo de sistema de archivos y cualquier otra opción de montaje adicional si lo desea:

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

Cuando haya terminado con la partición, simplemente umount it:

umount /media/sda_image
    
respondido por el Alexander Amelkin 11.11.2016 - 11:13

Lea otras preguntas en las etiquetas