Когда забыл сделать бэкап: восстановление удаленных файлов в 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\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) и с него уже пытаться восстановить файлы. Так можно сократить вероятность того, что область, где был записан файл, будет перезаписана другим файлом — тогда уже восстановить ничего не получится.

Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения

Вывод утилиты:

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

Осталось только дождаться восстановления.

Восстановление изображений с помощью foremost

Утилита 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).

Получить консультацию специалиста
Персональный ассистент
Cloud.Xelent