Linux: experimento con un file decriptor de Linux para recuperar un fichero eliminado
¿Cuántas veces has eliminado un fichero sin querer? Seguramente has visto muchos tutoriales en la red sobre cómo recuperar datos borrados accidentalmente mediante ciertas herramientas, especialmente las usadas por forenses de datos. En definitiva, tienes multitud de apps disponibles para intentar recuperar datos eliminados o de medios formateados.
Este no va a ser un tutorial más de ese estilo. Lo que intentaré hacer aquí es mostrar otro método para recuperar ciertos ficheros eliminados desde Linux con las propias herramientas built-in del sistema. Quizás no es algo demasiado práctico (no siempre sirve) pero, más que por el hecho de mostrar otra alternativa para recuperar ficheros, es por aprender algo de cómo trata Linux a los ficheros asociados a los procesos…
ÍNDICE:
¿El proceso sigue vivo? Entonces el fichero también…
Introducción (planteamiento)
Piensa algo, como sabes, en otros sistemas operativos, cuando intentas modificar o eliminar un archivo que está siendo usado por otro proceso (programa), es probable que aparezca un mensaje de error en pantalla alertando. Tipo «No se puede completar la acción (eliminar) porque X programa está usando el archivo» o similar. En cambio, en un *nix puedes modificar o eliminar ese fichero incluso si un proceso está usándolo (no queda vinculado). Por ejemplo, podrías abrir una imagen con una app de dibujo, y mientras la tienes abierta para editarla, abrir esa misma imagen con otra app y modificarla sin problema.
Pero que no quede vinculado no quiere decir que un proceso no «guarde» algo de un fichero que está usando mientras dicho proceso esté activo. ¿A dónde quiero ir? Pues muy sencillo, si un proceso «guarda algo» en la RAM de un fichero usado, y dicho proceso sigue en marcha, aunque hayas eliminado el fichero, se podría recuperar.
¿Qué necesito?
Para este experimento básicamente no necesitas instalar nada. Se hará con herramientas built-in de tu distro GNU/Linux favorita. Solo necesitarás:
- nano
- lsof
- less
- ls
- cp
- Fichero de prueba (el que se elimina)
- /proc
Por tanto, 0 instalaciones…
Experimento (recuperar un fichero eliminado)
Imagina el siguiente escenario. Abro un texto ffff.txt con el editor nano:
Ahora uso less (proceso que mantiene el fichero), pero elimino «sin querer queriendo» el fichero ffff.txt desde otra ventana del terminal (para no detener less):
Se podría usar otra herramienta en vez de less, pero que sea interactiva y no pasiva. Es decir, si pruebas con, por ejemplo, nano, cat,…no sirve porque éstos solo hacen uso del FD en momentos puntuales cuando se requiere.
#Desde la ventana actual del terminal: less ffff.txt #Desde otra nueva ventana del terminal: rm ffff.txt ls ffff.txt ls: no se puede acceder a 'ffff.txt': No existe el archivo o el directorio
Ahora ya ha sido eliminado, ¿verdad? Ahora entra en escena la herramienta lsof, que muestra los procesos que tienen abierto un archivo:
lsof | grep ffff.txt less 10716 isaac 4r REG 259,2 30 808438 /home/isaac/Escritorio/ffff.txt (deleted)
¡Vaya! La herramienta lsof ha encontrado algo a pesar de que ha sido eliminado el fichero previamente. Ahora hay que usar esta información arrojada por lsof para tratar de recuperarlo. Para ello nos vamos a fijar en la cuarta columna, es decir, la que hace referencia al descriptor del fichero (FD) y también en la segunda, es decir, el PID o identificador del proceso correspondiente a less. En este caso sería 4r y 10716 respectivamente.
Ahora vamos a ir hasta /proc para localizar a este descriptor dentro del directorio correspondiente al proceso:
cd /proc/10716/fd/ ls cat 4
Como puedes ver, si se hace eso el concatenador arroja el siguiente resultado:
Prueba para architecnologia.es
Mismo contenido que el fichero de prueba creado al inicio. Por tanto, sigue manteniéndose abierto a través del descriptor de fichero. Y para recuperarlo, tan solo bastaría con hacer una copia:
cp /proc/10716/fd/4 ~/Escritorio/ffff.txt
Más sobre cómo recuperar ficheros o directorios eliminados
Como dije al principio, hay muchas formas para recuperar datos. En futuros artículos intentaré tratar otros programas para ello. Aquí cito algunos de ellos por si quieres investigar algo:
- Herramientas forenses: TestDisk, PhotoRec, foremost, scalpel, etc.
- Herramientas para la gestión de particiones: te pueden ayudar en caso de que la tabla de particiones esté dañada, o de que haya problemas con el FS, algunas de depuración pueden contribuir también, etc. Por ejemplo: GParted, fdisk, fsck, etc.
- Otras: Ddrescue, SafeCopy, Redo Backup and Recovery, SystemRescue CD, Trinity Rescue Kit, etc.
Más adelante comentaré algo al respecto del directorio Trash (papelera), y «esos directorios raros» que se crean a veces llamados lost+found (desde donde se pueden recuperar datos) tan típicos de sistemas Unix-like y Unix.