Иногда понимаешь, что одна из последних команд rm была лишней. Конечно, лучшее средство восстановления случайно удаленных файлов — это бэкапы. Но бывает так, что резервная копия была создана раньше, чем файл появился в системе или же с момента создания бэкапа в файл было внесено много изменений: утром менеджер загрузил фотографии, а администратор не разобрался и удалил их. Тогда вариант из резервной копии будет неактуальным. Бэкап как бы есть, но по факту — его нет. На помощь приходит восстановление удаленных файлов — и чем раньше ты приступишь к этому процессу, тем выше вероятность успеха.
Для восстановления удаленных файлов существует много разных инструментов. Выбор инструмента зависит от типа файловой системы и типа самого файла. Так, при использовании файловой системы ext3/ext4 неплохие результаты показывает утилита extundelete. Если нужно восстановить изображение (JPEG/PNG/GIF и др.) лучшим выбором будет foremost. Универсальный солдат — утилита scalpel, с нее и начнем.
Используется для восстановления удаленных файлов с использованием базы данных заголовков. Перед запуском scalpel в ее конфигурационном файле нужно указать тип и заголовки файлов, которые необходимо восстановить. В конфигурационном файле по умолчанию уже «прописаны» заголовки самых популярных типов файлов, админу остается только раскомментировать соответствующие строки. Конечно, для восстановления экзотических форматов есть возможность указать собственные заголовки.
Посмотрим, как работает scalpel на практике. Установим утилиту:
sudo apt install scalpel
Открываем конфигурационный файл (/etc/scalpel/scalpel.conf или /etc/scalpel.conf). В нем уже описаны различные типы файлов. Перед запуском утилиты необходимо раскомментировать строки, соответствующие типам восстанавливаемых файлов. Например, для восстановления GIF и
# GIF and JPG files (very common) gif 5000000 \x47\x49\x46\x38\x37\x61 \x00\x3b gif 5000000 \x47\x49\x46\x38\x39\x61 \x00\x3b 200000000 \xff\xd8\xff\xe0\x00\x10 xff\xd9
Теперь запустим scalpel:
sudo scalpel /dev/sda1 -o recover
Здесь /dev/sda1 — это имя устройства, на котором производится поиск удаленных файлов, а опция -o задает название папки, в которую будут помещены восстановленные файлы. Нужно отметить, что вместо имени устройства можно указать образ этого устройства. Суть в следующем: если файловая система активно используется, то чем больше времени прошло с момента удаления до попытки восстановления, тем меньше шансы. Поэтому можно «заморозить» время, создав образ устройства (командой dd) и с него уже пытаться восстановить файлы. Так можно сократить вероятность того, что область, где был записан файл, будет перезаписана другим файлом — тогда уже восстановить ничего не получится.
Вывод утилиты:
Scalpel version 1.60 Written by Golden G. Richard III, based on Foremost 0.69. Opening target «/dev/sda1» Image file pass 1/2. /dev/sda1: 9.1% |***** | 9.9 GB 39:16 ETA
Осталось только дождаться восстановления.
Утилита scalpel — это форк foremost. Ее конек — скорость восстановления. В то же время foremost позволяет восстановить файлы более качественно, особенно это касается изображений.
Команда установки foremost:
sudo apt install foremost
Далее попытаемся восстановить удаленные изображения:
sudo foremost -t jpg,gif,png,bmp -i /dev/sda1 -o ~/recover
Здесь все, как и прежде: восстанавливаем с /dev/sda1, а результат помещаем в каталог recover. О дополнительных параметрах утилиты можно прочитать в справочной системе (man foremost).