domingo, 12 de marzo de 2017

Montando particiones de imágenes de discos enteros

Un familiar me pidió si le prestaba una máquina por un tiempito, sabiendo que soy medio coleccionista de hardware.
No hay problema, le dije, pero primero la vacío de mis archivos, y la reinstalo.
Claro, luego de tan gentil ofrecimiento de mi lado, me puse a pensar que esa máquina tenía en su sistema operativo mil customizaciones.
La solución fue sencilla, hago un vuelco con un "dd", y cuando me la devuelve, hago el mismo "dd" en sentido inverso, y todos felices.
Como la felicidad es sólo un instante, me encontré con que necesitaba un archivo de esa misma máquina, que ya estaba entregada a su nuevo inquilino...montar una partición basada en un archivo es sencillo, pero una partición en una imagen de un disco entero, puede tener sus vueltas.
Para evitar ver ese mismo sufrimiento en vuestros rostros, es que les comento que la cosa fue mucho más sencilla de lo que pensaba. Hice un "gparted" del archivo, extraje el offset de la partición, y lo monté alegremente. El archivo se llama "paviliondm1.img", y es el resultado de bootear con un pendrive la vieja laptop, conectarle un disco rígido externo, montarlo, y lanzar el dd. Acá la fórmula para tener el archivo, una vez booteado con el pendrive, considerando que ese dispositivo quedó en /dev/sdc, y que el disco rígido externo en /dev/sdb:

sudo mount /dev/sdb1 /mnt
dd if=/dev/sda of=/mnt/paviliondm1.img bs=64K

Una vez hecho el vuelco, conecté el disco en mi laptop actual, y lancé estos comandos para montar lo que alguna vez fue la partición 7, y que el disco externo, en mi laptop actual, quedó en /dev/sdc. Fpijense en lo que marco en negrita para entender el porqué del comando de montaje:

# mount /dev/sdc1 /mnt
# cd /mnt
# ls -ltr
total 635104432
(...)
-rw-r--r-- 1 root  root  500107902976 mar 11 21:11  paviliondm1.img

# parted paviliondm1.img 
GNU Parted 3.2
Using /mnt/paviliondm1.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit                                                             
Unit?  [compact]? B                                                       
(parted) print                                                            
Model:  (file)
Disk /mnt/paviliondm1.img: 500107902976B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start          End            Size           Type      File system     Flags
 1      1048576B       209715199B     208666624B     primary   ntfs            boot
 2      209715200B     126038835199B  125829120000B  primary   ntfs
 3      126038835200B  126877835263B  839000064B     primary   ext4
 4      126878743552B  500107837439B  373229093888B  extended
 5      126878744576B  135468679167B  8589934592B    logical   linux-swap(v1)
 6      135469727744B  240327327743B  104857600000B  logical   ext4
 7      240328376320B  500107837439B  259779461120B  logical   ext4

(parted) q                                                                
# mount -o loop,offset=240328376320 paviliondm1.img /mnt2
# ls -l /mnt2
(aparecen todos mis archivos!)

Feliz de la vida puedo volver a usar los archivos que tenía en esa partición!
Salud, hermanos pingüinos!