Речь не пойдет о восстановлении обычных файлов, которые были удалены и теперь вдруг захотелось вернуть. Для этого есть свои инструменты.
Речь пойдет о файлах на которые ссылаются процессы в 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.
Получается, если случайно удалили лог важного сервиса, то можно таким образом восстановить данные. После перезапустить процесс и файл лога начнет вестись с чистого файла.