Sunday, December 31, 2006

Panic! At the Debian Server






Una de las cosas más útiles de Windows y su GUI es el recycle bin. No existe peor cosa que borrar archivos (o datos valiosos) de una PC y más de un servidor. Si pasa eso, no debe haber pánico, solo se busca en el recycle bin y se recupera todo. Claro que si utilizamos la línea de comando de Windows y ejecutamos el siguiente comando:

C:\del

entonces el archivo no va al recycle bin, sino que es borrado.

A Partir de Windows XP tenemos la utilidad de restore, por si nos equivocamos de gran manera con alguna instalación, configuración de Windows, se puede recobrar. Claro siempre y cuando que se cree un checkpoint, como se puede ver aquí. Pero esto no ayuda recobrar los archivos borrados, sino recobrar cambios hechos al sistema.

¿Entonces que se debe hacer si borramos archivos? En realidad se debe tener un backup de archivos. Y que hay los archivos de sistema de un servidor? Pues se debe tener un backup de esos servidores para disminuir el downtime. Pero claro muchas veces no tenemos ni un backup, y lo único que nos queda es tratar de recobrar esos archivos.

Siempre escuchamos por allí que siempre es posible recobrar archivos borrados, incluso después de un format. La pregunta del millón es ¿cómo?. Primero debemos de dejar de trabajar con el disco, si es posible apagar la computadora. Después tenemos que investigar la estructura de nuestro filesystem. De esta forma se podrá saber las herramientas que existen para recobrar archivos borrados.

En mi experiencia con un servidor debían, donde se borraron archivos del sistema, el file system era reiserfs, un file system de tipo journaled soportado por Linux. Reiserfs guarda metada, entradas de directorio, bloques de inodes en un solo y combinado arbol B+. Entonces al borrar archivos lo que se hace es “podar” el árbol para eliminar el enlace correspondiente al archivo.

Lo primero que se debe hacer es pasar el disco donde borramos los archivos a otra computadora con Linux. Después debemos montar la el disco y hacer un backup de la data que existe actualmente. El backup nos sirve debido a que si ocurre un problema durante la recuperación de archivos que corrompe el disco por completó entonces no perdemos todo. Se tiene que recordar que el proceso de recuperación de archivos no siempre concluye con éxito. Una vez con el backup, proseguimos a recuperar los archivos. Para trabajar de la mejor forma necesitamos otro disco duro libre para hacer una copia de la partición donde están los archivos que deseamos recuperar. Entonces tendremos tres discos duros:

El del filesytem de nuestra maquina con Linux, el que deseamos salvar y el que funciona de backup.

  1. Revisar que tenemos instaladas las herramientas de reiserfs, para ello haga un simple

$ man reisefsck

o

$ reiserfsck.

Si no aparece nada entonces se debe instalar las herramientas. Para ello podemos utilizar yum (por si utilizamos fedora core o redhat)

$ yum install reiserfsprogs

  1. Una vez instalado seguimos a crear un backup de la partición que deseamos recuperar los archivos, hacemos lo siguiente:
    1. Bajamos al nivel de usuario 1 con

$ init 1

    1. Después desmontamos nuestra particiones suponiendo que la que queremos recuperar esta en sdb y el backup estaría en sdc

$ umount /dev/sdb1; umount /dev/sdc1

    1. Tocaría hacer el backup con ddrescue el origen es sdb y el destino es sdc.

$ ddrescue /dev/sdb /dev/sdc

  1. El momento de la verdad, utilizaremos reiserfsck para reconstruir el árbol. Lo aremos en backup para así poder intentar otros métodos.

$ reiserfsck –scan-whole-partition –rebuild-tree -l /root/recovery.log /dev/sdc1

Este proceso toma bastante tiempo en particiones grandes y todo depende en la velocidad de los discos. En un disco de 20 gigas me tomo alrededor de 8 horas.

La opcion scan-whole-partition revisa toda la partición, incluso la parte que esta vacia.

La opción –rebuild-tree se encarga de buscar los nodos y colocarlos en el árbol. Si por alguna razón no puede colocar el nodo en el árbol entonces coloca el archivo en un directorio llamado lost+found.

La opcion –l permite crear un log de recovery.

Conclusiones….

Este proceso ayuda, pero recobrar archvivos que no son parte del sistema operativo, pero cuando lo son no es como en Windows que solo tenemos que remplazar el archivo y todo funciona de maravilla. Se debe tomar los archivos que se necesitan y volver a instalar el sistema operativo, es porque se gataria demasiado esfuerzo tratar de dejar el Sistema operativo como estaba antes de ser borrado.

Se debe tener backups de todo, backups que sean verificables y continuos.

Finalmente nunca se debe trabajar con root en un servidor. Nunca, se debe crear usuarios destinados a cada servicio que el servidor provee, asi encapsulamos cualquier error y no se propaga. Aquí es donde chroot juega un papel importante.

Enlaces de que me ayudaron y espero que les ayuden…

http://antrix.net/journal/techtalk/reiserfs_data_recovery_howto.comments

http://www.cyberciti.biz/tips/repairing-reiserfs-file-system-with-reiserfsck.html

http://recover.sourceforge.net/unix/

http://docs.cs.byu.edu/docs/mounting/2.php

No comments: