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


Восстановление удаленных файлов в Linux возможно сразу после удалению из-за принципов работы операционной системы с файлами. Возможно сделать это за счет файловых дескрипторов, хранящих информацию о процессе и сами данные.



Файл в Linux является просто ссылкой на файловый дескриптор (inode). Одновременно файл можно открыть и работать с ним используя несколько утилит, это будут разные процессы, использующие один дескриптор.


Дескриптор при этом будет сохраняться пока все процессы не завершат свою работу и не освободят его. После этого операционная система сможет использовать блоки памяти для других задач.

Область диска перезапишется и восстановление, оставаясь по-прежнему возможным, будет представлять собой уже очень нетривиальную задачу.


echo 'Test' > ~/test.txt

less ~/test.txt



Фактически это означает, что мы продолжаем использовать файл, заходим другой консолью и удаляем его

rm ~/test.txt

ls ~ | grep test.txt

В выводе пусто, значит файла нет



Найдем номер процесса и дескриптора в котором хранится информация

lsof | grep less

less 24160 admin 4r REG 8,3 5 16260117 /home/admin/test.txt



Ценность здесь представляют вторая и четвертая колонки. Во второй PID, в четвертой — fd или файловый дескриптор

cat /proc/24160/fd/4 > ~/test2.txt

cat ~/test2.txt

Test


Пример приведен на скриншоте:

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


Содержимое файла возвращено к состоянию до удаления. Это самый простой пример того как проводится восстановление удаленных файлов в Linux.



Стоит отметить, что если less завершить, то файловый дескриптор он отпустит и настолько просто восстановить содержимое удаленных файлов не получится.


Читайте также про файловые дескрипторы и про управление процессами в Linux.

Сказать спасибо