Montar una imagen DD o RAW

Hay veces en las que tenemos una imagen raw creada con dd, bien porque hemos hecho alguna copia de seguridad de una tarjeta SD o de un pendrive y necesitamos acceder a los datos que contiene. Este tipo de imágenes contienen un disco con su sector de arranque, una o varias particiones con sus respectivos 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. Manos a la obra.

Nota: Voy a usar de ejemplo una imagen que tengo hecha de una SD con Raspbian.

 

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 y en la segunda y tercera líneas nos dice 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 en Filesystem que el sistema de archivos es ext4.

 

Ahora necesitamos saber donde empieza (en bytes) la partición que queremos montar. 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, por tanto 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 nos haga la multiplicación necesaria para calcular el offset escribiendo $(( 94208 * 512 )).

 

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

 

A modo de seguir con el ejemplo, la linea para montar la segunda partición de la imagen de ejemplo en /mnt sería:

sudo mount -t ext -o loop,ro,offset=$((94208*512)) rbpi_lite_config.img /mnt

 

Decir que como vamos a montar un sistema de archivos que tendrá ficheros con propietario y permisos 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

 

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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *