Eu fiz isso há alguns anos atrás. Minha abordagem foi diretamente, sem tempo para perder, desmonte partição e, em seguida,
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 como de costume ao procurar o arquivo excluído na imagem criada. A imagem provavelmente será MUITO grande, já que você precisa de todo o espaço "vazio", por isso pode ser um problema prático armazená-la.
Em seguida, foi só para realizar buscas chatas após trechos de texto que eu esperava estar em algum lugar na sopa de conteúdo da partição. Por exemplo. para encontrar arquivos .tex, eu corri
grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles
que imprimiu um contexto grande em torno da frase "subseção" e salvou a saída em um arquivo para ser pesquisado manualmente. Imprimi um contexto tão grande, já que demorei tanto para pesquisar a imagem que preferia não fazer mais vezes do que o necessário.
Além disso, o comando strings
foi útil na remoção de lixo binário da saída, mas se bem me lembro, ele também removeu todas as novas linhas, o que pode ser um problema.
Para encontrar arquivos binários da mesma forma, pode-se ter sucesso em encontrar um cabeçalho característico ou algo de um determinado arquivo, mas imagino que seja uma grande aventura.
Notas técnicas breves: há dificuldades técnicas na recuperação de disco e no Ext3 / 4. É uma coisa longa para explicar, mas brevemente (e inadequadamente): Ext3 / 4 remove os "marcadores" que informam ao SO onde os arquivos estão localizados no disco quando você os exclui. Os arquivos não são apagados, mas ninguém sabe onde no disco eles começam e terminam, e às vezes eles estão fragmentados em vários lugares. Alguns outros sistemas de arquivos apenas definem os status dos arquivos como "excluídos", mas mantêm os dados de localização. Então undelete não é mais difícil do que olhar para ponteiros de arquivo com este sinalizador (eles ainda devem estar disponíveis se não ocorrer muita atividade), e então esperar que seu conteúdo não tenha sido sobrescrito.
O que é melhor? Retórica, na minha opinião. O backup frequente é a resposta para todos esses problemas. Dados importantes sem um sistema de backup automatizado é um acidente esperando para acontecer, IMHO.
Anedota pessoal obrigatória: eu removeria foo\ foo*
de ~
. Eu escrevi
rm -r foo<Tab>*
, que, infelizmente, como foo
aparentemente era um link simbólico e o único arquivo correspondendo a isso, o shell foi transformado em
rm -r foo\ foo *
Pressionei Enter e fiquei sentado olhando o comando, que deveria ter levado um segundo no máximo. Depois de um pouco mais de tempo rm
me perguntou se eu queria "remover o arquivo protegido contra gravação 'algo'". Rapidamente eu senti os calafrios e suavemente e muito controlado eu pressionei Ctrl+c
. ~ Metade do meu ~
foi excluída, mas consegui recuperar tudo de volta através do grepping descrito acima e de alguns backups mais ou menos atuais. Eu tinha alguns dados pessoais muito valiosos (leia-se: consome tempo) e muito recentes em disco perdido, mas fiz backups quádruplos. Um desapareceu aqui, outro devido a falha do sistema na escola, outro foi corrupto, e no começo eu não consegui encontrar o quarto, já que por engano coloquei na pasta errada :-D. Não tinha rm -r
ficou preso em um arquivo protegido contra gravação, o quarto teria sido comido desde que a pasta foi montada via sshfs no meu ~
. Eu sou muito mais cuidadosa com esse tipo de coisa desde então.