Hoy vamos a ver como montar una imagen raw creada con dd y así acceder a los datos que hay dentro.
Casi al final del artículo Jugando con la Raspberry Pi – Configuración Inicial hablé de como crear una copia de seguridad con dd. Este tipo de imágenes son como un disco, con su sector de arranque, una o varias particiones, uno o varios sistemas de archivos y por tanto no se pueden montar como si fueran una ISO.
Aunque no podemos montar el disco entero, sí que podemos montar las particiones por separado y así acceder a su contenido.
Para este artículo voy a usar de ejemplo una imagen que tengo hecha de una tarjeta SD con Raspbian. Manos a la obra.
Ver la estructura de la imagen (las particiones)
Lo primero es ver que estructura tiene nuestra imagen. Para esto vamos a usar fdisk:
sudo fdisk -l imagen
La salida de este comando será algo como esto:
Disk rbpi_lite_config.img: 7.3 GiB, 7780433920 bytes, 15196160 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xacde91c7 Device Boot Start End Sectors Size Id Type rbpi_lite_config.img1 8192 93813 85622 41.8M c W95 FAT32 (LBA) rbpi_lite_config.img2 94208 15196159 15101952 7.2G 83 Linux
Como podemos ver en la primera línea es una imagen de una SD de 8GB. La segunda y tercera líneas nos dicen que cada sector tiene un tamaño de 512 bytes. También vemos al final que tiene dos particiones , una en FAT32 y otra Linux (en este caso ext4).
Como fdisk muestra sólo el tipo de partición pero no el sistema de archivos que tiene y necesitamos saberlo podemos usar para eso cfdisk.
sudo cfdisk imagen

Podemos ver abajo en Filesystem que el sistema de archivos es ext4.
Ahora necesitamos saber donde empieza la partición que queremos montar (en bytes). Si nos fijamos en la columna Start que nos dan tanto fdisk como cfdisk la segunda partición (la de ext4) que es la que quiero montar empieza en el sector 94208 y además sabemos que cada sector tiene 512 bytes.
El comienzo de la partición en bytes será 94208 * 512, esto es lo que se conoce como offset.
Un truco para no tener que andar multiplicando es dejar que la shell haga la multiplicación necesaria para calcular el offset escribiendo $(( 94208 * 512 )).
Montar la partición deseada
Una vez que tenemos todo lo necesario, vamos a montar una imagen dd (de forma general) escribiendo:
sudo mount -t filesystem -o loop,ro,offset=$((start*512)) imagen punto_montaje
- -t indicamos el sistema de archivos en mi caso ext4
- -o indica las opciones para mount
- loop es necesario para convertir una imagen estática en una imagen dinámica.
- ro es en modo lectura (read-only)
- offset indica donde empieza la partición que vamos a montar (en bytes)
- start es el dato de correspondiente a la columna start que nos da fdisk o cfdisk
En mi caso, la linea para montar la segunda partición de la imagen de ejemplo en /mnt sería:
sudo mount -t ext4 -o loop,ro,offset=$((94208*512)) rbpi_lite_config.img /mnt
Decir que como vamos a montar un sistema de archivos al uso se mantienen los permisos y el propietario de los ficheros y carpetas, así que es posible que para acceder a algunas carpetas tengamos que hacerlo como root.
Una vez que hemos terminado con la imagen la desmontamos como siempre con umount:
sudo umount punto_montaje
Actualización 09/04/2019:
Otra forma de hacerlo
Según me indicó el usuario Pablo Moreira (@pablomoreira76) en Twitter hay una aplicación llamada kpartx que sirve para montar imágenes y discos duros de máquinas virtuales. Decidí probralor y la verdad va muy bien.
Para usar esta aplicación basta con escribir:
sudo kpartx -a imagen.img
Esto creará en /dev/mapper tantos dispositivos «loop» como particiones tenga la imagen o el disco, es decir loop0p1, loop0p2, etc. Esto tiene una ventaja y es a la hora de realizar tareas de mantenimiento o backup en discos duros como pasar fsck o cosas por el estilo. Pero este es otro tema.
Para nuestro caso particular lo siguientes que necesitamos para acceder a la información de la imagen es montar la partición que queramos en el punto de montaje deseado. Por ejemplo para montar la segunda partición en /mnt escribimos:
sudo mount /dev/mapper/loop0p2 /mnt
Una vez que tengamos la información que queremos desmontamos la imagen con umount:
sudo umount /mnt
Y luego borramos los dispositivos loop creados:
sudo kpartx -d imagen.img
Para más información podéis echar un vistazo al manpage de kpartx.
Y hasta aquí el artículo de hoy.
Saludos linuxeros.
Iconos de imagen destacada hechos por Freepik en www.flaticon.com con licencia CC 3.0 BY.
Muy buen tuto, me ayudo mucho a la hora de montar una particion de una imagen de raspberry y poder sacar las roms.
Gracias.
Gracias por tu opinión. Me alegra que te haya servido. Precisamente yo lo usé para eso mismo con una imagen de Recalbox xD
Muchas gracias bro, es un excelente tuto muy practico y muy util, y todo sin enredos ni tener que descargar herramientas adicionales a nuestro sistema, mil gracias por tu aporte.
Gracias. Me alegra que te guste
Gracias Bro.