Como recuperar um arquivo removido no Linux?

65

Por acidente, usei rmum arquivo que não queria excluir. Existe uma maneira de recuperá-lo no Linux?

HaiYuan Zhang
fonte
@ Nav, rmé um comando UNIX / Linux "perigoso" (lido $ man rm). Use-o com extrema cautela . Com isso dito, é uma maneira rápida de excluir arquivos dos quais você tem certeza. Os ambientes modernos de desktop Linux e Unix fornecem uma solução de "Lixeira" , para que o usuário possa recuperar facilmente arquivos excluídos acidentalmente.
Jose Elera
11
algumas respostas mais atualizadas: unix.stackexchange.com/questions/122305/…
Ben Crowell
Não use "rm" se você deseja restaurar os arquivos no futuro .Utilizar utilidade "rm-lixo" em vez disso: github.com/nateshmbhat/rm-trash
Natesh bhat

Respostas:

51

A seguir, são etapas genéricas para recuperar arquivos de texto.

  1. Primeiro, use o comando wall para informar ao usuário que o sistema está inoperante em um único modo de usuário:

    # wall
    System is going down to .... please save your work.
    

    Pressione CTRL + D para enviar mensagem.

  2. Em seguida, use o comando init 1 para levar o sistema para um modo de usuário único:

    # init 1
    
  3. Usando grep (maneira tradicional do UNIX) para recuperar arquivos

    Use a seguinte sintaxe grep:

    grep -b 'search-text' /dev/partition > file.txt
    

    OU

    grep -a -B[size before] -A[size after] 'text' /dev/[your_partition] > file.txt
    

    Onde,

    -i : Ignore case distinctions in both the PATTERN and the input files i.e. match both uppercase and lowercase character.
    -a : Process a binary file as if it were text
    -B Print number lines/size of leading context before matching lines.
    -A: Print number lines/size of trailing context after matching lines.
    

    Para recuperar o arquivo de texto começando com a palavra "nixCraft" em / dev / sda1, tente o seguinte comando:

    # grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt
    
  4. Em seguida, use vi para ver o arquivo.txt.

    Este método é Útil apenas se o arquivo excluído for um arquivo de texto. Se você estiver usando o sistema de arquivos ext2, tente o comando recuperar.

Encontrado em http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html

Gabriel L. Oliveira
fonte
16
Digno de nota que você não pode fazer isso do modo de usuário REMOTA único desliga networking
Quinma
11
Este método faz maravilhas para arquivos de texto, obrigado! O que eu gosto sobre isso é que ele não depende do diário do sistema de arquivos (como extundelete), mas na verdade verifica os bytes brutos de toda a unidade. Se este comando não encontrar o seu arquivo, nada será encontrado.
Benjamin B.
11
@ Quinma, esse método pode funcionar remotamente com apenas pequenas modificações ... Em vez de executar init 1, mate manualmente todos os daemons do sistema, exceto sshd. Também acho que, neste ponto, você deve remontar todos os sistemas de arquivos RO e salvar em tmpfs (assumindo que seus arquivos temporários cabem no RAM) para evitar sobrescrever os arquivos com os dados temporários. Obviamente, você precisará copiá-lo em outro lugar mais tarde, em um servidor remoto ou de volta aos sistemas de arquivos locais após remontá-los RW.
Thomas Guyot-Sionnest 19/10/2015
qual é sua partição ??? Eu tenho o erro: / dev / sda1: Não existe esse arquivo ou diretório
coolcool1994 30/10
11
@ Qback, eu realmente não sei. Como afirmado, apenas segui o passo a passo. Mas o init 1 é destinado a tarefas administrativas, e talvez elimine o processo não relacionado a esse cenário de nível de execução. Isso pode ajudar a impedir que o disco rígido seja usado, substituindo o arquivo que você está tentando recuperar.
Gabriel L. Oliveira
13
  • Se for muito, muito importante, pegue o disco do computador e contrate uma empresa para fazer isso por você.
  • Se isso for muito importante, monte o disco como somente leitura, copie a partição inteira para um arquivo usando dde tente encontrar o arquivo dentro dele (usando grepou um editor).

Edit: às vezes ddrescuefunciona melhor do que dd.

Sjoerd
fonte
11
"tente encontrar o arquivo dentro dele" Estou confuso, como alguém poderia razoavelmente abrir um arquivo de mais de 15 GB e pesquisar ou enviar esta fera para grep? E o que você faria quando encontrasse o texto? Como está essa recuperação?
TheLQ
11
A primeira coisa a fazer é tentar algumas ferramentas comuns antes de gastar muito dinheiro para obter um resultado incerto. BTW, grep não ajudará, photorec ou ext3grep.
wazoox
8

O Testdisk possui uma opção de exclusão que deve funcionar com o Linux.

uma explicação passo a passo para o Linux . Observe que ele funciona para ext2 , ext3 e ext4 .

