Se um programa em execução ainda tiver o arquivo excluído aberto, você poderá recuperar o arquivo por meio do descritor de arquivo aberto em /proc/[pid]/fd/[num]
. Para determinar se esse é o caso, você pode tentar o seguinte:
$ lsof | grep "/path/to/file"
Se o texto acima der saída do formulário:
progname 5383 user 22r REG 8,1 16791251 265368 /path/to/file
anote o PID na segunda coluna e o número do descritor de arquivo na quarta coluna. Usando essas informações, você pode recuperar o arquivo emitindo o comando:
$ cp /proc/5383/fd/22 /path/to/restored/file
Se você não conseguir encontrar o arquivo com lsof
, deverá remontar imediatamente o sistema de arquivos que hospedava o arquivo somente leitura:
$ mount -o remount,ro /dev/[partition]
ou desmontar completamente o sistema de arquivos:
$ umount /dev/[partition]
A razão para isso é que, assim que o arquivo tiver sido desvinculado e não houver links permanentes para o arquivo em questão, o sistema de arquivos subjacente poderá liberar os blocos alocados anteriormente para o arquivo excluído. blocos podem ser alocados para outro arquivo e seus conteúdos sobrescritos. Cessar quaisquer gravações adicionais no sistema de arquivos é, portanto, crítico no tempo, se qualquer recuperação for possível. Se o sistema de arquivos for o sistema de arquivos raiz ou não puder ser read-only ou desmontado por algum outro motivo, pode ser necessário encerrar o sistema (se possível) e continuar a recuperação de um ambiente ativo no qual você pode deixar o arquivo de destino sistema somente leitura.
Após as gravações no sistema de arquivos terem sido evitadas, não há pressa imediata para tentar a recuperação real. Para que seja seguro, talvez você queira fazer um backup do sistema de arquivos para executar a recuperação real em:
$ dd bs=4M if=/dev/[partition] of=/path/to/backup
As próximas etapas agora dependem do tipo de sistema de arquivos. Supondo uma instalação típica do Ubuntu, você provavelmente tem um sistema de arquivos ext3
ou ext4
. Nesse caso, você pode tentar a recuperação usando extundelete
. A recuperação pode ser tentada com segurança no backup ou no dispositivo bruto, desde que não esteja montada (ou seja montada somente leitura). NÃO TENTE A RECUPERAÇÃO DE UM SISTEMA DE ARQUIVO AO VIVO . Isso provavelmente trará o sistema de arquivos para um estado inconsistente.
extundelete
tentará restaurar quaisquer arquivos que encontrar em um subdiretório do diretório atual denominado RECOVERED_FILES
. O uso típico para restaurar todos os arquivos excluídos de um backup seria:
$ extundelete /path/to/backup --restore-all