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

8

No Windows arquivado, os arquivos excluídos podem ser encontrados no lixo se você não pressionar Shift ,

E os arquivos excluídos rm -fno linux

wamp
fonte
3
O Windows a chama de Lixeira há mais de 10 anos; e quando você pressiona excluir, diz explicitamente que está movendo o arquivo, não o excluindo. rmDesvincula o (s) nó (s) associado (s) ao arquivo.
Chris S

Respostas:

13

A primeira coisa a lembrar é: pare de executar outras atividades de gravação no sistema de arquivos.

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

extundelete é um utilitário que pode recuperar arquivos excluídos de uma partição ext3 ou ext4 . O sistema de arquivos ext3 é o sistema de arquivos mais comum ao usar Linux, e o ext4 é seu sucessor. extundelete usa as informações armazenadas no diário da partição para tentar recuperar um arquivo que foi excluído da partição. Não há garantia de que um arquivo específico possa ser recuperado; portanto, tente sempre ter um bom sistema de backup ou, pelo menos, instalá-lo depois de recuperar seus arquivos!

nik
fonte
3
As gravações adicionais não podem ser enfatizadas o suficiente. Não está embutido, portanto, "cancelar a exclusão" é uma questão de o software de recuperação remontar as peças restantes antes que o sistema de arquivos substitua os dados com gravações futuras.
Jerry M
2

O primeiro passo seria tentar uma ferramenta de exclusão para o sistema de arquivos usado em sua unidade raiz.

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

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

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

A opção final, se você souber de uma determinada sequência de caracteres no arquivo, é abrir a unidade em um editor hexadecimal e procurar essa sequência.

Dependendo da configuração, o 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 seu trabalho sem você tocá-lo e configure-o. Você economizará muito tempo, problemas e dores a longo prazo.

dpflug
fonte
0

Como undelete_ext3 parece ter desaparecido, aqui está um humilde script bash, que me ajudou a recuperar alguns arquivos que eram impossíveis de obter usando extundelete ou debugfs . Solução compartilhada.

Você pode apresentar uma lista de blocos para visualizar, veja PRESEED. É preciso um número de bloco por linha. Se você não preseed, todos os blocos serão pesquisados, o padrão.

  • Para cada bloco, os primeiros bytes são analisados ​​quanto ao conteúdo do gzip.
  • Se for bem-sucedido, o bloco em questão será compactado para investigar mais a cadeia "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 do sufixo usando a opção curinga do tar) e recebidos por uma determinada sequência 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 poderá fornecer um quadro para basear sua própria filtragem. Definitivamente, você precisará ajustar os valores ao procurar outros tipos de arquivos.

Chamada 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.
  • Esse script provavelmente falhará em arquivos grandes; ele não analisa as estruturas de nível superior do sistema de arquivos.
  • Basicamente, os sistemas de arquivos modernos não são projetados para recuperar dados não vinculados de maneira robusta, portanto, não há garantias sobre a recuperação de dados perdidos.
  • Opere em uma imagem de backup do sistema de arquivos.
Chef Meister
fonte
Se o arquivo tiver mais de 12 blocos, acho que você encontrará blocos de indireção entre os blocos de dados. Nesse caso, simplesmente a leitura sequencial produzirá lixo. Mas se você conseguir encontrar os blocos de indireção, poderá recuperar o restante do arquivo (a menos que tenha sido substituído, é claro).
kasperd