James T
fonte
11
extundelete também é útil se a partição for ext3 / 4. No entanto, a primeira coisa a fazer é talvez desmontar a partição.
billc.cn
5
  • A única resposta correta é: restaure seu arquivo do backup. Todo mundo deve ter um backup. Para arquivos realmente importantes, você deve ter dois backups. Você não? Bem, que pena, aqui está uma lição aprendida (desculpe por parecer duro, mas eu estou no armazenamento de dados e as pessoas não fazem backup até perderem alguns dados importantes, isso é um fato dado. Então, sim, você parece estúpido, mas assim como quase todo mundo).

  • OK, você não tem backup. você deve parar de usar o sistema de arquivos que continha o arquivo AGORA . Qualquer atividade de gravação pode definitivamente otimizar os dados do arquivo que podem (somente podem ) permanecer no disco.

  • se você cometeu o erro trágico ao usar apenas uma partição como sistema de arquivos raiz e / home, isso significa que você deve inicializar a partir de outro dispositivo. AGORA .

  • Se o seu arquivo tiver algum formato comum (arquivo do Word, JPG, etc.), use o Photorec . O Photorec pode recuperar os formatos de arquivo mais comuns.

  • Você pode tentar o método "ext3 undelete" proposto anteriormente, mas precisa se sentir confortável com a linha de comando, entender o funcionamento interno básico do linux, etc.

  • Se o seu arquivo tiver algum formato especial, azar. Certa vez, escrevi um programa Perl para verificar alguns arquivos especiais em uma unidade e funcionou muito bem; mas você precisará conhecer alguma programação para fazer isso e também ficar à vontade com o linux.

wazoox
fonte
5

Eu fiz isso alguns anos atrás. Minha abordagem foi diretamente, sem tempo a perder, desmontar partições e depois

dd if=/dev/hda1 of=backup_image.ext3

para ter um arquivo de backup do estado exato da partição. Em seguida, você pode montar a partição novamente e continuar com os negócios normalmente, enquanto procura o arquivo excluído na sua imagem criada. A imagem provavelmente será MUITO grande, já que você precisa de todo o espaço "vazio"; portanto, pode ser um problema prático armazená-la.

Depois, era apenas para realizar pesquisas chatas após trechos de texto que eu esperava estar em algum lugar na sopa do conteúdo da partição. Por exemplo, para encontrar arquivos .tex, corri

grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles

que imprimiu um grande contexto em torno da frase "subseção" e salvou a saída em um arquivo a ser pesquisado manualmente. Imprimi um contexto tão amplo, pois demorou tanto tempo para pesquisar na imagem que prefiro não fazê-lo mais vezes do que o necessário.

Além disso, o comando stringsfoi útil para remover o lixo binário da saída, mas, se bem me lembro, também retirou todas as novas linhas, o que poderia ser um problema.

Para encontrar arquivos binários da mesma maneira, pode-se ter sucesso em encontrar um cabeçalho característico ou algo de um determinado arquivo, mas imagino que seja uma grande aventura.


Breves notas técnicas: existem dificuldades técnicas com a recuperação de disco e o Ext3 / 4. É uma coisa longa a explicar, mas brevemente (e inadequadamente): o Ext3 / 4 remove os "marcadores" que informam ao sistema operacional onde os arquivos estão localizados no disco quando você os exclui. Os arquivos não são limpos, mas ninguém sabe mais onde eles começam e terminam no disco e, às vezes, eles são fragmentados em vários lugares. Alguns outros sistemas de arquivos apenas definem o status dos arquivos como "excluídos", mas mantêm os dados do local. A remoção da exclusão não é mais difícil do que procurar por ponteiros de arquivo com esse sinalizador (eles ainda devem estar disponíveis se não houver muita atividade) e, em seguida, esperar que seu conteúdo não tenha sido substituído.

O que e melhor? Retórica, na minha opinião. O backup frequente é a resposta para todos esses problemas. Dados importantes sem um sistema de backup automatizado são um acidente esperando para acontecer, IMHO.


Obrigatória anedota pessoal: Eu estava indo para remover foo\ foo*a partir ~. eu escrevi

rm -r foo<Tab>*

, que, infelizmente, como fooaparentemente era um link simbólico e o único arquivo correspondente a isso, o shell transformado em

rm -r foo\ foo *

Apertei Enter e fiquei lá olhando para o comando, que deveria levar um segundo no máximo. Depois de um tempo mais longo, rmperguntei-me se eu queria "remover o arquivo protegido contra gravação 'alguma coisa'". Muito rapidamente senti os calafrios e, com suavidade e muito controle, pressionei Ctrl+c. ~ Metade do meu ~foi excluído, mas consegui recuperar tudo de valor através do grepping descrito acima e alguns backups mais ou menos atuais. Eu tinha pessoalmente alguns dados de medição muito valiosos (leia-se: demorados) e muito recentes em disco que foram perdidos, mas fiz backups quádruplos. Um desapareceu aqui, outro devido à interrupção do sistema na escola, outro estava corrompido e, a princípio, não consegui encontrar o quarto, já que por engano o coloquei na pasta errada :-D. Não tinharm -rficou preso em um arquivo protegido contra gravação, o quarto teria sido comido desde que a pasta foi montada via sshfs no meu ~. Sou muito mais cuidadoso com esse tipo de coisa desde então.

