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

Речь не пойдет о восстановлении обычных файлов, которые были удалены и теперь вдруг захотелось вернуть. Для этого есть свои инструменты.

Речь пойдет о файлах на которые ссылаются процессы в Linux и при удалении этих файлов ссылка на данные файлы из процесса никуда не исчезают. Например, есть процесс, который пишет свой лог в определенный файл и пока процесс активен, он будет писать свои данные в указанный файл, даже тогда когда файл лога будет удален. Или же другой пример, у вас идет потоковая запись аудио/видео и вы удалили файл. Как восстановить?

В Linux все названия файлов это ссылки на inode и один файл может иметь разные имена по разным путям. Это жесткие ссылки (hard link) на inode файла и soft link-и это ссылки на пути к hard link-ам.

Для наглядности возьмем задачу редактирования текста и во время редактирования удалим файл, не закрывая редактор. Восстановим инструментами системы.

Имеем текстовый файл myfile, редактируемый пользователем:

Слева сам файл, справа — его свойства.

Откроем на редактирование файл myfile и удалим сам файл (для приостановки процесса редактирования, не закрытия нажимаем Ctrl+Z:

Тут важно помнить, пока файл используется процессом, в нашем случае это редактор, то файл будет существовать, как только процесс умрет (kill), то и файл используемый этим процессом удалиться.

Найдем наш удаленный файл:

# lsof | grep myfile
less      2251         meno    4r      REG              253,0       326   16787125 /home/meno/myfile (deleted)

Первый столбец — это наш процесс, второй: pid процесса, третий: пользователь, четвертый: дескриптор (r = regular — обычный файл) восьмой: inode и последний — это путь к удаленному файлу.

Все сведения по процессам в Linux находятся в псевдо-файловой системе proc. Берем данные из предыдущей команды — это PID и дескриптор, и обращаемся к proc:

# ll /proc/2251/fd/4

Копируем наш удаленный файл в нужное место и проверяем, что информация идентична:

# cp /proc/2251/fd/4 myfile.copy
# cat myfile.copy

Выходим из редактора и смотрим наши файлы:

Для сравнения больших файлов можно использовать утилиту cmp.

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

Top