¿Hay un comando para recuperar/recuperar archivos borrados por rm
?
$ rm -rf /path/to/myfile
¿Cómo puedo recuperar myfile
? Si existe tal herramienta, ¿cómo puedo usarla?
El enlace que alguien proporcionó en los comentarios es probablemente su mejor oportunidad.
Linux debugfs Hack: Recuperar archivos
Ese artículo, aunque parece un poco intimidante, es bastante sencillo de seguir. En general, los pasos son los siguientes:
Use debugfs para ver un registro de sistemas de archivos
$ debugfs -w /dev/mapper/wks01-root
En el indicador de depuración
debugfs: lsdel
Salida de muestra
Inode Owner Mode Size Blocks Time deleted
23601299 0 120777 3 1/ 1 Tue Mar 13 16:17:30 2012
7536655 0 120777 3 1/ 1 Tue May 1 06:21:22 2012
2 deleted inodes found.
Ejecute el comando en debugfs
debugfs: logdump -i <7536655>
Determinar archivos inode
...
...
....
output truncated
Fast_link_dest: bin
Blocks: (0+1): 7235938
FS block 7536642 logged at sequence 38402086, journal block 26711
(inode block for inode 7536655):
Inode: 7536655 Type: symlink Mode: 0777 Flags: 0x0 Generation: 3532221116
User: 0 Group: 0 Size: 3
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 0
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x4f9fc732 -- Tue May 1 06:21:22 2012
atime: 0x4f9fc730 -- Tue May 1 06:21:20 2012
mtime: 0x4f9fc72f -- Tue May 1 06:21:19 2012
dtime: 0x4f9fc732 -- Tue May 1 06:21:22 2012
Fast_link_dest: bin
Blocks: (0+1): 7235938
No magic number at block 28053: end of journal.
Con la información de inodo anterior, ejecute los siguientes comandos
# dd if=/dev/mapper/wks01-root of=recovered.file.001 bs=4096 count=1 skip=7235938
# file recovered.file.001
file: ASCII text, with very long lines
Los archivos se recuperaron en recovered.file.001
.
Si lo anterior no es para ti, he usado herramientas como photorec
para recuperar archivos en el pasado, pero está orientado solo a archivos de imagen. He escrito mucho sobre este método en mi blog en este artículo titulado:
Con un poco de posibilidades, a veces puedo recuperar archivos borrados con este script o la siguiente solución en la respuesta:
#!/bin/bash
if [[ ! $1 ]]; then
echo -e "Usage:\n\n\t$0 'file name'"
exit 1
fi
f=$(ls 2>/dev/null -l /proc/*/fd/* | fgrep "$1 (deleted" | awk '{print $9}')
if [[ $f ]]; then
echo "fd $f found..."
cp -v "$f" "$1"
else
echo >&2 "No fd found..."
exit 2
fi
Hay otro truco útil: si conoce un patrón en sus archivos eliminados, escriba alt+sys+resuo para reiniciar + volver a montar en solo lectura, luego con un live-cd, use grep
para buscar en el disco duro:
grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover
luego edite /tmp/recover
para conservar solo los archivos que tenía antes.
Oye, si con la filosofía de Unix todo son archivos, es hora de aprovechar esto, ¿no?
Lo que funcionó para mí fue dado por Arch (solo se aplica a archivos de texto):
grep -a -C 200 -F 'Unique string in text file' /dev/sdXN
dónde /dev/sdXN
es la partición que contiene el archivo perdido (verifique con mount
si no está seguro).
¡Toma un poco de tiempo, pero funcionó cuando accidentalmente eliminé un código fuente que aún no había confirmado!
Aunque esta pregunta está resuelta y tiene algunos años, quiero mencionar la utilidad testdisk .
Cómo recuperar archivos con testdisk se explica bien en este tutorial . Para recuperar archivos ejecute testdisk /dev/sdX
y seleccione su tipo de tabla de particiones. Después de esto, seleccione [ Advanced ] Filesystem Utils
, luego elija su partición y seleccione [Undelete]
. Ahora puede explorar y seleccionar archivos eliminados y copiarlos a otra ubicación en su sistema de archivos.
Tuve el mismo problema la semana pasada y probé muchos programas, como debugfs, photorec, ext3grep y extundelete. ext3grep fue el mejor programa para recuperar archivos. La sintaxis es muy fácil:
ext3grep image.img --restore-all
o:
ext3grep /dev/sda3 --restore-all --after `date -d '2015-01-01 00:00:00' '+%s'` --before `date -d '2015-01-02 00:00:00' '+%s'`
Este video es un mini tutorial que puede ayudarte.
Una alternativa puede ser usar del
en lugar de rm
para eliminar:
http://fex.belwue.de/fstools/del.html
del
tiene una función de recuperación y funciona con cualquier sistema de archivos.
Por supuesto, no es una solución si ya ha eliminado sus archivos con el rm "take no presos": -}
Herramientas de recuperación - Línea de comando:
Herramientas de recuperación - Gui:
Información:
En mi experiencia personal, recupero mis datos usando ufs-Explorer y photorec
(1) = No es de código abierto, no es gratis
(2) = No es de código abierto, gratis
(3) = Código abierto y gratuito
(4) = Tener soporte ntfs
(5) = Tiene función de estructura de directorio
conectar la unidad a través de la interfaz externa
umount /dev/{sd*}
extundelete --restore-all /dev/{sd*}
Consulte este enlace para obtener más información: recuperar un archivo recién eliminado en ext4 con extundelete .
No estoy de acuerdo con que sea imposible, simplemente muy, muy difícil, y tampoco lo he hecho desde Linux:
Cuando se eliminan los archivos, en realidad no se eliminan. Lo que sucede es que el espacio que tenían en el disco duro se reinicia, de modo que si la computadora intenta escribir datos allí, nada se queja. En general, los datos en su disco duro que pensó que eliminó pueden estar allí casi un año después. O al menos, esta es mi experiencia en una máquina con Windows. Si funciona o no de la misma manera desde una línea de comandos en Linux, no estoy seguro, pero es probable que necesite un Live CD separado para abrir la partición así, y tampoco hay garantía de que los archivos sigan allí. He hecho esto en Windows XP varias veces usando Zero Assumption Recovery. Estoy seguro de que hay una herramienta similar si te fijas lo suficiente.
Esto podría ahorrarles problemas a algunos de ustedes.
Si alguna vez usó gedit para editar ese archivo, por defecto se creará una copia de ese archivo.
Por ejemplo, supongamos que hemos eliminado accidentalmente 'myfile.txt'.
En la carpeta que solía contener el archivo que acaba de eliminar, use estos comandos y recuperará la copia desde allí:ls | grep 'myfile.txt~'
Con un poco de suerte lo encontrarás y luego:cp 'myfile.txt~' 'myfile.txt'
Acabo de recuperar un archivo con este método. ¡La mejor de las suertes!
Cuando elimina un archivo, el recuento de enlaces en la tabla de inodo para ese archivo disminuye en uno. En Unix, cuando el recuento de enlaces se reduce a 0, los bloques de datos para ese archivo se marcan como libres y, por lo general, se pierden referencias a esos bloques de datos. Acabo de descubrir por el comentario de @ fedorqui que puede haber alguna forma de acceder a esos bloques, pero eso solo es aplicable al sistema de archivos ext3.
Una forma de preservar los archivos será escribir una función que le permita mover los archivos a un área de basura (digamos $HOME/.trash
) y recupere los archivos necesarios desde allí. Esta función puede ser alias a rm
. Puede programar un trabajo cron para eliminar los archivos que han estado en el área de la papelera durante un cierto número de días.