Восстановление данных. Практическое руководство
На основании вышесказанного можно сделать вывод о том, что ручное восстановление файлов с помощью lde крайне непроизводительно и трудоемко. Однако при этом данный подход является наиболее "прозрачным" и надежным. Что касается восстановления оригинальных имен файлов, то эту операцию лучше всего осуществлять с помощью отладчика файловой системы debugfs.
Восстановление с помощью отладчика файловой системы debugfsЗагружаем в отладчик редактируемый раздел или его копию. Сделать это можно с помощью команд
илиdebugfs /dev/sdb1
соответственно. Если мы планируем осуществлять запись на диск, необходимо указать ключdebugfs my_dump
:-w
илиdebugfs -w my_dump
.debugfs -w /dev/sdb1
Чтобы просмотреть список удаленных файлов, даем команду
(илиlsdel
, гдеlsdel <i>t_sec</i>
— количество секунд, истекших с момента удаления файла). На экране появится список удаленных файлов (разумеется, без имен). Файлы, удаленные более<i>t_sec</i>
секунд назад (если эта опция задана), в данный список не попадут.t_sec
Команда
выводит содержимое текстового файла на терминал. Здесьcat <<i>N</i>>
— номер inode, заключенный в угловые скобки. При выводе двоичных файлов разобрать смысл отображаемой на экране информации практически невозможно. Такие файлы должны сбрасываться в дамп командой<<i>N</i>>
, гдеdump <<i>N</i>> <i>new_filе_name</i>
— новое имя файла (с путем), под которым он будет записан в файловую систему, из-под которой был запущен отладчик debugfs. Файловая система восстанавливаемого раздела при этом остается неприкосновенной. Иными словами, команда должна даваться без ключа<i>new_file_name</i>
.--w
При желании можно восстановить файл непосредственно на самой восстанавливаемой файловой системе (что особенно удобно при восстановлении больших файлов). В этом нам поможет команда
, гдеundel <<i>N</i>> <i>undel_file_name</i>
— имя, которое будет присвоено файлу после восстановления.<i>undel_file_name</i>
Внимание!Выполняя такую операцию, помните, что команда
крайне агрессивна и деструктивна по своей природе. Она затирает первую свободную запись в таблице каталогов, делая восстановление оригинальных имен невозможным.undel
Команда
отображает содержимое inode в удобочитаемом виде, а командаstat <<i>N</i>>
позволяет редактировать их по своему усмотрению. Для ручного восстановления файла (откровенно говоря, этого не пожелаешь и врагу) мы должны установить счетчик ссылок (mi <<i>N</i>>
) на единицу, а время удаления (link count
), наоборот, сбросить в ноль. Затем отдать командуdeletion time
, помечающую данный inode как используемый, и для каждого из блоков файла выполнить командуseti <<i>N</i>>
, гдеsetb <i>X</i>
— номер блока.<i>X</i>
СоветПеречень блоков, занимаемых файлом, можно просмотреть с помощью команды
. В отличие от lde, она отображает не только непосредственные, но и косвенные блоки, что несравненно удобнее.stat
Остается только дать файлу имя, что осуществляется путем создания ссылки на каталог (
). Сделать это можно с помощью командыdirectory link
, гдеln <<i>N</i>> <i>undel_file_name</i>
— имя, которое будет дано файлу после восстановления (при необходимости имя восстанавливаемого файла указывается с полным путем).<i>undel_file_name</i>
Внимание!Создание ссылок на каталог необратимо затирает оригинальные имена удаленных файлов.
После присвоения имени восстановленному файлу полезно дать команду
, чтобы файловая система была автоматически проверена при следующей загрузке. Как вариант, можно выйти из отладчика и вручную запустить командуdirty
с ключомfsck
, форсирующим проверку.-f
Теперь перейдем к восстановлению оригинального имени. Рассмотрим простейший случай, когда каталог, содержащий удаленный файл (также называемый родительским каталогом), все еще цел. В этом случае следует дать команду
e и запомнить номер inode, возвращенный этой командой.stat dir_nam
Затем следует дать отладчику команду
, гдеdump <<i>INODE</i>> <i>dir_file</i>
— номер сообщенного индексного дескриптора, a<i>INODE</i>
— имя файла "родной" файловой системы, в которую будет записан дамп. Полученный дамп следует загрузить в шестнадцатеричный редактор и просмотреть его содержимое в "сыром" виде. Все имена будут там. При желании можно написать утилиту-фильтр, выводящую только удаленные имена. На Perl это не замет и десяти минут.<i>dir_file</i>
А как быть, если родительский каталог тоже удален? В этом случае и он будет помечен как удаленный! Выводим список удаленных индексных дескрипторов, выбираем из этого списка каталоги, формируем перечень принадлежащих им блоков и сохраняем дамп в файл, который затем следует просмотреть вручную или с помощью утилиты-фильтра. Как уже отмечалось, порядок расположения файлов в inode очень часто совпадает с порядком расположения файлов в каталоге, поэтому восстановление оригинальных имен в четырех случаях из пяти проходит на ура.
При тяжких разрушениях, когда восстанавливаемый файл приходится собирать по кусочкам, помогает команда
, выводящая на терминал все неиспользуемые блоки. Имеет смысл перенаправить вывод в файл, запустить hexedit и покопаться в этой куче хлама — это, по крайней мере, проще, чем искать по всему диску. На дисках, заполненных более, чем на три четверти, этот трюк сокращает массу времени.dump_unused
Таким образом, можно сделать вывод о том, что отладчик debugfs в значительной мере автоматизирует восстановление удаленных файлов, однако восстановить файл с разрушенным inode он не способен, и без lde в данном случае не обойтись.
Восстановление удаленных файлов с помощью утилиты R-StudioУтилита R-Studio for NTFS, вопреки своему названию, поддерживает не только NTFS, но и файловые системы ext2fs/ext3fs (рис. 8.7). С точки зрения обычных пользователей, это — хорошее средство для автоматического восстановления удаленных файлов. Утилита предоставляет интуитивно-понятный интерфейс, проста в управлении и в благоприятных ситуациях позволяет восстанавливать удаленные файлы несколькими щелчками мыши. К недостаткам R-Studio for NTFS можно отнести: