[Linux] formateos accidentales en discos ¿cómo recuperarse?

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.

 

Advertisement
Esta entrada fue publicada en contraloría social, Cultura Libre, PlanetaLinux, Software Libre, trucos de la abuela y etiquetada , , , , , , , , , . Guarda el enlace permanente.

7 Respuestas a [Linux] formateos accidentales en discos ¿cómo recuperarse?

  1. Pingback: [Linux] Formateos accidentales en discos, ¿cómo recuperarse? « Cursos en SmartDreams.cl

  2. firpo dijo:

    Exelente manual de rescate, muy agradecido por compartirlo !!
    Pido permiso para publicaro en mi blog
    Saludos.-

    • phenobarbital dijo:

      Permiso siempre concedido!, todos mis artículos son licenciados CC-by-SA y tienen derecho de copia siempre que se mencione la fuente …

      Gracias!

  3. goliveira dijo:

    Saludos!

    Tengo problemas con la tabla de particiones de un disco de 10GB, el caso es que el sistema lo reconoce como si fuera de 2TB:

    Disk /dev/sdb: 2199.0 GB, 2199023255552 bytes
    255 heads, 63 sectors/track, 267349 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0×00000000

    Disk /dev/sdb doesn’t contain a valid partition table

    Entonces cuando intento ejecutar gpart, este es el error:
    *** Fatal error: ioctl(BLKGETSIZE) failed: File too large.

  4. Jesús, como siempre excelente material el que publicas.

    Por otro lado quiero seguir / publica tus entradas (todas, ya que son muy buenas) en http://www.humanbyte.net con la opcion de RSS de las entradas (http://phenobarbital.wordpress.com/feed/) , pero al tratar de hacer eso me arroja un error, te comento que no soy el editor de la pagina de humanbyte ( y no se mucho de desarrollos web)

    This page contains the following errors:
    error on line 54 at column 30: Input is not proper UTF-8, indicate encoding !
    Bytes: 0×01 0x0A 0xC2 0xA0
    Below is a rendering of the page up to the first error.

    Saludos

  5. una vez experimentando con los unicos discos que he tenido (todos dañados recuperados que conste) logre poner el mbr en solo lectura, corrobore no se podia cambiar, repeti la operacion cientos de veces pero descubri que nunca supe como lo hce, fue hace 12 anios ya.

    si llegaste a este nivel.. puede que llegues a lograr algo parecido, creo seria util para evitar desastres? si se llega encontrar alguna idea de como, avisaos

    • phenobarbital dijo:

      Había oido de que con un bit se podía colocar la MBR de solo lectura en un sistema GPT (olvidate de montar Windows y particiones tipo DOS), esto evita que cualquier instalación “accidental” ocurra … claro, nunca lo he intentado (ni tengo discos *por ahora* para probarlo), pero seguro leeré más al respecto y te comento …
      Saludos!

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s