¿Cómo puedo montar una imagen de disco?

26

Tengo una imagen de disco myimage.diskque contiene la tabla de particiones y una partición primaria (es decir, un sistema de archivos FAT32). Piense eso como una imagen de lápiz USB.

Quiero montar la partición primaria en un directorio local. Sé cómo montar una imagen de partición usando las utilidades de bucle, pero aquí tengo una imagen de disco. Supongo que tengo que montar la imagen "omitiendo" la tabla de particiones, pero ¿cómo puedo hacer eso?

Emiliano
fuente
77
Consulte también superuser.com/questions/117136/… Es posible que desee usar simplemente losetup --partscan --find --show disk.imgseguido demount /dev/loop0p1 /mnt/disk
Flow

Respuestas:

44

La herramienta kpartx hace esto más fácil. Crea dispositivos de bucle en / dev / mapper para cada partición en su imagen. Luego puede montar el dispositivo de bucle que corresponda con su partición deseada sin tener que calcular el desplazamiento manualmente.

Por ejemplo, para montar la primera partición de la imagen del disco:

kpartx -a -v myimage.disk
mount /dev/mapper/loop0p1 /mnt/myimage

Cuando haya terminado con la imagen, elimine los dispositivos de bucle:

umount /mnt/myimage
kpartx -d -v myimage.disk

Alternativamente, si tiene un kernel reciente y pasa loop.max_part = 63 en el arranque (si el bucle está integrado) o en modprobe (si el bucle es un módulo), puede hacerlo de esta manera:

losetup /dev/loop0 myimage.disk
partprobe /dev/loop0             # Re-read partition table if /dev/loop0 was used with a different image before
mount /dev/loop0p1 /mnt/myimage

Cuando hayas terminado con el bucle:

losetup -d /dev/loop0
scott.squires
fuente
1
No necesita lo -o loopanterior, /dev/mapper/loop0p1ya es un dispositivo de bloque (un dispositivo mapeador encima de un dispositivo de bucle, no desea otra capa de dispositivo de bucle encima de eso).
sch
2
Si no obtiene dispositivos de partición ( /dev/loop0p1etc.) después de ejecutar losetup, ejecute partprobe /dev/loop0.
Vladimir Panteleev
kpartxparece estar instalado por defecto en Linux Mint 18.
unfa
4

Encontró esto:

http://www.andremiller.net/content/mounting-hard-disk-image-incuding-partitions-using-linux

que parece exactamente lo que estaba buscando.

Aquí está la parte clave:

mount -o loop,ro,offset=32256 hda.img /mnt/rabbit

donde el valor de desplazamiento está en bytes. La forma sugerida de obtener el desplazamiento es apuntar parteda la imagen, luego a la unidad B para los bytes y tomar el valor inicial de la salida de impresión. Como alternativa, suponiendo que tenga espacio en el disco, haga lo obvio: una vez que tenga el desplazamiento y el tamaño, simplemente use ddpara extraer cada partición en un archivo separado.

Emiliano
fuente
1
Para escribir una respuesta realmente excelente, ¿podría explicar las partes más importantes aquí? Tener un enlace es genial, pero tener la información aquí sería lo mejor.
slhck
1
Aquí está la parte clave: mount -o loop,ro,offset=32256 hda.img /mnt/rabbitdonde el valor de offsetestá en bytes. La forma sugerida de obtener el desplazamiento es apuntar a la imagen, luego unit Ba los bytes y tomar el startvalor de la printsalida. Como alternativa, suponiendo que tenga espacio en el disco, haga lo obvio: una vez que tenga el desplazamiento y el tamaño, simplemente use ddpara extraer cada partición en un archivo separado.
un CVn
Sí, perdón por ser demasiado bajo. Como Michael señaló, la parte relevante es, por supuesto, la mountlínea que contiene la offsetopción.
Emiliano
2
local_image_file=/var/tmp/image.img
first_byte=$(parted -m ${local_image_file} unit B print | grep Linux | cut --fields 2 --delimiter ':' | sed 's/.$//')
loop_file=/var/tmp/loop
mkdir -p ${loop_file}
mount -o loop,ro,offset=${first_byte} ${local_image_file} ${loop_file}
arrojar
fuente
1
Si bien esto puede responder la pregunta, sería una mejor respuesta si pudiera proporcionar alguna explicación de por qué lo hace.
DavidPostill
2

Hoy en día puede minimizar su trabajo mediante el uso udisks. Solución de ArchWiki: udisks - Mount loop devices

Para montar fácilmente imágenes ISO, use el siguiente comando:

udisksctl loop-setup -r -f image.iso

Esto creará un dispositivo de bucle y mostrará la imagen ISO lista para montar. Una vez desmontado, el dispositivo de bucle será terminado por udev.

-r allí para la opción de solo lectura.

efemerr
fuente
Esto es asombroso, gracias por la información. Es una locura que sea la primera vez que encuentro una referencia udisksctl.
Oxwivi