Restaurar
archivos borrados en un sistema de archivos ext3
|
A todos nos puede pasar Le puede pasar a cualquiera, tarde o temprano: oscar@kroline:~$rm -rf tesisun instante después de que oprimiste la tecla del enter descubres el error, pero es tarde, acabas de borrar un archivo o un directorio del cual no tienes un respaldo, o el que tienes es demasiado viejo... en medio de tu pánico ves pasar todos y cada uno de los archivos que has borrado, algunos los tendrás que rehacer y otros, a ver cómo los consigues. Afortunadamente inmediatamente recuerdas que en los sistemas linux los archivos realmente no son borrados, son sobre-escritos por nuevos contenidos, así que lo primero que debes hacer es desmontar el disco o partición o si el archivo borrado estaba en el mismo sistemas de archivos deberás por lo menos remontarlo con permisos de solo lectura o en el peor de los casos apagar la máquina. Hazlo ya!! si no lo has hecho. Ext2 y Ext3 Después de preguntarle a San Google alguna respuesta a tu problema ecuentras lo siguiente: En los sistemas ext2 hay muchas formas de recobrar los archivos eliminados, de manera tan sencilla como lo hace winbugs con su papelera de reciclaje. Por un momento te pasa por la mente cambiar el sistema de archivos de ext3 a ext2, al fin y al cabo en tu curso de Sistemas Operativos Modernos tu profesor te explico que el ext3 es un ext2 con un journal (¿y qué era eso?). Por lo pronto deberías de hacer el cambio. Para los sistemas ext3 es muy probable que encuentres el siguiente FAQ: Q: How can I recover (undelete) deleted files from my ext3 partition? Actually, you can't! This is what one of the developers, Andreas Dilger, said about it: In order to ensure that ext3 can safely resume an unlink after a crash, it actually zeros out the block pointers in the inode, whereas ext2 just marks these blocks as unused in the block bitmaps and marks the inode as "deleted" and leaves the block pointers alone. Your only hope is to "grep" for parts of your files that have been deleted and hope for the best. Lo anterior no es necesariamente cierto. Toda la información aún puede seguir ahi, incluyendo los bloques de direcciones. Es un poco diferente que en el ext2 pues ahora será necesario recobrar la información del journal. Con el ext2 bastaba con hacer una búsqueda i-nodo por i-nodo y bloque por bloque, era tardado pero seguro. Con el ext3 es menos coherente la relación entre los datos y sus los metadatos (i-nodos y bloques) debido a la utilización de algoritmos heurísticos para proteger el sistema de archivos de fallas del sistema general. Por ejemplo, cada vez que un archivo es accedido, su tiempo de acceso cambia y su i-nodo deberá ser almacenado en el disco junto con los otros 31 i-nodos que reciden en el mismo bloque. Cuando eso ocurre, una copia de ese bloque es escrito en el journal. Por lo tanto, si el disco no es tan grande comparado con tu journal actual y si accediste recientemente a los archivos que acabas de eliminar, es posible recobrar los bloques de direcciones desde el journal. |
Lo que debería de saber antes de iniciar ¿Cómo funciona el ext3? El contenido de los archivos es almacenado en bloques de 4096 o 2048 o 1024 bytes (en realidad depende cómo se haya creado el sistema de archivos, mke2fs o mkfs.ext3). Un disco duro es un dispositivo de bloque, lo que significa que cada operación de entrada-salida será hecha en bloques... ...bueno, es posible que debido a que estás en estado de shock por la pérdida de tus archivos, no estás para recordar o aprender de los sistemas de archivos, asi que puedes pasar a la sección "para impacientes" mientras yo pongo más choro por aquí. |
ext3grep ext3grep
es una herramienta desarrollada inicialmente para recobrar archivos
eliminados, sin embargo también es bastante útil para
entender cómo funciona el sistema de archivos ext3...
|
Para impacientes o en estado de shock Puedes bajar las fuentes
del ext3grep de varios lugares, configurarlo,
compilarlo e
instalarlo como cualquier aplicación de linux. ext3grep
es parte de
varias distribuciones de linux, entre ellas debian, así que
basta con instalar los binarios:
kroline:~#apt-get install ext3grep Restaurar todo Lo más sencillo es restaurar
todo, es decir, que ext3grep trate de hacer una copia de todas las
transacciones de archivos desde la ultima vez que lo desmontaste. Es
muy probable que la infromación de los archivos recientemente
eliminados estén aún registrados en el journal.
Aunque es la solución más simple es la más tardada y evidentemente tomará más tiempo con respecto al tamaño de tu disco. Además deberás de considerar que hará una copia de casi todo el disco o partición, así que deberás de tener otra partición o disco con espacio suficiente para ello. Suponiendo que la partición o disco en donde se econtraba tus archivos es /dev/sda6, hacemos los siguiente: kroline:~#ext3grep /dev/sda6 --restore-allEl comando anterior creará un directorio llamado RESTORED_FILES en el cual copiará todos los archivos que tiene registrados en su journal. Ahora lo que te queda es cruzar los dedos para que los archivos eliminados aún estén en el journal y puedan ser restaurados. Búsqueda por tiempo Una forma más rápida es
buscar los archivos que fueron eliminados en base al tiempo. Como el
journal es un sistema que mantiene la información de las
transacciones de archivos en base al tiempo de acceso, seguramente
tendrá la información de qué archivo fue eliminado
en un momento dado.
kroline:~#ext3grep /dev/sda6 --dump-names > eliminados.txtel comando anterior genera uno o varios archivos con la información de los arhivos eliminados. Cada transacción está asociada con una estampa de tiempo, la cual es un conjunto de bits que cuentan los segundos desde el 1 de enero de 1970 y es transformada en una cadena de caracteres para su lectura. Se pueden cambiar de una cadena a estampa de tiempo o viceversa por medio de un programa en C con las funciones descritas en time.h o por medio del servicio en línea TimeStamp Generator. Así, es posible ubicar el tiempo en el cual deseamos restaurar: kroline:~#ext3grep /dev/sda6 --restore-all --after 1280083764 Búsqueda por nombre Si recordamos el nombre del archivo,
podemos hacer una búsqueda del mismo en el journal.
una vez que han sido
ubicados los bloques, se asocia con el i-nodo:kroline:~#ext3grep /dev/sda6 --search tesises posible que el comando anterior nos arroje muchos bloques eliminados, será necesario ubicar cada bloque que pertenece a nuestro archivo eliminado: kroline:~#ext3grep /dev/sda6 --ls --block 240017 kroline:~#ext3grep /dev/sda6 --ls --inode 656495finalmente se restaura el i-nodo kroline:~#ext3grep /dev/sda6 --restore-inode 2263308 |