Unix / Linux undelete / recupera arquivos apagados

114

Existe um comando para recuperar / recuperar arquivos apagados por rm ?

$ rm -rf /path/to/myfile

Como posso recuperar myfile ? Se existe essa ferramenta, como posso usá-la?

    
por pylover 21.06.2013 / 15:41

11 respostas

62

O link que alguém forneceu nos comentários é provavelmente sua melhor chance.

Linux debugfs Hack: arquivos Undelete

Esse write-up, embora parecendo um pouco intimidante, é realmente bastante simples de seguir. Em geral, os passos são os seguintes:

  1. Use o debugfs para visualizar um log de sistemas de arquivos

    $ debugfs -w /dev/mapper/wks01-root
    
  2. No prompt do debugfs

    debugfs: lsdel
    
  3. Exemplo de saída

    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. Execute o comando em debugfs

    debugfs: logdump -i <7536655>
    
  5. Determine arquivos 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. Com as informações de inode acima, execute os seguintes 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
    

Arquivos recuperados para recovered.file.001 .

Outras opções

Se o acima não for para você, usei ferramentas como photorec para recuperar arquivos no passado, mas ele é voltado apenas para arquivos de imagem. Eu escrevi sobre esse método extensivamente no meu blog neste artigo intitulado:

Como recuperar arquivos jpeg e mov corrompidos a partir do cartão SDD de uma câmera digital no Fedora / CentOS / RHEL .

    
por 21.06.2013 / 17:49
28

Com algumas chances, às vezes, posso recuperar arquivos excluídos com este script ou a próxima solução na resposta:

#!/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

Existe outro truque útil: se você conhece um padrão em seus arquivos deletados, digite alt + sys + resuo para reinicializar + remontar somente leitura, em seguida, com um live-cd, use grep para pesquisar no disco rígido:

grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover

edite /tmp/recover para manter apenas o (s) arquivo (s) antes.

Ei, se com filosofia unix tudo é arquivos, é hora de tirar proveito disso, não?

    
por 03.11.2013 / 20:16
14

O que funcionou para mim foi dado por arch (aplica-se apenas a arquivos de texto):

grep -a -C 200 -F 'Unique string in text file' /dev/sdXN

Demora um pouco, mas funcionou quando acidentalmente excluí um código-fonte que eu ainda não tinha enviado!

    
por 28.06.2017 / 13:12
7

Embora esta questão seja resolvida e tenha alguns anos, Quero mencionar o utilitário testdisk .

Como recuperar arquivos com o testdisk é explicado bem em este tutorial . Para recuperar arquivos, execute testdisk /dev/sdX e selecione seu tipo de tabela de partição. Depois disso, selecione [ Advanced ] Filesystem Utils , escolha sua partição e selecione [Undelete] . Agora você pode procurar e selecionar arquivos excluídos e copiá-los para outro local no seu sistema de arquivos.

    
por 02.08.2017 / 09:57
6

Eu tive o mesmo problema na semana passada e tentei muitos programas, como debugfs, photorec, ext3grep e extundelete. O ext3grep foi o melhor programa para recuperar arquivos. A sintaxe é muito fácil:

ext3grep image.img --restore-all

ou:

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 vídeo é um mini tutorial que pode ajudá-lo.

    
por 19.10.2015 / 14:35
6

Uma alternativa pode estar usando del em vez de rm para excluir:

link

del tem uma função undelete e funciona com qualquer sistema de arquivos.

Claro que não é uma solução se você já deletou seus arquivos com "take no prisoners" rm: -}

    
por 10.02.2016 / 15:08
5

conecte o drive através da interface externa

  1. monte
  2. umount /dev/{sd*}
  3. extundelete --restore-all /dev/{sd*}
  4. os resultados vão para a pasta inicial na unidade de inicialização
  5. pontos de bônus: escreva uma GUI para isso

Veja este link para mais informações: undelete a acabou de apagar o arquivo no ext4 com o extundelete .

    
por 15.10.2014 / 13:37
2

Ferramentas de recuperação - Linha de comando:

Ferramentas de recuperação - Gui:

Infos:

Na minha experiência pessoal recebo meus dados usando o "UFS Explorer" e o photorec

(1) = Não é open source, não é livre

(2) = Não é open source, grátis

(3) = Código aberto e livre

(4) = Tenha suporte ao ntfs

(5) = Possui recurso de estrutura de diretórios

    
por 10.06.2018 / 06:21
0

Quando você exclui um arquivo, a contagem de links na tabela de inode desse arquivo é diminuída em um. No Unix, quando a contagem de links cai para 0, os blocos de dados desse arquivo são marcados como livres e, normalmente, as referências a esses blocos de dados são perdidas. Acabei de descobrir pelo comentário do @ fedorqui que pode haver alguma maneira de acessar esses blocos, mas isso é aplicável apenas ao sistema de arquivos ext3.

Uma maneira de preservar os arquivos será escrever uma função que permitirá que você mova os arquivos para uma área de lixeira (digamos $HOME/.trash ) e recupere os arquivos necessários a partir daí. Esta função pode ser aliada para rm . Você pode agendar uma tarefa cron para excluir os arquivos que estão na área de lixeira por um determinado número de dias.

    
por 21.06.2013 / 16:46
0

Eu discordo que isso é impossível, apenas muito difícil, e eu nunca fiz isso do Linux:

Quando os arquivos são excluídos, eles não são realmente excluídos. O que acontece é que o espaço que eles estavam no disco rígido é redefinido, de modo que, se o computador tentar gravar dados lá, nada reclama. Geralmente, os dados em seu disco rígido que você pensou ter excluído podem estar lá quase um ano depois. Ou pelo menos, esta é a minha experiência em uma máquina Windows. Quer ele funcione ou não da linha de comando no Linux, não tenho certeza, mas você provavelmente precisará de um Live CD separado para abrir a partição assim, e também não há garantia de que os arquivos ainda estão lá. Eu fiz isso no windows xp várias vezes usando Zero Assumption Recovery. Tenho certeza de que há uma ferramenta semelhante ao redor, se você olhar o suficiente.

    
por 21.06.2013 / 16:51
0

Isso pode poupar o trabalho de alguns de vocês.
Se você já usou o gedit para editar esse arquivo, por padrão, uma cópia desse arquivo será criada. Por exemplo, vamos supor que apagamos acidentalmente 'myfile.txt'.
Na pasta que costumava conter o arquivo que você acabou de excluir, use esses comandos e recupere a cópia de lá:
ls | grep 'myfile.txt~'
Com um pouco de sorte você vai encontrá-lo e então:
cp 'myfile.txt~' 'myfile.txt'
Eu recuperei um arquivo agora usando este método. Boa sorte!

    
por 30.09.2014 / 21:08