Когда произошел сбой резервного копирования и потеряны файлы - нужно принимать какие-то меры. Находите потерянные разделы и восстанавливайте потерянные файлы с помощью Scalpel.
Являясь системным администратором - часть вашей ответственности это помогать пользователям управлять своими данными. Одним из жизненно важных аспектов этой работы является обеспечение того, чтобы у вашей организации имелся хороший план резервного копирования и чтобы ваши пользователи либо сами регулярно создавали резервные копии, либо нет - потому что вы автоматизировали процесс.
Однако иногда случается худшее. Файл был удален по ошибке, файловая система повреждена или раздел потерян и, по любой из этих причин, в резервных копиях нет того, что вам нужно.
Если пользователь действительно удалил файл без резервного копирования, то становится понятно, что удаленный файл нужно восстанавливать. Однако, если таблица разделов зашифрована, то файлы вообще не теряются и вы можете рассмотреть возможность использования TestDisk для восстановления таблицы разделов или самого раздела.
Что произойдет, если восстановление вашего файла или раздела не будет возможным или будет выполнено только частично? Тогда пришло время Scalpel! Scalpel выполняет операции вырезания файлов на основе шаблонов описывающих уникальные типы файлов. Он ищет эти шаблоны на основе двоичных строк и регулярных выражений, а затем, соответствующим образом, извлекает файл.
Этот инструмент в настоящее время не поддерживается, но он очень надежен, компилируется и работает точно так, как и ожидается. Если вы используете Red Hat Enterprise Linux (RHEL)7, RHEL 8 или Fedora, то можете загрузить установщики RPM Scalpel вместе с зависимостью libtre с klaatu.fedorapeople.org .
В Ubuntu и ее дерривативах командой:
$ sudo apt install scalpel
Запускаем Scalpel
Scalpel поставляется в комплекте с достаточно большим списком типов файлов и их наиболее уникальными идентификаторами. Иногда, файл может быть идентифицирован предсказуемым текстом в его заголовке и окончании:
htm n 50000 <html </html>
А в других случаях необходимы загадочные шестнадцатеричные коды:
jpg y 200000000 \xff\xd8\xff\xe0\x00\x10 \xff\xd9
Scalpel ожидает, что вы отредактируете под себя /etc/scalpel.conf и в своей копии включите типы файлов, которые, предполагается, вам нужно будет восстанавливать, исключив типы файлов, которые не нужны. Например, если вы знаете, что у вас нет файлов .fws, то закомментируйте эту строку в файле. Это ускоряет процесс восстановления и уменьшает количество ложных срабатываний.
Формат файла конфигурации слева направо:
- Расширение файла.
- Являются ли верхний и нижний колонтитулы чувствительными к регистру (y или n).
- Минимальный и максимальный размер файла, который нужно обнаружить с помощью Scalpel.
- Стандартный заголовок, который идентифицирует начало файла.
- Стандартный нижний колонтитул, который идентифицирует окончание файла.
Поле нижнего колонтитула является необязательным. Если нижний колонтитул не указан, то Scalpel извлечет количество байтов указанное в качестве максимального значения типа файла.
Иногда обнаруживается, что восстанавливается только часть файла. Это означает, что вероятно потребуется увеличить максимальное значение границ файла, а затем выполнить повторное сканирование, чтобы также можно было восстановить оставшуюся часть файла
Определение новых типов файлов
Сначала сделайте копию файла конфигурации Scalpel. Если все пользователи создают одинаковые данные, то может понадобиться только один файл конфигурации для всей организации. Или, возможно, было бы лучше иметь один конфигурационный файл на отдел.
Чтобы добавить собственные типы файлов в конфигурацию Scalpel, начните исследования. Для текстовых файлов у вас, в идеале, должна быть какая-то предсказуемая структура, которая, в принципе, ожидаема. Например, файл XML, вероятно, начинается с <xml и заканчивается </ xml. Двоичные файлы аналогично предсказуемы. Используя команду hexdump, можно просмотреть заголовок типа файла, который нужно определить. Вот результаты для XCF, многоуровневого графического файла из GIMP по умолчанию:
$ head --bytes 8 example.xcf | hexdump --canonical
00000000 67 69 6d 70 20 78 63 66 |gimp xcf|
00000008
Этот вывод взят из системы Red Hat Enterprise Linux 8. В старых системах может потребоваться более старый синтаксис:
$ head --bytes 8 example.xcf | hexdump -C
00000000 67 69 6d 70 20 78 63 66 |gimp xcf|
00000008
Обычно вывод hexdump выводит в левом столбце адрес, а декодированные значения - в правом. В центральном столбце находятся шестнадцатеричные байты первых 8 байтов первой строки файла XCF.
Большинство двоичных файлов в /etc/scalpel.conf выглядят очень похоже на этот вывод, за исключением того, что этим значениям предшествует escape-последовательность \x, чтобы обозначить, что числа на самом деле являются шестнадцатеричными цифрами. Например, в файле конфигурации файл JPG выглядит следующим образом:
jpg y 200000000 \xff\xd8\xff\xe0\x00\x10 \xff\xd9
Сравните это значение с первыми 6 байтами hexdump (потому, что именно столько байтов содержится в определении JPG) с любым файлом JPG в системе:
$ head --bytes 6 example.jpg | | hexdump --canonical
00000000 ff d8 ff e0 00 10 |......|
00000006
Сравните нижний колонтитул с последними 2 байтами, чтобы сопоставить с выводом файла конфигурации:
$ tail --bytes -2 example.jpg | hexdump --canonical
00000000 ff d9 |..|
00000002
Если эти значения совпадают, то можете быть уверены, что все допустимые файлы JPG, вероятно, начинаются и заканчиваются в предсказуемой последовательности.
Примечание. Запись Ogg в файле scalpel.conf вводит в заблуждение, поскольку в ней отсутствует escape-последовательность \x. Если вам нужно восстановить файл Ogg, то исправьте это или замените его определение.
Начнем.
Теперь, чтобы получить одинаковый уровень достоверности для всех файлов, которые необходимо восстановить (например, XCF в предыдущем примере). Повторим еще раз: это общий рабочий процесс для определения типов двоичных файлов:
Получить шестнадцатеричные значения первых байтов типа файла можно с помощью команды head --bytes n.
Получить последние байты - с помощью команды tail --bytes -n.
Повторите этот процесс на нескольких других файлов одного типа, чтобы удостовериться в правильности шаблона, скорректировав, по мере необходимости, длину верхнего и нижнего колонтитула.
Введите значения верхнего и нижнего колонтитула в свою конфигурацию Scalpel, используя нотацию \x, чтобы идентифицировать каждый байт как шестнадцатеричный символ.
Следуйте этому алгоритму для каждого важного двоичного типа файла, который необходимо восстановить.
Если файл имеет открытый текст, предоставьте общий заголовок и нижний колонтитул, например #! /bin/sh для сценариев оболочки, # (пробел после # важен) для файлов разметки с заголовком уровня h1, <xml для файлов XML и т.д.
Когда вы будете готовы запустить Scalpel, создайте директорию, в который он разместит восстановленные файлы:
$ mkdir /run/media/seth/rescuer/scalped
Примечание. Не создавайте директорию на том же томе, который содержит потерянные данные.
Если восстанавливаемый диск еще не подключен, подключите его, а затем запустите Scalpel:
$ scalpel -c my-scalpel.conf \
-o /run/media/seth/rescuer/scalped \
/run/media/seth/victim
Также можно запустить Scalpel на образе диска:
$ scalpel -c my-scalpel.conf \
-o ~/scalped ~/victim.img
Когда Scalpel будет отработает смотрите файлы в созданной вами директории восстановления.
Итог - лучше делать резервные копии, чтобы вообще избегать восстановления файлов. Но, если случается худшее то, попробуйте Scalpel и аккуратно вырезайте.
Есть вопросы - задавайте....
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Комментарии 3