Как восстановить открытый, но удаленный файл на Linux с помощью ln вместо cp?

У меня есть файл, который загружается (из источника, который трудно повторно загрузить), но случайно удален из пространства имен файловой системы (/tmp/blah), и я хотел бы восстановить этот файл.

обычно я мог бы просто cp /proc/$PID/fd/$FD /tmp/blah, но в этом случае это даст мне только частичный снимок, так как файл все еще загружается. Кроме того, после завершения загрузки процесс загрузки (например, Chrome) закроет FD.

любой способ восстановления с помощью inode / create a жесткая связь? Другие решения? Если это имеет значение, я в основном связан с ext4.

4 ответа:

попробуйте использовать хвост, чтобы копировать файл постоянно:

tail -c +0 -f /proc/$pid/fd/$fd > filename

конечно, вам придется остановить хвостовой процесс вручную (или другими внешними средствами), когда загрузка будет завершена.

на fdlink

Это позволит выполнить работу, хотя и не путем восстановления inode:

cp /proc/$PID/fd/$FD /tmp/blah
kill $PID
wget -c $URL -O /tmp/blah

или просто вручную остановить загрузку в Chrome, Если вы не хотите, чтобы убить весь браузер.

Если вы хотите сделать жесткую ссылку на это, вы должны использовать опцию-s (см. man ln) Итак, в каталоге fd запустите ls -f и узнать номер файла (в основном двузначные числа) и сделать ln NUMBER destination-file -s