Як відновити відкритий, але видалений файл в Linux, використовуючи ln замість cp?


8

У мене є файл, який завантажується (з джерела, яке важко повторно завантажити), але випадково видалений з простору імен файлової системи (/ tmp / blah), і я хотів би відновити цей файл.

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

Будь-який спосіб відновити inode / створити жорстке посилання? Будь-які інші рішення? Якщо це має якусь різницю, я в основному переймаюся ext4.

Відповіді:


11

Спробуйте використовувати хвіст для постійного копіювання файлу:

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

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


Працює як шарм. Я думаю, що це було набагато простіше, ніж я думав, адже все, що вам потрібно, це насправді лише інша програма, яка відкриває той самий файл, щоб зберегти його.
Ян

4

Проект fdlink , що складається з модуля ядра Linux та простого додатка, передбачає створення нового посилання на дескриптор відкритого файлу. Я не пробував цього.


1

Це дозволить виконати роботу, хоча не через відновлення inode:

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

Або просто вручну припиніть завантаження в Chrome, якщо ви не хочете знищити весь браузер.


Якби тільки проблема була такою простою, що я міг просто відновити / повторно завантажити! Я уточнив питання, щоб вказати, що не можу припустити, що можу повторно завантажити.
Ян

Здається, що проблеми :-) Здається, що будь-які хаки на основі inode занадто низькі та файлові системи.
Павло

Так, я також додав це до свого питання: якщо це має значення, я в основному переймаюся ext4.
Ян

1

Якщо ви хочете зробити важке посилання на це, вам слід скористатися опцією -s (див. man ln), Тому в каталозі fd запустіть ls -fі знайдіть список файлів (переважно двоцифрових чисел) і зробітьln NUMBER destination-file -s

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.