¿Cómo puedo montar una partición a partir de la imagen creada por dd de un dispositivo de bloque (por ejemplo, HDD) en Linux?

34

Tengo una imagen de todo el disco creado usando dd . La estructura del disco sigue:

kent@cow:~$ sudo fdisk -l

Disk /dev/sda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b8508

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           5       90872   729929303+  83  Linux
/dev/sda2           90873       91201     2642692+   5  Extended
/dev/sda5           90873       91201     2642661   82  Linux swap / Solaris

La imagen fue creada usando:

dd if=/dev/sda of=image750.img

¿Cómo podría, si es posible, montar / dev / sda1 desde la imagen para poder leer el contenido?

No es una opción para clonar el HDD nuevamente, sé cómo hacerlo si solo hubiera clonado la partición por sí sola. Espero que aún sea posible con la imagen actual.

Eliminado
fuente
stackoverflow.com/questions/1419489/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

48

Hoy en día, hay una mejor manera, ya no es necesario usar compensaciones o kpartx:

losetup --partscan --find --show disk.img

mount /dev/loop0p1 /mnt

para liberar loop0, use después de umount:

losetup -d /dev/loop0
bhelm
fuente
8
En mi instalación de Ubuntu 14.04, losetup no proporciona una opción --partscan.
Cortador
1
@Cutter se agregó en util-linux 2.21, Ubuntu 16.04. :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Habiendo usado kpartxprimero, lo que monta las particiones /dev/mapper/loop3p1, solo quiero señalar que losetupcrea los dispositivos como /dev/loop0p1. La respuesta señala eso, pero lo leí probablemente 10 veces. : /
Randy Syring
13

Me encontré con este problema hoy y quería actualizar las respuestas solo como un recordatorio para mí. En lugar de calcular el desplazamiento por su cuenta, puede usar una herramienta que le proporciona dispositivos montables desde una imagen dd: kpartx

http://robert.penz.name/73/kpartx-a-tool-for-mounting-partitions-within-an-image-file/

http://linux.die.net/man/8/kpartx

En el caso dado, necesitaría algo como

sudo kpartx -a image750.img
sudo mount /dev/mapper/loop1p1 /mount/point -o loop,ro

donde loop1p1 representa la primera partición, loop1p2 para la segunda, etc.

GrGr
fuente
6

Tienes la primera parte: fdisk -l para encontrar el desplazamiento inicial. Tome ese número, multiplique por 512, y obtendrá la opción de desplazamiento para montar. Entonces, para sda1 en su caso, 5 * 512 = 2560. Luego ejecute el montaje:

mount -o loop,offset=2560 -t auto /path/to/image.dd /mount/point
Baumgart
fuente
4

El montaje en bucle es solo una parte de la respuesta.

Mira http://wiki.edseek.com/guide:mount_loopback#accessing_specific_partitions_in_the_image para obtener ayuda sobre cómo especificar la partición. Creo que mount -o loop, offset = 32256 /path/to/image750.img / mnt funcionará para usted. pero realmente deberías leer el tutorial mencionado.

Richard June
fuente
el desplazamiento se ve mal; que corresponde a un inicio de partición de 63 (<i> 63 * 512 = 32256 </i>). La compensación en la respuesta de Baumgart parece más correcta para esta situación. el enlace es una buena referencia, pero sería una mejor respuesta si se tomara el tiempo para resumir los pasos o comandos necesarios para este procedimiento. ¡Gracias!
quack quijote
1

losetup -P automatización

Método mencionado por https://superuser.com/a/684707/128124 (agregado en util-linux v2.21, agregado Ubuntu 16.04), aquí hay funciones para automatizarlo aún 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"
)

módulo de bucle max_part config

Método decente antes de util-linux v2.21.

loop es un módulo del núcleo, integrado en el núcleo en Ubuntu 14.04.

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

cat /sys/module/loop/parameters/max_part

dice cuántas particiones looppueden generar los dispositivos.

Es 0por defecto en Ubuntu 14.04, razón por la cual no ocurre la 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/gruby luego sudo update-grub.

Cómo configurar un parámetro de módulo también se cubre en: https://askubuntu.com/questions/51226/how-to-add-kernel-module-parameters

Después de reiniciar, cuando lo haces:

sudo losetup -f --show my.img

monta la imagen en un /dev/loopXdispositivo y monta automáticamente las particiones en los /dev/loopXpYdispositivos.

Este es el método más conveniente si está dispuesto a reiniciar.

Ver también

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
0

Si tiene un sistema de archivos en modo Usuario como fusible, entonces en entornos de escritorio le gusta Gnome y ha instalado una herramienta como gnome-disk-image-mounter, luego sin siquiera hacer clic con el botón derecho y abrir con él.

Kasun
fuente
0

Creo que montar en bucle es la respuesta:

sudo mkdir /path/to/dir/
mount -o loop example.img /path/to/dir/

Lo anterior debería montarlo bajo ese directorio.

Esto debería desmontarlo:

umount /path/to/dir
Journeyman Geek
fuente