Recuperar archivos borrados utilisando lsof Imprimir
Martes, 30 de Junio de 2009 21:18

Con la utilidad lsoft puedes recuperar archivos que han sido eliminados mientras trabajas en ellos, en realidad lsoft no recupera el archivo pero nos dice donde se encuentra el archivo temporal que el proceso esta usando.

Un archivo en Linux, es un puntero a un inodo, el cual contiene la información sobre el archivo (permisos, dueños, y las ubicaciones fisicas en las que se encuentra almacenado en el disco). Al borrar el archivo solo se borra el enlace al inodo, pero no el inodo en si - si un proceso tiene abierto un archivo y este es eliminado, el inodo mantendra la información y contenido del archivo, mientras el proceso no se cierre.

Para probar este ejemplo, crearemos un archivo llamado test.txt y lo abriremos con el comando "less test.txt", ahora abriremos otra ventana de terminal y eliminaremos el archivo, con el comando "rm test.txt", ahora si tratamos de listar o hacer cualquier proceso con el archivo "test.txt", obtendremos un error. ya que el enlace al inodo a sido eliminado, pero el contenido del inodo no, ya que lo tenemos abierto con less.

Ahora ejecutaremos el comando

lsof | grep test.txt

Usamos una tuberia para pasar el resultado al comando grep y que este filtre y muestre, solo las líneas que contienen "test.txt". Si no utilizamos grep obtendremos un listado de todos los archivos que esten abiertos.

Obtendremos una línea como esta
less      24276    root    4r      REG        9,0     2062    7791171 /tmp/test.txt (deleted)

Las columnas que nos interesan son, la primera, que nos dice que procesa lo tiene abierto (24276), y el cuart, el cual es el descriptor de archivo (4), Ahora veremos los archivos en el directorio /proc, ahora ejecutaremos el comando

ls -l /proc/24276/fd/4


y obtendremos una línea con un resultado como este

lr-x------ 1 root root 64 jun 30 17:35 4 -> /tmp/test.txt (deleted)

Entonces ahora copiaremos, el archivo a otra ubicación y listo, hemos salvado el archivo. y deberemos verificarlo para asegurarnos de que la información recuperada es util.

cp /proc/24276/fd/4 /root/test.txt

Notas :

  • No use el modificador  -a con el comando cp, ya que este solo copiara el enlace simbolico del archivo,  y no el archivo.
  • Solo funciona con archivos que este abiertos al momento de su eliminación, sino es asi no intente recuperar el archivo.
  • No todos los archivos se recuperan correctamente, incluso si no han sido modificados.

 

Artículo original : http://www.linuxjournal.com/content/recovering-deleted-files-lsof