Linux файл удалил восстановление

Есть ли способ создать файл в Linux, который ссылается на определенный iNode? Возьмем такой сценарий: существует файл, который находится в процессе записи (возможно, журнал), и конкретный файл удален, но ссылка в каталоге / каталоге по-прежнему указывает на него. В этом случае нам нужна не чистая его копия, а жесткая ссылка на нее, чтобы у нас могли быть будущие модификации и самые последние модификации до закрытия процесса и его удаления системой.

Если у нас есть номер iNode, есть ли способ достичь этой цели?

3 ответа

Поскольку не существует Syscall, в котором задействован iNode, потому что это концепция extX fs, и она не является хорошей практикой для создания печной трубы, а для создания цепочки ответственности (как предполагает MEL), ответа на этот вопрос НЕТ. потому что на уровне VFS мы обрабатываем путь к файлам и имена, а не другие внутренние представления.

НО для достижения цели отслеживания самой последней модификации мы можем использовать непрерывный мониторинг и дублирование с помощью tail:

tail -c+1 -f --pid=PID /proc/PID/fd/FD > /path/to/the/copy

где PID - это идентификатор процесса, в котором удаленный файл все еще открыт, а FD - номер дескриптора файла. С -f tail откройте и удерживайте файл для отображения дальнейших изменений, с -c+1 начинайте с "tail" с первого байта и с --pid = PID tail сообщается о выходе при выходе из pid.

Вы можете использовать lsof для восстановления удаленных файлов (иногда)...

> lsof | grep testing.txt
less    4607    juliet  4r  REG 254,4   21  
       8880214 /home/juliet/testing.txt (deleted)

Не забудьте прочитать оригинальную статью для получения полной информации, прежде чем пытаться сделать это, если только вы не Maveric, как я.

> ls -l /proc/4607/fd/4
lr-x------ 1 juliet juliet 64 Apr  7 03:19 
         /proc/4607/fd/4 -> /home/juliet/testing.txt (deleted)
> cp /proc/4607/fd/4 testing.txt.bk

http://www.linuxplanet.com/linuxplanet/tips/6767/1

наслаждаться

На вопрос типа "могу ли я" уверенно ответить всегда отрицательно, всегда сложно. Но, насколько я вижу, ни /sys/, ни /proc не обеспечивают отображение дескрипторов открытых файлов, которые не являются символическими ссылками. Я предполагаю, что "НО ссылка в каталоге dir /proc все еще указывает на нее", вы имеете в виду, что /proc//fd/ records выглядит как символические ссылки? Я почти уверен, что вы не можете восстановить исходный файл.

Я возвращаюсь назад: как указал пользователь user2676075, копирование работает. Просто жесткая ссылка не...

ОБНОВЛЕНИЕ: Если вы думаете об этом, это вполне логично.

  • /proc и / sys - это файловые системы, отличные от вашего жесткого диска. Таким образом, они не могут предоставить файл, такой как записи каталога, которые можно жестко связать с местом назначения на жестком диске.
  • Записи /proc/*/fd/ представляются символическими ссылками, но на самом деле они отличаются, иначе копирование не будет работать. Я думаю, что они притворяются символическими ссылками для предоставления значимой информации с помощью 'ln -l'.

  • Относительно (отсутствующей) возможности жесткой ссылки на некоторый inode (скажем, с некоторым системным вызовом): это не может быть частью ядра или VFS-интерфейса по следующим причинам:

    • Это нарушит целостность файловой системы. Файловая система не должна хранить дисковые блоки файлов, которые были полностью удалены, таким же образом, как файлы, которые сохраняются.

    • Иноды могут быть полностью виртуальным понятием, чтобы идентифицировать "слот, в котором хранится поток данных". Я предполагаю, что могут быть реализации, в которых возникла бы проблема с преобразованием слота, который не имеет обратной ссылки, на слот, на который ссылается имя в файловая система.

    Я допускаю, что дело против возможности такого системного вызова не является водонепроницаемым. Но, учитывая текущее состояние интерфейса VFS (который AFAIR не обеспечивает для такого вызова), для любой реализации файловой системы (включая, например, распределенные файловые системы) было бы тяжело обеспечить вызов, чтобы связать файл с каталог по индоду.

ATM Интересно, действительно ли для вызова fstat до и после удаления последней ссылки требуется вернуть ту же самую инодную информацию... t

Другие вопросы по тегам