Recuperando arquivos deletados no Linux (ext3 e ext4)

Recuperar arquivos deletados acidentalmente ou por falhas procedimentais em partições formatadas com sistema de arquivos ext3 ou ext4 no GNU/Linux, não é uma tarefa fácil. Isso acontece porque para garantir que o ext3/4 possa retomar uma quebra de vínculo com segurança após um travamento do sistema, ele ‘zera’ os ponteiros de blocos do inode, enquanto o ext2 apenas marca esses blocos como não utilizados e marca o inode como excluído, deixando os ponteiros de bloco de lado.

De todo modo, existem alguns métodos e pacotes que podem ajudar um sysadmin desesperado nesta árdua tarefa. Dentre os “salvadores da pátria”, podemos destacar pelo menos duas ferramentas de código fonte livre e que são facilmente encontradas  em boa parte das distribuições Linux populares: Estamos falando do extundelete e o ext3grep. Neste post vou me concentrar no extundelete, mas você pode observar o uso do ext3grep neste outro artigo publicado no GDH.

Para recuperar aquele seu arquivo deletado, a primeira ação é fazer o download e instalar o pacote extundelete no seu sistema operacional. Como mencionei no parágrafo acima, boa parte das distros possuem o pacote pré-compilado, mas na pior das hipóteses você pode compilá-lo a partir do seu código-fonte. Neste ponto não vou entrar em detalhes, já que este tipo de instalação não tem nenhum segredo (é o tradicional ./configure + make + make install – para os que já instalaram qualquer software no Linux a partir do código fonte). Apenas atente-se que são dependências do extundelete os pacotes C++, e2fsprogs e e2fslibs (se você não os tiver, instale-os primeiro).

Com o extundelete instalado no seu Linux, vamos botar a mão na massa. Imagine que você tenha excluído acidentalmente o arquivo: /home/jack/matriz.ods – imaginou? Pois bem, a primeira coisa a fazer para tentarmos sua recuperação é saber em qual partição o seu diretório está montado no Linux. Numa instalação “genérica” é comum o /home estar em uma partição específica. Para descobrir isso, basta usar o seguinte comando:

# df -h

Supondo que o seu /home está montado no /dev/sdb1, basta rodar:

# extundelete –restore-file /dev/sdb1 /home/jack/matriz.ods

Note que o último parâmetro é exatamente o nome do arquivo deletado. Se tudo ocorrer bem, seu arquivo será recuperado em /home/jack/RECOVERED_FILES. Você pode obter uma relação completa dos parâmetros e opções do extundelete aqui.

Nota importante: Embora seja possível rodar o extundelete com a partição montada, é interessante desmontá-la afim de proteger os blocos de gravação. Também é recomendável rodar o comando logado no sistema operacional como root.

Para garantir que o ext3 possa retomar uma quebra de vínculo com segurança após um travamento do sistema, ele ‘zera’ os ponteiros de blocos do inode, enquanto o ext2 apenas marca esses blocos como não utilizados e marca o inode como excluído, deixando os ponteiros de bloco de lado. Sua única chance é usar o grep para encontrar partes dos arquivos excluídos e torcer.