sábado, 21 de enero de 2012

Recuperar datos de una particion tras desastres

Anoche hice algo que te arrepientes por mucho tiempo, tomé un disco de la mesa y “mentalmente” seguro era el correcto lo puse en el portátil y reinicié, salí a tomarme un café para encontrarme con que tomé el disco de recuperación de la portátil (ni idea de por qué estaba allí sobre la mesa), borrando todo y apareciendo un gracioso logo de Windows Vista donde antes había Linux Debian.
¿Horror?, si, hubo mucho pavor en ese momento (era mi instalación Linux de trabajo), así que me tocó echar mano de las herramientas de recuperación para poder ganarle una al Windows.

Estado Inicial

Luego de la instalación automática y desasistida del equipo, terminé con dos particiones NTFS que ocupaban la totalidad del disco, como la primera había ocupado más de 10Gb, asumí que los datos de las primeras particiones (/boot, /root) estaría sumamente corrompidos, pero me preocupaba /HOME, que estaba en un volumen LVM, así tomé mis herramientas:
  • gpart
  • testdisk
  • lvm-tools
Y manos a la obra!.

Inicio: obteniendo información de las particiones perdidas

Lo más importante, es saber toda la información de las particiones perdidas, entre esa información hay una muy importante, TESTDISK requiere saber con exactitud la geometría correcta del disco; sino, se las verá muy mal a la hora de recuperar el disco.
Para esta información viene al rescate gpart (que no gparted, gpart!).
cuando ejecutamos:
gpart /dev/sdb
Donde /dev/sdb es el disco duro que deseamos escanear, este devolverá información acerca de todas las particiones presentes en el disco.
Primary partition(1)
   type: 131(0x83)(Linux ext2 filesystem)
   size: 507mb #s(1038976) s(144224640-145263615)
   chs:  (1023/254/63)-(1023/254/63)d (8977/145/1)-(9042/61/43)r
Como ven, el disco fué formateado con una geometría de 254 heads (cabezales) y 63 sectores (números resaltados), anoten esto para utilizarlo con parted (modo rescue) o en mi caso, testdisk.

Segunda parte: ejecutando testdisk

Lo segundo que deben hacer es ejecutar testdisk, si no lo tienen pueden instalarlo (se llama: testdisk y está en los repositorios de Debian, Ubuntu y Fedora).
al ejecutar testdisk aparece esta ventana:
Nos pregunta si deseamos crear un log (llamado testdisk.log) de todas nuestras actividades, por seguridad, indiquen que sí.
De segundo, nos mostrará los discos a revisar, en mi caso:
Select a media (use Arrow keys, then press Enter):
Disk /dev/sda - 160 GB / 149 GiB - ATA SAMSUNG HM160HI
Disk /dev/sdb - 160 GB / 149 GiB - Generic External
Ya que el disco de 160Gb es un ATA Seagate que lo conecté por USB storage.
Seleccionamos el disco (flecha abajo), presionamos la tecla ENTER (INTRO, ustedes entienden ;) .
Luego pregunta el tipo de partición:
Please select the partition table type, press Enter when done.
[Intel  ]  Intel/PC partition
[EFI GPT]  EFI GPT partition map (Mac i386, some x86_64…)
[Mac    ]  Apple partition map
[None   ]  Non partitioned media
[Sun    ]  Sun Solaris partition
[XBox   ]  XBox partition
[Return ]  Return to disk selection
Escojan “Intel” (no usé GPT en este disco).
En las opciones que salen, es donde vienen los cambios, escojan “[Geometry]“.
Luego, verán una pantalla como esta:
Acá es donde en [ Heads ] colocaremos los valores que recuperamos con gpart (en mi caso: Heads: 254 y Sectors: 63).
Presionen [OK] al terminar y ahora vamos al escaneo.
Presionen “Analyze”, luego de analizar (Quick Scan) ejecuten un “Deeper Scan” para revisar toda la superficie del disco.
Al terminar verán que encontró nuestra partición:
5 L Linux LVM             1862  42 31 19291 137 19  278904832
Presionen flecha derecha para cambiar los modos:
Modo “*” = Primaria, boot
Modo “P” = partición primaria
Modo “D” = partición borrada (útil si consigue una partición nueva que solapa una vieja)
Modo “L” = partición lógica
En algunos casos, testdisk no puede entender que es un Linux LVM, para ello podemos presionar la letra T (Change Type) y escogen el modo Linux LVM.
Nota mental: una partición linux clásica tiene un modo 0×83.
Esta partición que iba a recuperar era un grupo de volúmenes LVM, era lógica, verifico los datos con gpart (heads, sectors, sector de inicio y sector final, tamaño, etc).
Si todos los datos concuerdan, presiono ENTER y luego escojo “[ WRITE ]” para escribir los cambios al disco, deberán reiniciar (si es un disco atachado al computador) o desconectarlo (si es un USB storage) para que reconozca los cambios.
ya respiramos un poco más aliviados, ahora a recuperar el grupo de volúmenes.

Paso 3: Recuperar el grupo de volúmenes

Obviamente para este paso tu computador debe reconocer grupos de volúmenes (tener instalado el paquete lvm2), al volver a conectar el disco duro, ejecutamos el comando:
pvscan
Este buscará todos los grupos de volúmenes en todos los discos, encontrando este:
pvscan
  PV /dev/sdb5   VG VgCANTV   lvm2 [132,99 GiB / 57,96 GiB free]
  Total: 1 [132,99 GiB] / in use: 1 [132,99 GiB] / in no VG: 0 [0   ]
Entonces lo chequeamos (para verificar consistencia):
pvck -a /dev/sdb5
  Found label on /dev/sdb5, sector 1, type=LVM2 001 
  Found text metadata area: offset=4096, size=192512
Lo vemos con pvdisplay:
pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb5
  VG Name               VgCANTV
  PV Size               132,99 GiB / not usable 4,00 MiB
  Allocatable           yes
  PE Size               4,00 MiB
  Total PE              34045
  Free PE               14837
  Allocated PE          19208
  PV UUID               A3m31N-wy5p-0zMl-0T3q-Nx45-jQR3-1Rjc4Q
Y lo activamos:
vgchange -a y VgCANTV
  49 logical volume(s) in volume group "VgCANTV" now active
Wow! 49 volúmenes (es donde tengo mis VMs de Xen de mi trabajo).
Luego de activado el volumen, vgdisplay nos retornará información:
vgdisplay
  --- Volume group ---
  VG Name               VgCANTV
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  83
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                49
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               132,99 GiB
  PE Size               4,00 MiB
  Total PE              34045
  Alloc PE / Size       19208 / 75,03 GiB
  Free  PE / Size       14837 / 57,96 GiB
  VG UUID               PhZqJE-44xs-F0tP-XAXr-s2jZ-LlON-5LBL0t
Al tener su propio UUID el grupo de volúmenes (y sus particiones) ya pueden ser accedidas de manera usual.

Paso 4: montando y chequeando

Uno de los peligros de usar XFS es la corrupción de los descriptores, en mi caso no hubo problemas, antes de montar ejecutamos:
xfs_check /dev/mapper/VgCANTV-volHOME
Y chequeará cualquier detalle del Filesystem, en caso de necesitar reparación, ejecutamos:
xfs_repair /dev/mapper/VgCANTV-volHOME
Si acaso hubo una pérdida de los logs de descriptores, pueden hacer que repare el sistema haciendo caso omiso de los logs y buscando los descriptores directamente del FS:
xfs_repair -L /dev/mapper/VgCANTV-volHOME
Por seguridad, le generamos un nuevo UUID a la partición XFS:
xfs_admin -U generate /dev/mapper/VgCANTV-volHOME
Y por último ya podemos montarla:
mount -t xfs /dev/mapper/VgCANTV-volHOME /media/respaldo/home
Respaldamos nuestros datos y ¡listo!, ya nos recuperamos!.
Lo bueno de herramientas como Testdisk o Gpart es que vienen incluídas en varias distribuciones LiveCD para recuperación de datos, como por ejemplo SystemRescueCD (del cual hice un artículo acá). Por desgracia no contaba ni con unidad de CD ni con mi SystemRescueUSB, pero testdisk y gpart son herramientas bastante pequeñas y se instalan en cualquier linux muy rápidamente.

Fuente:http://phenobarbital.wordpress.com/2012/01/16/linux-formateos-accidentales-en-discos-como-recuperarse/

No hay comentarios:

Publicar un comentario