¿Es posible recuperar archivos eliminados por rm en Linux?

8

En las ventanas presentadas eliminados se pueden encontrar en la basura si no lo hizo de prensa turno ,

¿Qué pasa con los archivos eliminados rm -fen Linux?

wamp
fuente
3
Windows lo ha llamado una Papelera de reciclaje durante más de 10 años; y cuando presiona eliminar, explícitamente dice que está moviendo el archivo, no eliminándolo. rmdesvincula los i-node (s) asociados con el archivo.
Chris S

Respuestas:

13

Lo primero que debe recordar es: deje de realizar más actividades de escritura en el sistema de archivos.

Luego puede probar algunas herramientas que verán el sistema de archivos y tratarán de ubicar los datos en el nodo eliminado. ' extundelete' es una de esas herramientas en sourceforge.

extundelete es una utilidad que puede recuperar archivos borrados de una partición ext3 o ext4 . El sistema de archivos ext3 es el sistema de archivos más común cuando se usa Linux, y ext4 es su sucesor. extundelete usa la información almacenada en el diario de la partición para intentar recuperar un archivo que ha sido eliminado de la partición. No hay garantía de que ningún archivo en particular pueda recuperarse, así que siempre trate de tener un buen sistema de respaldo, ¡o al menos ponga uno en su lugar después de recuperar sus archivos!

nik
fuente
3
No se pueden enfatizar lo suficiente las nuevas escrituras. No está integrado, por lo que "recuperar" es una cuestión de software de recuperación que vuelve a ensamblar las piezas restantes antes de que el sistema de archivos sobrescriba los datos con futuras escrituras.
Jeremy M
2

El primer paso sería probar una herramienta de recuperación para el sistema de archivos utilizado para su unidad raíz.

Como se mencionó, ext3grep y extundelete son las herramientas para la familia del sistema de archivos ext.

Otra opción que depende del tipo de archivo que se intenta recuperar es ejecutar un tallador de archivos en la unidad. Esto llevará más tiempo que las utilidades anteriores.

Lo principal es una opción que he usado para esto.

La opción final, si conoce una determinada cadena dentro del archivo, es abrir la unidad en un editor hexadecimal y buscar esa cadena.

Dependiendo de su configuración, su administrador de ventanas puede proporcionar una papelera de reciclaje / papelera.

Al final del día, no hay absolutamente ningún sustituto para tener una buena configuración del sistema de respaldo. Encuentre uno que haga su trabajo sin que lo toque y configúrelo. Se ahorrará mucho tiempo, problemas y dolor a la larga.

dpflug
fuente
0

Como undelete_ext3 parece haberse ido, aquí hay un humilde script de bash, que me ayudó a recuperar algunos archivos que no se podían obtener usando extundelete o debugfs . Solución compartida.

Puede preseleccionar una lista de bloques para ver, ver PRESEED. Se necesita un número de bloque por línea. Si no preselecciona, se buscarán todos los bloques, el valor predeterminado.

  • Para cada bloque, se analizan los primeros bytes para el contenido de gzip.
  • Si tiene éxito, el bloque en cuestión se comprime con una pistola para investigar más a fondo la cadena "ustar" en el byte 257, delimitando un archivo tar.
  • Finalmente, los datos que coinciden con un patrón de archivo se extraen (estilo de ruta de sufijo utilizando la opción comodín de tar) y se seleccionan para una determinada cadena. Vea las variables FILE_IN_TAR y FIT_CONTENT para esto.
  • Si lo encuentra, guarde el archivo.

Como probablemente tendrá un caso de uso diferente, esto podría proporcionarle un marco para basar su propio filtrado. Definitivamente necesitará ajustar los valores cuando busque otros tipos de archivos.

Invocación de muestra: ./ext-undelete-tar-gz.sh devimage found_files/

#!/bin/bash

# Brute force (linear) search specific tar files with
# certain contents on ext2 / ext3 / ext4 devices or files
#
# .. this is a last resort if extundelete and/or debugfs
#    did not find what you were looking for and limited
#    in that recoverable data must not have been stored
#    in fragments, i.e. non-sequentially

[[ -n "$2" ]] || {
    echo "usage: $0 [ device | imagefile ] "\
    "[ destdir_for_recovered_data ] "\
    "[ max_blocks_to_search (optional) ]" 
    exit 1
}

IMG=$1
DEST=$2
TMP=/dev/shm/cand.tmp
PRESEED=/dev/shm/cand.list

GZMAGIC=$(echo -e "\x1f\x8b\x08")
TARMAGIC=$(echo -e "ustar")

# max bytes to read into $TMP when a .tar.gz has been found
LEN=$((160*1024))

# pick $TMP for recovery based on matched strings..
FILE_IN_TAR="debian/rules" # ..in the tar index (suffix-search)
FIT_CONTENT="link-doc="    # ..within FILE_IN_TAR matches

# determine FS parameters
BLOCKS=$(tune2fs -l $IMG | grep -Po "(?<=^Block count:).*" | xargs)
    BS=$(tune2fs -l $IMG | grep -Po "(?<=^Block size:).*"  | xargs)
LEN=$((LEN/BS))

function _dd     { dd     $@ 2>/dev/null ; }
function _gunzip { gunzip $@ 2>/dev/null ; }
function _tar    { tar    $@ 2>/dev/null ; }

function inspect_block {
    bnum=$1

    if _dd if="$IMG" skip=$bnum bs=$BS count=1 | tee "$TMP" \
    | _dd bs=1 count=3 \
    | grep -qF "$GZMAGIC" 
    then
        if _gunzip -c "$TMP" \
        | _dd bs=1 count=5 skip=257 \
    | grep -qF "$TARMAGIC"
        then
            _dd if="$IMG" skip=$((bnum+1)) bs=$BS count=$((LEN-1)) >> "$TMP"
            echo -n found $bnum.tar.gz

            if _tar xzf "$TMP" -O --wildcards *"$FILE_IN_TAR" \
            | grep -qF "$FIT_CONTENT"
            then
                echo " ..picked, stripping trailing garbage:"
                exec 3>&1
                gunzip -c "$TMP" 2>&3 | gzip > $DEST/$bnum.tar.gz
                exec 3>&-
            else
                echo
            fi
        fi
    fi

    echo -ne "$((bnum+1)) / $BLOCKS done.\r" >&2
}


if [[ -f "$PRESEED" ]]
then
    while read bnum
    do inspect_block $bnum
    done <"$PRESEED"
else
    for (( bnum = 0 ; bnum < ${3:-$BLOCKS} ; bnum++ ))
    do inspect_block $bnum
    done
fi | gzip >"$PRESEED.log.gz"

echo
  • Deje de usar el sistema de archivos en cuestión después de notar una eliminación errónea lo antes posible.
  • Este script probablemente fallará en archivos grandes, no analiza las estructuras de nivel superior del sistema de archivos.
  • Básicamente, los sistemas de archivos modernos no están diseñados para recuperar de manera robusta los datos no vinculados, por lo que no hay garantías para recuperar los datos perdidos.
  • Operar en una imagen de respaldo del sistema de archivos.
Chef Meister
fuente
Si el archivo tiene más de 12 bloques, creo que es probable que encuentre bloques de indirección entre los bloques de datos. En ese caso, simplemente leer secuencialmente producirá salida de basura. Pero si puede encontrar los bloques de indirección, puede recuperar el resto del archivo (a menos que se haya sobrescrito, por supuesto).
Kasperd