È possibile recuperare file rimossi da rm in Linux?


8

Nelle finestre archiviate eliminate puoi trovarle nel cestino se non hai premuto maiusc ,

Che dire dei file cancellati da rm -fin Linux


3
Windows lo chiama un Cestino da oltre 10 anni; e quando premi push, lo dice esplicitamente che sta spostando il file, non eliminandolo. rmscollega gli i-node (s) associati al file.
Chris S

Risposte:


13

La prima cosa da ricordare è: smettere di fare ulteriori attività di scrittura sul filesystem.

Quindi puoi provare alcuni strumenti che guarderanno il filesystem e tenteranno di localizzare i dati nel nodo cancellato. ' extundelete' è uno di questi strumenti su sourceforge.

extundelete è un'utilità che può recuperare file cancellati da una partizione ext3 o ext4 . Il file system ext3 è il file system più comune quando si utilizza Linux e ext4 è il suo successore. extundelete utilizza le informazioni memorizzate nel diario della partizione per tentare di recuperare un file che è stato eliminato dalla partizione. Non vi è alcuna garanzia che un determinato file sarà in grado di essere rimosso, quindi cerca sempre di avere un buon sistema di backup in atto, o almeno crearne uno dopo aver recuperato i tuoi file!


3
Non ci sono ulteriori scritture non può essere enfatizzato abbastanza. Non è integrato, quindi la "rimozione della cancellazione" è una questione di software di ripristino che riassembla i pezzi rimanenti prima che il filesystem sovrascriva i dati con scritture future.
Jeremy M,

2

Il primo passo sarebbe provare uno strumento di ripristino per il filesystem utilizzato per l'unità root.

Come accennato, ext3grep ed extundelete sono gli strumenti per la famiglia di file system ext.

Un'altra opzione a seconda del tipo di file che tenta di essere ripristinata è eseguire un intagliatore di file sull'unità. Questa operazione richiederà più tempo rispetto alle utilità di cui sopra.

La prima è un'opzione che ho usato per questo.

L'ultima opzione, se ti capita di conoscere una determinata stringa all'interno del file, è aprire l'unità in un editor esadecimale e cercare quella stringa.

A seconda della configurazione, il gestore delle finestre potrebbe fornire un cestino / cestino.

Alla fine della giornata, non c'è assolutamente alcun sostituto per avere una buona configurazione del sistema di backup. Trova quello che fa il suo lavoro senza toccarlo e impostalo. Ti risparmierai molto tempo, problemi e dolore a lungo termine.



0

Dato che undelete_ext3 sembra essere sparito, ecco un umile script bash, che mi ha aiutato a recuperare alcuni file che erano introvabili usando extundelete o debugfs . Soluzione condivisa.

È possibile preconfigurare un elenco di blocchi da consultare, vedere PRESEED. Richiede un numero di blocco per riga. Se non viene preimpostato, verranno cercati tutti i blocchi, impostazione predefinita.

  • Per ogni blocco vengono analizzati i primi byte per il contenuto di gzip.
  • In caso di esito positivo, il blocco in questione viene sottoposto a gunzip per cercare ulteriormente la stringa "ustar" al byte 257, eseguendo il demarking di un archivio tar.
  • Infine, i dati corrispondenti a un modello di file vengono estratti (stile del percorso del suffisso utilizzando l'opzione jolly di tar) e grepped per una determinata stringa. Vedi le variabili FILE_IN_TAR e FIT_CONTENT per questo.
  • Se trovato, salva il file.

Dato che probabilmente avrai un caso d'uso diverso, questo potrebbe darti un frame su cui basare il tuo filtro. Avrai sicuramente bisogno di modificare i valori quando cerchi altri tipi di file.

Invocazione di esempio: ./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
  • Smetti di usare il filesystem in questione dopo aver notato una cancellazione errata al più presto.
  • Questo script probabilmente fallirà su file di grandi dimensioni, non analizza le strutture di livello superiore del filesystem.
  • Fondamentalmente, i moderni filesystem non sono progettati per ripristinare in modo affidabile dati non collegati, quindi non ci sono garanzie sul recupero dei dati persi.
  • Operare su un'immagine di backup del filesystem.

Se il file è più grande di 12 blocchi, allora penso che probabilmente troverai blocchi di indiretta tra i blocchi di dati. In tal caso, semplicemente la lettura sequenziale produrrà immondizia. Ma se sei in grado di trovare i blocchi indiretti puoi recuperare il resto del file (a meno che non sia stato sovrascritto ovviamente).
Kasperd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.