Ficheros: Cómo recuperar ficheros borrados accidentalmente

Base de Datos de Soporte (cg_rmfiles)
Referido a

SuSE Linux: Todas las versiones
Kernel: Versiones desde 2.0

Situación:

Ha borrado accidentalmente uno o más archivos en un sistema de ficheros ext2. No tiene copias de seguridad y querría recuperar el contenido de esos ficheros.

Escenario:

De manera similar a la de otros sistemas operativos, en el sistema de ficheros ext2 un archivo se 'borra' eliminando las referencias relevantes el el directorio del fichero. Después del borrado, los datos del fichero quedan libres para ser sobreescritos, pero aún son legibles en el disco duro. Los bloques de datos solo se borran cuando se crean nuevos archivos.

Además, después del borrado queda el llamado inodo que contiene la concatenación lógica de bloques y los permisos de acceso al completo. Aquí también se almacena el momento del borrado. El nombre del fichero es lo único que realmente se ha perdido después del borrado.

Para realizar un borrado 'seguro' en el sistema de ficheros ext2 cuando ejecuta un comando de borrado, puede activar una opción con el comando chattr. Así, el archivo borrado se sobreescribirá completamente con ceros por el kernel. Sería posible recuperar los datos borrados utilizando dispositivos especiales, pero nunca con el método aquí descrito.

Advertencia: el programa debugfs mencionado abajo le proporciona un acceso al sistema de ficheros orientado al sistema. Por lo tanto, puede ser muy peligroso para los datos restantes experimentar con los comandos descritos en la ayuda o en la página de manual si no tiene un buen conocimiento del sistema de ficheros. Le recomendamos que cree una partición de pruebas con fines experimentales.

Procedimiento

No ejecute ningún acceso de escritura más en el sistema de ficheros en el que quiere recuperar los archivos. Crear nuevos archivos puede ser especialmente nocivo para los datos que quiere recuperar. Si sólo utiliza una partición '/', apague el ordenador y vuelva a arrancar con el sistema de rescate. De otra forma, necesitará aplicar el comando umount a las particiones afectadas. En referencia al uso de 'mount' y 'umount' por favor, consulte el capítulo "Empezando con Linux" de su Manual Básico.

Supongamos que usted ha borrado accidentalmente los siguientes ficheros y le gustaría recuperarlos.

earth:/mnt/attempt # ls -la  protocole_2009.txt
-rw-r--r--   1 cg       suse         1050 Dec 29 13:31 protocole_2009.txt
earth:/mnt/attempt # rm protocole_2009.txt

Primero desmonte la partición afectada.

earth:~# umount /mnt

De acuerdo con el ejemplo anterior, la partición es /dev/sdc1, que está montada en el punto de montaje /mnt. En los ejemplos inferiores tiene que reemplazar 'nombre del dispositivo' con el nombre actual del dispositivo en su sistema. Escriba el comando debugfs nombre_del_dispositivo para iniciar el debugger del sistema de ficheros. Una vez iniciado, mostrará el prompt debugfs: . Aquí puede introducir comandos para acceder directamente al sistema de ficheros.

earth:/# debugfs /dev/sdc1
debugfs 1.17, 26-Oct-1999 for EXT2 FS 0.5b, 95/08/09
debugfs: lsdel
1 deleted inodes found.
 Inode  Owner  Mode    Size    Blocks    Time deleted
 25794    515 100644   1050    2/   2 Wed Dec 29 13:32:32 1999

El comando lsdel muestra una lista de los inodos borrados. Si ha borrado varios ficheros pero solo quiere recuperar uno de ellos, los permisos del fichero mode, el propietario Owner (aquí un identificador numérico del usuario), momento del borrado, y el tamaño size del fichero, le harán más fácil la localización del fichero que quiere recuperar. El número de inodo, 25794 en el ejemplo superior, es especialmente importante para el comando dump explicado más abajo.

El siguiente comando le permite recuperar los ficheros borrados como nuevos ficheros grabados en el directorio /tmp con los mismos permisos. ¡No olvide introducir las símbolos de ángulo izquierdo y derecho < y >!

debugfs:  dump -p <25794> /tmp/saved
debugfs:  quit
earth:/# ls -l /tmp/saved
-rw-r--r--   1 cg       suse         1050 Dec 29 13:31 /tmp/saved
Ahora puede volver a montar el sistema de ficheros y copiar los ficheros del directorio /tmp.

Hay otras formas de recuperar esos ficheros pero esta tiene la ventaja de que no necesita accesos de escritura en debugfs y no provoca un chequeo del sistema de ficheros después de haber recuperado los ficheros.


Palabras clave: FILE SYSTEM, DELETED, UNDELETE, DELETE, DELETION, EXT2

Temas: Documentación

SDB-cg_rmfiles, Copyright SuSE Linux AG, Nürnberg, Germany - Versión: 18. Jun 2002
SuSE Linux AG - : 24. Jun 2002 de ip (sdb_gen 1.40.0)