LINUX GNU BLOG

Software libre y diseño web
Jul182013

Recuperar archivos eliminados en Linux

 Delete Linux gnu blog

En general, un fichero es un recurso que nos da el sistema operativo para acceder de forma ordenada a un determinado conjunto de datos almacenados en el disco duro, por lo que se puede entender como un enlace a la zona del disco donde se encuentran los datos relacionados al mismo.

En Linux, cuando un programa abre un fichero, el sistema operativo crea otro enlace a ese archivo, llamado Descriptor de Fichero (FD), en un lugar temporal que será a través del cual dicho programa acceda a los datos relacionados con el mismo, si eliminamos el archivo, el sistema lo que hace en realidad es eliminar el enlace que lo representa, pero no toca los datos que continúan guardados en el disco duro y no solo no los toca, sino que mientras exista otro enlace a esos mismos datos, como el creado de forma temporal para el programa que lo tiene abierto, no permitirá a nadie escribir en esa misma zona del disco, garantizando el correcto funcionamiento de todos los programas, incluso si se han eliminado ficheros importantes. En el momento en que el programa deja de necesitar el fichero y lo cierra, el sistema elimina su enlace y si no hay mas enlaces (debido a que el fichero ha sido eliminado), la zona asociada al mismo, queda disponible para ser sobrescrita por otro fichero.

Después de esa pequeña introducción teórica pasemos a un caso hipotético. Imaginemos que teníamos un fichero llamado “Archivo.txt” y que, por error, lo hemos eliminamos. Antes de que cunda el pánico podemos intentarlo recuperar usando una herramienta de Linux llamada lsof, esta herramienta puede mostrar los archivos abiertos y conexiones de red. Si nuestro apreciado archivo continua abierto por algún programa podremos recuperarlo fácilmente con la información que ésta nos facilita.

Para averiguar si continua abierto lo ejecutamos de este modo:

lsof | grep "Archivo.txt"

Si tras ejecutarlo no se muestra nada, significa que no hemos tenido suerte y que no podremos recuperar el fichero usando esta técnica, pero si salen una o mas líneas similares a la siguiente, si podremos hacerlo:

less 4620 usuario 4r REG 8,7 0 21237397 /home/usuario/Archivo.txt (deleted)

Si nos fijamos bien podemos ver que en este caso el programa “less” con PID 4620 aún tiene nuestro fichero abierto y que este ha sido eliminado (deleted). Además he marcado en negrita otro dato que aparece tras el nombre de usuario, se trata de un número seguido de una o mas letras (en este caso “4r”). Ese número es el descriptor de fichero (FD). Conociendo el PID de la aplicación que tiene nuestro fichero abierto y su FD, podremos recuperarlo diciendo al sistema que lo copie, para evitar así que se pierda en cuanto la aplicación que lo tiene abierto lo cierre:

cp /proc/4620/fd/4 /home/usuario/Archivo.txt

Ahora podremos comprobar que nuestro fichero vuelve a existir y que su contenido es el mismo que antes de ser eliminado.

Esta técnica de recuperación no funciona siempre, pues necesita que el fichero eliminado continúe abierto por alguna aplicación y, además, muchas aplicaciones no mantienen los ficheros abiertos mientras los usan, sino que los abren, cargan sus datos en memoria y los cierran inmediatamente, pero nos puede salvar en más de una ocasión.

Política de comentarios

Dada la importancia de los comentarios como espacio de participación, te pedimos por favor que leas detenidamente y cumplas con las siguientes normas de participación.

Una respuesta para “Recuperar archivos eliminados en Linux

lorena

Hola:
Para recuperar fotos y videos borrados cual es el mejor ??’ Gracias


Deja un comentario

Tu dirección de correo electrónico no será publicada.