Когда забыл сделать бэкап: восстановление удаленных файлов в Linux

21 сентября 2018

Иногда понимаешь, что одна из последних команд rm была лишней. Конечно, лучшее средство восстановления случайно удаленных файлов — это бэкапы. Но бывает так, что резервная копия была создана раньше, чем файл появился в системе или же с момента создания бэкапа в файл было внесено много изменений: утром менеджер загрузил фотографии, а администратор не разобрался и удалил их. Тогда вариант из резервной копии будет неактуальным. Бэкап как бы есть, но по факту — его нет. На помощь приходит восстановление удаленных файлов — и чем раньше ты приступишь к этому процессу, тем выше вероятность успеха.

Для восстановления удаленных файлов существует много разных инструментов. Выбор инструмента зависит от типа файловой системы и типа самого файла. Так, при использовании файловой системы ext3/ext4 неплохие результаты показывает утилита extundelete. Если нужно восстановить изображение (JPEG/PNG/GIF и др.) лучшим выбором будет foremost. Универсальный солдат — утилита scalpel, с нее и начнем.

Утилита scalpel

Используется для восстановления удаленных файлов с использованием базы данных заголовков. Перед запуском scalpel в ее конфигурационном файле нужно указать тип и заголовки файлов, которые необходимо восстановить. В конфигурационном файле по умолчанию уже «прописаны» заголовки самых популярных типов файлов, админу остается только раскомментировать соответствующие строки. Конечно, для восстановления экзотических форматов есть возможность указать собственные заголовки.
Посмотрим, как работает scalpel на практике. Установим утилиту:

sudo apt install scalpel

Открываем конфигурационный файл (/etc/scalpel/scalpel.conf или /etc/scalpel.conf). В нем уже описаны различные типы файлов. Перед запуском утилиты необходимо раскомментировать строки, соответствующие типам восстанавливаемых файлов. Например, для восстановления GIF и JPEG-файлов нужно привести соответствующую секцию конфига к следующему виду:

# GIF and JPG files (very common)

gif 5000000   \x47\x49\x46\x38\x37\x61   \x00\x3b

gif 5000000   \x47\x49