$ cat important_file > /dev/null &
[1] 9711
$ rm important_file
$ killall -STOP cat
[1]+ Stopped cat important_file > /tmp/p
$ ls -l /proc/`pidof cat`/fd/
total 0
lrwx------ 1 vi vi 64 May 13 20:32 0 -> /dev/pts/29
l-wx------ 1 vi vi 64 May 13 20:32 1 -> /tmp/p
lrwx------ 1 vi vi 64 May 13 20:32 2 -> /dev/pts/29
lr-x------ 1 vi vi 64 May 13 20:32 3 -> /home/vi/important_file (deleted)
Como recuperar isso important_file
?
Eu tentei algo como
injcode -m dup2 -ofd=3 -ofilename=/tmp/recovered_file -oflags=O_CREAT $PID_OF_CAT
mas não faz nada.
linux
file-recovery
Vi.
fonte
fonte
readlink /proc/13381/fd/3
-> "/ home / vi / important_file (excluído)" e,/home/vi/important_file\ \(deleted\)
obviamente, não existe.... melhor do que copiar em um determinado momento (e reunir apenas o instantâneo do conteúdo do arquivo) é "
tail -f
" esse arquivo em um novo arquivo:(graças aos programadores cautelosos da cauda, que funcionam até com saída binária).
Durante o tempo de execução,
tail -f
ele próprio mantém o arquivo aberto, impedindo com segurança que ele seja removido do disco quando o programa original terminar. Portanto, não paretail -f
imediatamente após o término do programa original - verifique/new/path/to/file
primeiro se é o que você deseja. Se não for (ou não for satisfatório por qualquer outro motivo), você poderá copiar o arquivo original novamente, mas desta vez depois de concluir a gravação no "Programa" e notail -f
diretório / proc / PIDoftail / fd / diretório.fonte
Invalid cross-device link
.Use lsof para encontrar o número do inode e debugfs para recriar um link físico para ele. Por exemplo:
Antes de você reclamar, falsifiquei a transcrição acima, pois não tenho um arquivo excluído no momento ;-)
Eu uso
mi
para redefinir o tempo de exclusão e a contagem de links para valores sensíveis (0 e 1 respectivamente), mas não funciona corretamente - você pode ver que a contagem de links permanece em zerols
. Eu acho que o kernel pode estar armazenando em cache os dados do inode. Você provavelmente deve fsck na primeira oportunidade depois de usar o debugfs, para estar do lado seguro.Na minha experiência, você deve criar o link usando um nome de arquivo temporário e renomear para o nome apropriado. Vinculá-lo diretamente ao nome do arquivo original parece causar corrupção no diretório. YMMV!
fonte
Você pode apenas
cp
o arquivo, ou seja:Obviamente, se o arquivo ainda estiver sendo modificado, você terá problemas com essa abordagem.
fonte