8

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

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

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

4 ответа4

11

Попробуйте использовать tail для постоянного копирования файла:

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

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

4

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

1

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

1

Это выполнит работу, но не через восстановление inode:

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .