É possível recuperar arquivos removidos pelo rm no Linux?

8

No Windows, o arquivo excluído pode ser encontrado na lixeira se você não pressionar shift ,

E os arquivos excluídos por rm -f no linux

    
por wamp 04.08.2010 / 04:15

4 respostas

13

A primeira coisa a lembrar é - pare de fazer qualquer outra atividade de gravação no sistema de arquivos.

Depois, você pode experimentar algumas ferramentas que examinarão o sistema de arquivos e tentarão localizar os dados no nó excluído. ' extundelete ' é uma dessas ferramentas no sourceforge.

extundelete is a utility that can recover deleted files from an ext3 or ext4 partition. The ext3 file system is the most common file system when using Linux, and ext4 is its successor. extundelete uses the information stored in the partition's journal to attempt to recover a file that has been deleted from the partition. There is no guarantee that any particular file will be able to be undeleted, so always try to have a good backup system in place, or at least put one in place after recovering your files!

    
por 04.08.2010 / 04:24
2

O primeiro passo seria tentar uma ferramenta undelete para o sistema de arquivos usado para o seu disco raiz.

Como mencionado, ext3grep e extundelete são as ferramentas para a família de sistemas de arquivos ext.

Outra opção, dependendo do tipo de arquivo que você deseja recuperar, é executar um escultor de arquivo na unidade. Isso levará mais tempo do que os utilitários acima.

Acima de tudo é uma opção que usei para isso.

A última opção, se você souber de uma certa string dentro do arquivo, é abrir a unidade em um editor hexadecimal e procurar por essa string.

Dependendo da sua configuração, o seu gerenciador de janelas pode fornecer uma lixeira / lixeira.

No final do dia, não há absolutamente nenhum substituto para ter uma boa configuração do sistema de backup. Encontre um que faça o seu trabalho sem você tocá-lo e configurá-lo. Você economizará muito tempo, problemas e dor a longo prazo.

    
por 04.08.2010 / 15:39
1

Vou experimentar este, ext3grep: link
Você precisa desmontar a partição antes de começar.

HTH

    
por 04.08.2010 / 10:27
0

Como o undelete_ext3 parece ter desaparecido, aqui está um modesto script, que me ajudou a recuperar alguns arquivos que não puderam ser obtidos usando extundelete ou debugfs . Solução compartilhada.

Você pode pré-visualizar uma lista de blocos para ver, veja PRESEED. Leva um número de bloco por linha. Se você não fizer o preseed, todos os blocos serão pesquisados, o padrão.

  • Para cada bloco, os primeiros bytes são pesquisados quanto ao conteúdo gzip.
  • Se for bem-sucedido, o bloco em questão será suspenso para pesquisar a string "ustar" no byte 257, marcando um arquivo tar.
  • Finalmente, os dados correspondentes a um padrão de arquivo são extraídos (estilo de caminho de sufixo usando a opção de caractere curinga do tar) e grep para uma determinada cadeia de caracteres. Veja as variáveis FILE_IN_TAR e FIT_CONTENT para isso.
  • Se encontrado, salve o arquivo.

Como você provavelmente terá um caso de uso diferente, isso pode fornecer um quadro para você basear sua própria filtragem. Você definitivamente precisará ajustar valores ao procurar outros tipos de arquivos.

Invocação de amostra: ./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
  • Pare de usar o sistema de arquivos em questão depois de perceber uma exclusão incorreta o mais rápido possível.
  • Este script provavelmente falhará em arquivos grandes, ele não analisará as estruturas de nível mais alto do sistema de arquivos.
  • Basicamente, os sistemas de arquivos modernos não são projetados para recuperar robustamente os dados desvinculados, portanto, não há garantias de recuperação de dados perdidos.
  • Opere em uma imagem de backup do sistema de arquivos.
por 18.12.2016 / 03:47

Tags