Tutorial – Como recuperar archivos borrados en Linux con lsof

errorlsof es más que un simple comando de Linux es una herramienta que permite ver todos los archivos abiertos por un determinado proceso, tiene muchos usos pero en este caso vamos a ver como utilizar lsof para recuperar archivos que hayamos borrado accidentalmente.

Un poco de teoría un archivo en Linux es un apuntador a un inode, este inode es el que contiene los datos del archivo como permisos, propietario y donde está ubicado en el disco. Cuando borramos archivos en Linux removemos es el link pero no el inode como tal, si otro proceso tiene abierto el inode no es liberado hasta que el proceso termine con el.

Nota: Este método solo funciona si el archivo está abierto por algún proceso, si el proceso que usaba el archivo ya finalizó este método no sirve de nada.

Muchos después de leer la última línea se preguntarán para que sirve entonces si lo tiene que tener algún proceso abierto, supongamos que estás editando un archivo de audio y tienes archivo1.mp3  y archivo2.mp3, estás editando en este momento el archivo1.mp3 y decides que quieres borrar el 2 porque el 1 está perfecto, ejecutas por equivocación rm archivo1.mp3 y a llorar se ha dicho, esto es un simple ejemplo de cosas que suceden y creanme que hay muchos casos.

Este tutorial sirve para cualquier distribución de GNU/Linux.

Para este Tip vamos a realizar los siguientes pasos:

Paso 1. Crea un archivo llamado texto.txt de prueba (no intentes esto con un archivo que sea importante no me hago responsable por ninguna pérdida), escribe lo que quieras dentro de este archivo.

Paso 2. Ejecuta:

less texto.txt

Vas a ver el contenido del archivo que editaste ahora presiona Ctrl-Z para suspenderlo o abre otra ventana de terminal.

Paso 3. Ahora el momento de la verdad ejecuta:

rm texto.txt

Archivo borrado, puedes ejecutar ls texto.txt para comprobar que el archivo se borró.

Paso 4. Ahora vamos a ver lsof en acción ejecuta:

lsof | grep texto.txt
less       2422       tribulinux    4r      REG        8,5       59     252900 /home/tribulinux/texto.txt (deleted)

Debe aparcerte algo similar (con algúnos números distintos), lo importante de la segunda línea es el PID ó número de proceso que es en este caso 2422 y el descriptor del archivo que es la cuarta columna es decir 4.

Ahora con estos datos podemos ver dentro del directorio proc donde todavía estará la referencia a nuestro archivo.

Paso 5. Ejecuta:

ls -l /proc/2422/fd/4
lr-x—— 1 tribulinux tribulinux 64 2009-06-01 16:18 /proc/2422/fd/4 -> /home/tribulinux/texto.txt (deleted)

Te aparecerá algo como en la línea de arriba aquí ya empezamos a respirar un poco porque aún hay esperanzas de recuperar el archivo.

Paso 6. Recuperar el archivo ejecutando simplemente:

cp /proc/2422/fd/4 texto.txt.recuperado

Colocale el nombre que quieras

Finalmente puedes ver tu archivo recuperado:

ls -l texto.txt.recuperado

-rw-r–r– 1 tribulinux tribulinux 59 2009-06-01 16:27 texto.txt.recuperado

Y listo ya tienes de vuelta tu archivo

Espero que esto le salve el día a alguien alguna vez y que les sea de utilidad aunque sea para comprender un poco más a Linux.

Saludos

Olivers

Si quieren recibir más noticias del mundo del Software Libre, Código Abierto, Open Source y Linux subscríbanse a nuestro Feed de Noticias RSS aquí o siguenos ahora por nuestra cuenta de Identi.ca o Síguenos en Twitter

Share

olivers

Fanático del software libre, fotógrafo de fin de semana. Co-fundador de tutanda.com y ddw.cl. Me puedes seguir en Twitter @odeabreu.

También te puede gustar...

10 Respuestas

  1. darkclaw dice:

    Esta muy bien tu tutorial, lo he hecho y funciona excelente. saludos

  2. eliseo dice:

    Si, si funciona, pero en este caso solo destruiste el Inodo con el rm, con lo cual los datos siempre estuvieron ahí en el disco. Luego es sencillo sacar el archivo que esta corriendo desde proc.

    De todas formas se agradece, ya que a uno se le olvidan estas cosas.

    La pregunta es, y si borro el archivo con shred, ¿existe alguna manera de recuperarlo en un sistema de archivos ext3 o en ntfs ?

    Atento a tus comentarios,

    Eliseo.

  3. Muchas gracias por la informacion, este blog esta buenisimooo

  4. ng dice:

    Todo perfecto, peroooooooo
    Solo funciona cuando detienes el proceso con Ctrl+Z, porq si cierras normalmente y despues ejecutas lsof no obtendras nada. Por lo q es una @#! lo q dices

    Saludos

    ng

  5. Olivers dice:

    Esto es una nota para todos, antes que me sigan criticando de que esto solo funciona en casos muy limitados, es verdad, esta dicho en el tutorial, es solo una demostración de como funcionan un poco las cosas en Linux, no es la panacea ni pretende serlo.

    Disculpen a aquellos que esperaban más, es una simple demostración

    Saludos
    Olivers

  6. Gulix dice:

    También existen otras formas de recuperar archivos, mirar a?a -> http://www.gulix.cl/wiki/Recuperar_archivos_en_linux

  7. matias ezequiel andreu dice:

    hola, necesito me ayuden con algo que hice, sin querer borré muchos datos de una partición en NTFS con mi ubuntu 9.04, cuando me dí cuenta( además de querer morirme) reinicié la pc para tratar de que mi xp recupere los datos con el TuneUp Utilities 2007, ¡¡pero no apareció nada!!, ¿¿no existe alguien que me pueda decir cómo hago para recuperar mis datos??

    ¡¡al que pueda responderme se lo voy a agradecer mucho!!

    GRACIAS ( anticipadas)

  8. Rodolfo dice:

    Hola, como hago para desplegar una lista de archivos borrados, osea si desconosco el nombre del archivo borrado, existe algun log o alguna referencia para hacer la busqueda?

    Gracias!!

  9. luis dice:

    Muy buen tip, pero eso es para recuperar archivos y si lo que deseo recuperar son carpetas?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *