Eu tenho um arquivo que foi excluído, mas ainda é mantido aberto por um programa. Encontrei o número do inode usando lsof. Como posso criar um link físico para esse inode?
14
Você não pode criar um link para ele, mas pode recuperá-lo. Vamos fazer um experimento:
$ echo blurfl >myfile.txt
$ tail -f myfile.txt &
$ rm myfile.txt
myfile.txt acabou, mas o inode é mantido vivo pelo comando tail. Para recuperar seu arquivo, primeiro encontre o PID do processo mantendo o inode:
$ ps auxw | grep tail
sunny 409 0.0 0.0 8532 824 pts/5 S 18:07 0:00 tail -f myfile.txt
O PID é 409. chdir para / proc / 409 / fd / e lista o conteúdo:
dr-x------ 2 sunny sunny 0 2009-07-24 18:07:18 .
dr-xr-xr-x 7 sunny sunny 0 2009-07-24 18:07:17 ..
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 0 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 1 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:18 2 -> /dev/pts/5
lr-x------ 1 sunny sunny 64 2009-07-24 18:07:33 3 -> /home/sunny/tmp/myfile.txt (deleted)
Os diretórios / proc / [PID] / fd / contêm links simbólicos para os descritores de arquivos de todos os arquivos que o processo usa. Nesse caso, o link simbólico "3" aponta para o arquivo excluído. Portanto, para restaurar o arquivo, copie o conteúdo para um novo arquivo:
$ cat 3 >/home/mydir/saved_file.txt
para obter o arquivo inteiro se ele ainda estiver gravado para tentar
tail -c +1 -f
from: /unix/25527/how-to-follow-a-la-tail-fa-binary-file-from-the-beginning
(btw: ln do fd on / proc não funciona, apenas tentei isso)
fonte
Não há uma maneira portátil de fazer isso no Linux. A melhor maneira seria provavelmente interromper toda a atividade no sistema de arquivos, interromper o programa que mantém o arquivo aberto, desmontar o sistema de arquivos e usar um depurador do sistema de arquivos para reconectá-lo a um diretório. Se você exportou o sistema de arquivos pelo NFS, pelo menos algumas versões do NFS podem permitir a leitura dos dados do arquivo no NFS.
fonte