Как восстановить удалённый файл в Linux
Если PhotoRec не принесла результатов, то попробуйте другие инструменты.
Использование Scalpel
Scalpel – это программа с открытым исходным кодом для восстановления файлов используя базу данных заголовков, колонтитулов. Может восстанавливать с образов дисков или устройств с сырыми блоками, заголовки и колонтитулы устанавливаются пользователем. Программа используется не только для восстановления файлов, но и цифровых криминалистических исследований.
Установка Scalpel в Ubuntu, Linux Mint и Debian
Откройте терминал и скопируйте в него команду:
sudo apt-get install scalpel
После завершения установки scalpel, вам нужно найти файл scalpel.conf:
Обычно он размещается в /etc/scalpel/scalpel.conf или /etc/scalpel.conf. Откройте этот файл текстовым редактором, вы увидите, что все строки закомментированы (начинаются с #). Т.е. перед запуском scalpel вам нужно раскомментировать форматы файлов, которые вы хотите восстановить. Если раскомментировать весь файл, то потребуется много времени и появится много ложных результатов.
Допустим, я хочу восстановить только файлы .jpg, тогда я просто раскомментирую секцию jpg в конфигурационном файле scalpel.
# GIF and JPG files (very common) gif y 5000000 \x47\x49\x46\x38\x37\x61 \x00\x3b gif y 5000000 \x47\x49\x46\x38\x39\x61 \x00\x3b jpg y 200000000 \xff\xd8\xff\xe0\x00\x10 \xff\xd9
В командной строке вам нужно указать расположение удалённых файлов, которые вы пытаетесь восстановить (в данном примере это /dev/sda1):
sudo scalpel /dev/sda1-o output
Переключатель -o указывает на директорию вывода, где вы хотите сохранить ваши восстановленные файлы. Перед запуском программы убедитесь, что это директория является пустой, в противном случае вы получите ошибку. Вывод команды:
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: 6.1% |***** | 6.6 GB 39:16 ETA
Как вы видите, теперь scalpel выполняет свои действия, процесс восстановления удалённых файлов занимает время, которое зависит от объёма диска, который вы сканируете, и от скоросоти машины.
Использование extundelete
extundelete – утилита, позволяющая восстанавливать файлы, которые были удалены с разделов ext3/ext4.
Установить extundelete в Ubuntu, Linux Mint и Debian можно выполнив команду:
sudo apt-get install extundelete
Как только вы поняли, что удалили нужные файлы, надо отмонтировать раздел:
или перемонтировать в режиме «только чтение»
Так же следует создать резервную копию раздела прежде, чем начинать с ним работу по восстановлению файлов:
dd bs=4M if=/dev/ of=partition.backup
Зайдите в каталог, в который будут восстанавливаться удаленные данные. Он должен быть расположен на разделе отличном от того, на котором хранились восстанавливаемые данные:
Запустите extundelete, указав раздел, с которого будет происходить восстановление и файл, который необходимо восстановить:
sudo extundelete /dev/ —restore-file //
Можно так же восстанавливать содержимое каталогов:
sudo extundelete /dev/ —restore-directory /
Можно задать для восстановления рамки по времени удаления восстанавливаемых файлов, например так:
sudo extundelete —after /dev/ —restore-directory /
Дату необходимо указывать в UNIX-времени:
Некоторые файлы могут восстановиться под другим именем и расширением, хотя это не повлияет на содержимое файла.
Полный список параметров extundelete можно посмотреть на странице https://kali.tools/?p=2574
Использование foremost
foremost производит поиск и восстановление данных по сигнатурам. Хорошо подходит для восстановления фотографий и скриншотов с битых карт памяти и флешек.
Установка foremost в Ubuntu, Linux Mint и Debian:
sudo apt-get install foremost
Пример использования для восстановления изображений с диска /dev/sdb в каталог ~/out_dir:
sudo foremost -t jpg,gif,png,bmp -i /dev/sdb -o ~/out_dir
Полный список параметров foremost можно посмотреть на странице https://kali.tools/?p=2494
Удалён файл, открытый в программе
Если вы считаете, что удалённый файл ещё открыт в какой-то программе (например, фильм, который в настоящий момент проигрывается медиа плеером) и вы знаете имя файла, но для начала попробуйте эту процедуру:
lsof|grep "путь/до/файла" progname 5559 user 22r REG 8,5 1282410 1294349 /path/to/file
Запоминаем номер во втором столбце, это 5559, и номер в четвёртой колонке, это 22. Тогда команда восстановления:
cp /proc/5559/fd/22 restored.file
Если этот трюк не дал результата, то немедленно размонтируйте файловую систему с удалённым файлом или переведите её в режим только чтения.
Восстановление удаленных данных с помощью Scalpel
У каждого человека в жизни возникает такая ситуация как rm -rf на той папке, где этого не следовало делать. Бекапы это хорошо, но что делать если их нет? Для Linux систем существует утилита Scalpel, которая позволяет восстановить удалённые файлы по заданным паттернам, включая применение регулярных выражений.
Scalpel является форком проекта Foremost (с версии 0.69), начавший свою историю с 2005 года. Имеет свой github репозиторий и является более быстрым по скорости восстановления данных, а также эффективности чем Foremost. Говоря о разнице этих двух проектов можно сказать, что вышедшая после версии 0.69 Foremost имеет новые семантические техники восстановления данных. К примеру при восстановлении JPEG файлов используется заголовок этого файла для вычисления соответствующего тела изображения, когда Scalpel просто возьмет данные между заданными сигнатурами завершения и начала файла изображения. Таким образом можно сказать, что Foremost более точно может восстановить потерянные данные, когда Scalpel сделает это значительно быстрее.
Возможности которые предоставляет Scalpel:
- Восстановление независимо от файловой системы
- Выставление минимального и максимального размеров восстанавливаемого файла
- Использование многопоточности на многоядерных системах
- Асинхронные операции ввода/вывода дающие прирост при поиске по шаблону
- Использование TRE регулярных выражений для поиска по началу и концу файла
- Возможность восстановления из вложенных структур данных
- Для гиков доступна возможность использования GPU, что доступно только для Linux и требует предустановленного NVIDIA CUDA SDK и небольших модификаций исходного кода (поиск c применением регулярных выражений не работает с GPU)
Настройка приложения осуществляется в файле /etc/scalpel/scalpel.conf, где задаются соответствующие шаблоны поиска файлов. В нём можно увидеть уже готовые пресеты для поиска, к примеру по изображениям или doc файлам. Для восстановления потерянных данных следует раскомментировать соответствующие шаблоны и запустить приложение.
Если в файле отсутствует шаблон нужного файла, или к примеру вы ищете какого-то определенного формата xml то возникает необходимость создания своего шаблона, который описывается подобно правилам представленным ниже
Type | Case sensitive | Size range | Header | Footer | Search option |
---|---|---|---|---|---|
avi | y | 50000000 | RIFF. AVI | ||
doc | y | 10000000 | \xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00 | \xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00 | NEXT |
y | 500000 | %EOF\x0d | REVERSE | ||
y | 500000 | %EOF\x0a | REVERSE | ||
tex | y | 300:50000 | /%.\.tex/ | /%.\.tex\sEnd/ | |
php | y | 100000 | ?> | REVERSE |
Вкратце о колонках
- Type – имеет значение только в контексте программы, никакого отношения к восстанавливаемым файлам не имеет и будет использовано только при отображении лога и названии директорий в востановленных данных. Можно не указывать, в таком случае просто поставить NONE
- Case sensitive – учитывать ли регистр при поиске по заданному шаблону
- Size range – если указано просто число, то максимальный размер искомого файла, если через двоеточие то min:max размер файла
- Header, Footer – шаблоны поиска начала и конца файла. Допустимо использование TRE регулярных выражений. В качестве пробела используется символ \s, также можно использовать шестнадцатричное и восьмеричное представление искомых данных к примеру \x[0-f][0-f] или \153
- REVERSE — данный параметр следует использовать если в файле может использоваться несколько завершающих паттернов. К примеру PDF файлы или PHP, в которых может быть несколько скриптов обрамленных в
- NEXT — применяется когда нужно получить данные между началом и первым завершением файла, если конец файла не обнаружен тогда будет взята область размером указанным в поле size
- FORWARD_NEXT — является стандартным вариантом поведения и его указание не является обязательным. В этом варианте происходит строгая проверка шаблона, и если найдено начало файла и не найдено его завершение в заданном размере памяти то данный участок исключается из результатов поиска, если только не указана опция -b при запуске программы, тогда будет взят участок указанного размера с соответствующим началом, а в лог работы приложения [audit.txt] будет написано об обрезанном файле (колонка chop)
Где S новое обозначение wildcard символа в искомом выражении, или же воспользоваться шестнадцатричным представлением данного символа, что эквивалентно \0x3f или \063
А теперь практика
Предположим мы удалили файлы которые описываются шаблонами в таблице выше. Запишем эти шаблоны в конфигурационный файл (в качестве разделения колонок используется символ табуляции) /etc/scalpel/scalpel.conf и запустим восстановление (мной был заранее заготовлен образ с данными для восстановления)
root# scalpel MyDrive.img -o recover Written by Golden G. Richard III, based on Foremost 0.69. Opening target "/home/username/Documents/repair_files/test/MyDrive.img" Image file pass 1/2. MyDrive.img: 100.0% |*****************************************************| 500.0 MB 00:00 ETA Allocating work queues. Work queues allocation complete. Building carve lists. Carve lists built. Workload: avi with header "\x52\x49\x46\x46\x3f\x3f\x3f\x3f\x41\x56\x49" and footer "" --> 1 files doc with header "\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00" and footer "\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00" --> 2 files pdf with header "\x25\x50\x44\x46" and footer "\x25\x45\x4f\x46\x0d" --> 33 files pdf with header "\x25\x50\x44\x46" and footer "\x25\x45\x4f\x46\x0a" --> 19 files php with header "\x3c\x3f\x70\x68\x70" and footer "\x3f\x3e" --> 8 files Carving files from image. Image file pass 2/2. MyDrive.img: 100.0% *****************************************************| 500.0 MB 00:00 ETA Processing of image file complete. Cleaning up. Done. Scalpel is done, files carved = 63, elapsed = 6 seconds.
После завершения исполнения в результирующей папке мы обнаружим найденные файлы и audit.txt в котором будет краткая информация о найденных файлах подобно представленному ниже
Scalpel version 1.60 audit file Started at Wed Jan 7 12:50:52 2015 Command line: scalpel MyDrive.img -o recover Output directory: /home/username/Documents/repair_files/test/recover Configuration file: /etc/scalpel/scalpel.conf Opening target "/home/username/Documents/repair_files/test/MyDrive.img" The following files were carved: File Start Chop Length Extracted From 00000003.pdf 549888 NO 4162 MyDrive.img 00000055.php 1227776 NO 99954 MyDrive.img 00000001.doc 8916992 YES 10000000 MyDrive.img
Также обратим внимание на некоторые доступные опции
-p при использовании данной опции файлы не будут восстановлены, но будет создан файл аудита, в котором можно будет просмотреть какие файлы будут восстановлены
-q с данной опцией scalpel будет сканировать только начало каждого кластера заданного размера и искать соответствующее начало искомого файла
-v verbose режим
-o указать каталог куда будет положен результат восстановления данных
Всем удачного восстановления данных!