desarrollo-web-br-bd.com

Unix / Linux recuperar / recuperar archivos borrados

¿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?

130
pylover

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:

  1. Use debugfs para ver un registro de sistemas de archivos

    $ debugfs -w /dev/mapper/wks01-root
    
  2. En el indicador de depuración

    debugfs: lsdel
    
  3. 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.
    
  4. Ejecute el comando en debugfs

    debugfs: logdump -i <7536655>
    
  5. 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.
    
  6. 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.

Otras opciones

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:

Cómo recuperar archivos corruptos jpeg y mov de la tarjeta SDD de una cámara digital en Fedora/CentOS/RHEL .

71
slm

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?

31
Gilles Quenot

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!

25
William Becker

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.

12
S. Wilhelm

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.

6
Juan

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": -}

6
Framstag

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

5
intika

conectar la unidad a través de la interfaz externa

  1. mount
  2. umount /dev/{sd*}
  3. extundelete --restore-all /dev/{sd*}
  4. los resultados van a la carpeta de inicio en la unidad de arranque
  5. puntos de bonificación: escriba una GUI para esto

Consulte este enlace para obtener más información: recuperar un archivo recién eliminado en ext4 con extundelete .

5
GRZ

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.

1
Roguebantha

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!

0
ntt

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.

0
unxnut