lunes, 7 de noviembre de 2011

Linux: Recovering a corrupt superblock



Una de las estructuras más básicas del filesystem son los bloques. Estos pueden ser utilizados para dos propósitos: El primero de ellos guardar datos, el segundo almacenar metadata que referencien a dichos datos.

En otras palabras, la metadata, describe la estructura del filesystem como así también sus atributos.
Existe un bloque muy importante en los filesystem denominado superblock, este bloque contiene toda la información referida a dicho sistema de archivos, y es en quien se fija el sistema a la hora de montarlo. Por ejemplo el contendrá la cantidad de inodos, los grupos de bloques, el tipo del filesystem, el estado, el tamaño, etc. Su ubicación varía dependiendo del tamaño de bloque usado, por default este tamaño es de 1024 bytes, pero esto varía entre 2048, o 4096.



Al momento de crearse el filesystem, se guardan varias copias de este superblock primario en distintos grupos de bloques, que pueden ser accedidas para su posterior recuperación en caso de que el mismo se corrompa.  El comando dumpe2fs puede ayudarnos con esto, localizando donde se encuentran almacenados los distintos backups de el superblock:
# dumpe2fs /dev/sda1 | grep -i Backup
dumpe2fs 1.41.14 (22-Dec-2010)
Journal backup:           inode blocks
  Backup superblock at 32768, Group descriptors at 32769-32769
  Backup superblock at 98304, Group descriptors at 98305-98305
  Backup superblock at 163840, Group descriptors at 163841-163841
  Backup superblock at 229376, Group descriptors at 229377-229377
En este caso vemos que existen backups de dicho superblock en los bloques 32768, 98304, 163840 y 229376, por lo cual, como dijimos si este superblock se corrompe podemos recuperarlo de manera relativamente sencilla.
Para ello, booteamos con singleuser (en el caso de que sea el root filesystem el que se corrompio), y con el filesystem desmontado hacemos fsck. elijiendo alguna copía de dicho superblock para restaurar:
# e2fsck  -f -b 98304 /dev/sda1
Una vez que esto termine, podemos rebootear nuestro sistema y tendremos nuestro superblock recuperado.

No hay comentarios:

Publicar un comentario