Daniel Andersson
fonte
5

Se for a rm padrão , espero que você tenha um backup. O procedimento para recuperar um arquivo excluído seria diferente para cada sistema de arquivos, se for possível. O Linux não possui uma "lixeira" incorporada; depois que você exclui um arquivo, tudo acaba.

Seja como for, desconecte o computador - o mais rápido possível, pois continuar executando o computador (mesmo para desligá-lo) causa gravações no disco e aumenta a chance de alguns blocos anteriormente ocupados pelo computador. O arquivo será substituído. Depois de fazer isso, coloque-o em outro computador, reinicie um CD ativo (certifique-se de não montar a unidade, a menos que você monte somente leitura) ou remova o disco rígido e leve-o a um especialista em recuperação de dados.

cHao
fonte
4

Defina suas expectativas baixas. Se alguma coisa foi escrita sobre os dados 'excluídos', você a perderá.

Fiz uma pequena recuperação e as melhores ferramentas que encontrei foram projetadas para determinados formatos. Por exemplo, 'photorec' foi ótimo quando eu queria recuperar dezenas de milhares de jpegs.

Recuva também me ajudou antes e agora pode ser sua melhor escolha. (É grátis, não se deixe enganar por pagar pelos anúncios deles)

No final do dia, se o que você perdeu for importante, desligue a unidade e pare de gravar nela. Use todos os softwares de recuperação que encontrar até recuperar os dados ou deixar de valer a pena. Se for realmente importante, envie para profissionais a um preço alto.

Se você já teve sorte com uma ferramenta antes, tente novamente, pois está familiarizado com ela. No final do dia, eles não devem ser gravados em disco e, portanto, você pode usar o software até encontrar um que funcione.

PriceChild
fonte
2

Aqui está um ótimo documento para você. Você encontrará uma série de dicas práticas lá.

BTW, existem dois grupos de pessoas:

  1. quem faz backups
  2. aqueles que farão backups

Parabéns, você acabou de se promover para o grupo 2. ;-)

Michał Šrajer
fonte
2

Se você tem um aplicativo aberto que está lendo o arquivo, como o VLC ou o LibreOffice, essa resposta fantástica de L & U.SO me ajudou a sair dessa bagunça. Aqui está um método alternativo para fazer o mesmo.

A idéia geral é encontrar o link /proc/PID/fd/DESCRIPTOR_NUMBERe copiá-lo de volta ao seu local original. Use ps aux | grep APP_NAMEpara encontrar o PID e, em seguida, ls -la /proc/PID/fd/para encontrar o DESCRIPTOR_NUMBER adequado.

dotancohen
fonte
1

A resposta "correta" é assumir que não existe um método para se recuperar com segurança e, em vez disso, restaurar a partir de backups ou de um sistema clonado ou reinstalar.

O TestDisk é uma ótima ferramenta, e existem outras maneiras de recuperar alguns dados da unidade física, dependendo do sistema de arquivos e da repetição da exclusão, mas o tempo e a dor envolvidos podem ser grandes demais, portanto, MANTENHA OS BACKUPS (e também teste que eles são válidos e restauráveis)!

Andy Lee Robinson
fonte
1

Se não for substituído por outros usuários, você terá sorte. Apaguei acidentalmente meu arquivo de origem cpp e usei uma ferramenta chamada principal , que me ajudou a restaurar restos de 60G cpp do disco. Finalmente, recuperei meu arquivo reunindo esses detritos, peça por peça. Eu acho que ele verifica certo padrão para o tipo de arquivo específico e percorre todos os inodes no disco para recuperar arquivos! Apenas tente!

Izana
fonte
0

Se acidentalmente você excluiu o arquivo do Linux, pode usar este comando:

find /root -name "search text" -type f  -exec mv {} "/home" \;

no lugar de search textvocê pode colocar o nome do arquivo e pode especificar o diretório onde deseja restaurar no lugar de /home.

santosh
fonte
2
Oi Santosh. Por favor, não adicione links enganosos às suas postagens. Foi removido.
ᔕᖺᘎᕊ
0

Você pode tentar esse script. Funciona muito bem e deve ser usado no lugar do rm e estou usando-o extensivamente agora.

https://github.com/nateshmbhat/safe-rm

Recursos :

  • destinado a ser usado no lugar de rm
  • lida com todos os argumentos que a rm pode receber
  • lida com as colisões de nomes de arquivos com os arquivos que já estão no lixo
  • lida com alguns problemas de permissão automaticamente
  • se rm for chamado de qualquer outro script ou indiretamente, o comando 'rm' do sistema será usado automaticamente
  • mostra as mensagens de erro apropriadas, como as que surgem no rm
Natesh bhat
fonte
-2

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

Juan
fonte