Tente usar o tail para copiar o arquivo continuamente:
tail -c +0 -f /proc/$pid/fd/$fd > filename
É claro que você terá que interromper o processo final manualmente (ou algum outro meio externo) quando o download terminar.
Eu tenho um arquivo que está sendo baixado (de uma fonte de difícil download), mas acidentalmente excluído do namespace do sistema de arquivos (/ tmp / blah), e gostaria de recuperar este arquivo.
Normalmente eu poderia apenas cp /proc/$PID/fd/$FD /tmp/blah
, mas nesse caso isso só me daria um instantâneo parcial, já que o arquivo ainda está sendo baixado. Além disso, quando o download for concluído, o processo de download (por exemplo, Chrome) fechará o FD.
Qualquer maneira de recuperar por inode / criar um link físico? Alguma outra solução? Se isso faz alguma diferença, estou principalmente preocupado com o ext4.
O projeto fdlink , que consiste em um módulo do kernel Linux e um aplicativo simples, pretende criar um novo link para um descritor de arquivo aberto . Eu não tentei isso.
Isso fará o trabalho, embora não recuperando o inode:
cp /proc/$PID/fd/$FD /tmp/blah
kill $PID
wget -c $URL -O /tmp/blah
Ou interrompa o download manualmente no Chrome se não quiser matar o navegador inteiro.
Se você quiser fazer um link físico sobre isso, você tem que usar a opção -s (veja man ln
), então no diretório fd execute ls -f
e descubra o número do arquivador (principalmente dois dígitos) e faça um ln NUMBER destination-file -s
Tags linux file-recovery