Cómo recuperar archivos eliminados o de una unidad corrupta en GNU/Linux

Escrito por el .
blog-stack gnu-linux planeta-codigo planeta-linux seguridad software-libre
Comentarios

Muchos archivos y su contenido son recuperables aún después de eliminados y liberado su espacio ocupado del sistema de archivos. Herramientas como Foremost son capaces de recuperar el contenido de un archivo si no ha sido sobreescrito accediendo a bajo nivel a los datos de la unidad, ya esté corrupta y de algún error al montarla o funcione perfectamente. Pudiendo extraer una imagen de la unidad seremos capaces de recuperar gran cantidad de archivos motivo por el cual al deshacernos de una unidad de almacenamiento es recomendable hacer un borrado seguro para evitar que información personal o confidencial sea obtenida con cualquier propósito.

GNU
Linux

Hace un tiempo me ocurrió que una memoria USB por algún motivo no se montaba bien ni en un sistema Windows ni tampoco en un sistema Linux. El pendrive estaba formateado con el sistema de archivos NTFS y quizá por haberlo desmontado mal se corrompió.

Por suerte en GNU/Linux disponemos de cantidad de herramientas y programas que nos ayudan en prácticamente cualquier cosa. En este caso de una memoria que no se dejaba montar buscando algún enlace en la wiki de Arch Linux relacionado con la recuperación de datos encontré en poco tiempo el artículo sobre Foremost, siendo un programa que puede ayudarnos a recuperar al menos parte de los datos que tuviésemos guardados. Si la unidad no está dañada físicamente y podemos extraer una imagen de la misma Foremost puede acceder a bajo nivel a las estructuras de datos de la imagen de la unidad. Foremost puede trabajar directamente sobre la unidad dañada o con una imagen, esto último es lo recomendable para evitar corromper los datos y dañar más gravemente la unidad al usarla. Si podemos extraer una imagen de la unidad es buen síntoma de que la unidad no ha dejado de funcionar completamente y tal vez se trate solo de un error lógico en la unidad y no físico pudiendo tal vez recuperarla con un formateo.

El error en concreto al montarlo en mi sistema Arch Linux era el siguiente:

1
2
3
4
5
6
7
Error mounting /dev/sdb1 at /run/media/picodotdev/xxx: Command-line `mount -t "ntfs" -o "uhelper=udisks2,nodev,nosuid,uid=1000,gid=1000,dmask=0077,fmask=0177" "/dev/sdb1" "/run/media/picodotdev/xxx"' exited
with non-zero exit status 13: ntfs_mst_post_read_fixup_warn: magic: 0x5bc449c0  size: 4096   usa_ofs: 55304  usa_count: 8: Argumento inválido
Actual VCN (0x101010100830081) of index buffer is different from expected VCN (0x1).
Failed to mount '/dev/sdb1': Error de entrada/salida
NTFS is either inconsistent, or there is a hardware fault, or it's a SoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windows then reboot into Windows twice. The usage of the /f parameter is
very important! If the device is a SoftRAID/FakeRAID then first activate it and mount a different device under the /dev/mapper/ directory, (e.g./dev/mapper/nvidia_eahaabcc1). Please see the 'dmraid'
documentation for more details.

Podemos extraer una imagen de una unidad con el comando dd, el parámetro if será la unidad de entrada y el parámetro of la imagen que se creará en un archivo:

1
$ sudo dd if=/dev/sdb1 of=unidad.image

Una vez que disponemos de la imagen en un archivo en un sistema libre de fallos usaremos Foremost para que intente recuperar los archivos que no han sido completamente corrompidos por el error. Indicamos la imagen del archivo extraída con el parámetro -i y la carpeta donde dejará los archivos recuperados con el parámetro -o agrupados en directorios por tipo, con el parámetro -t indicamos los tipos de archivos que queremos recuperar de entre todos los que pueda (doc, docx, pdf, jpg, png, txt, …).

1
$ foremost -t all -i unidad.image -o archivos/

Si tenemos suerte con Foremost recuperaremos gran parte de ellos y evitaremos perderlos para siempre. En la wiki de Arch Linux hay una guía con consejos y explicaciones de como proceder en la recuperación de archivos.

Una vez que recuperé los archivos y viendo que pude extraer una imagen de la unidad probablemente en mi caso el error sería que se corrompió la unidad quizá por no extraerla de forma segura desde Windows. Por lo tanto la volví a formatear e hice algunas pruebas copiando varios archivos, se copiaron sin dar ningún error así que al final conseguí recuperar incluso la unidad.

Esto mismo es aplicable a una unidad que funcione correctamente, un archivo y su contenido es recuperable aún después de ser eliminado incluido de la papelera, con más probabilidad si la unidad no tiene muchas escrituras o una buena cantidad de espacio libre ya que por defecto únicamente se elimina de las estructuras del sistema de archivos y el contenido sigue estando presente simplemente no referenciado.

Para hacer irrecuperable el contenido de un archivo hay que hacer un borrado seguro de un archivo con el comando wipe o de una unidad con dd que consiste en sobreescribir el contenido del archivo con datos aleatorios, otra alternativa es cifrar el sistema de archivos. Es recomendable hacerlo cuando sustituyamos y nos deshagamos un disco duro o unidad de almacenamiento porque muchos de los archivos son recuperables incluido después de un formateo rápido de la unidad.

Te sorprenderá la cantidad de archivos que son recuperados por Foremost: documentos, imágenes, archivos de texto, …