Восстановление данных
Это решение должно пригодиться: тем, кто по неосторожности избавился от важного файла, не позаботившись при этом о резервной копии; тем, кто вообще убежден в необратимости операции удаления файлов в Unix-подобных операционных системах; может быть, даже тем, кто (как автор этих строк) просто интересуется красивыми разработками и желает найти аналог средства, с помощью которого можно восстанавливать файлы в среде Windows, для ext2, стандартной файловой системы Linux.
На самом деле файловые данные в действительности не удаляются (но могут быть перезаписаны) и информация, размещаемая в inode (владелец, права доступа, размер, блоки данных, занимаемые файлом и т.д.), не модифицируется - теряется же, прежде всего, связь между именем файла и inode. Чтобы избежать перезаписи дисковых блоков или inodes, прежде занимаемых удаленным (при помощи rm или unlink) файлом, все операции ввода-вывода на соответствующем разделе должны быть немедленно прекращены, а сам раздел демонтирован. Возможен также вариант перемонтирования раздела в режиме "только для чтения".
Далее в ход пускается тяжелая артиллерия - отладчик файловой системы debugfs, предоставляющий возможность raw-доступа к файловой системе. По сути, debugfs является интерактивным интерфейсом к библиотеке ext2fs: он транслирует введенные команды в вызовы функций библиотеки. Для наших целей хватает трех его команд - lsdel, cat и dump:
- lsdel выводит список всех удаленных файлов, откуда необходимо почерпнуть информацию о требуемых релевантных удаленных inodes. Более или менее полезными полями вывода являются: Owner, Size, Mode и Time deleted;
- Cat используется для просмотра содержимого inode:
- наконец, команда dump несет ответственность за восстановление файла, с опцией -p она оставляет атрибуты файла без изменений, вызов ее таков:
Для автоматизации и облегчения процесса восстановления данных служит утилита, созданная Томом Пиком (Tom Pycke) - recover. Ее работа заключается в поиске и индексировании всех inodes на жестком диске, помеченных как удаленные, с помощью все того же debugfs. Затем пользователю предлагается ответить на некоторые вопросы, связанные с удаленным файлом, как то: название файла-устройства накопителя на жестких дисках, примерные дата и время удаления, приблизительный размер, UID, текстовая строка из файла. Если recover находит подходящие inodes, он запрашивает имя каталога, в который и будут помещены восстановленные файлы.
Переходим к идентификации файлов. Поскольку имя файла не подлежит восстановлению - это факт, то можно попробовать определится хотя бы с типом. Сначала в ход пускается стандартная Unix-утилита file, с помощью которой не составит особого труда опознать файл с исходным текстом программы, написанной на каком-нибудь языке программирования, media-файл, почтовый файл, каталог и т.п. Сложности, однако, возникают с двоичными файлами, к числу которых относятся исполняемые, библиотечные и базы данных. В случае исполняемых файлов на помощь может прийти strings, которая извлекает последовательности ASCII-символов из файла. Библиотеки несколько труднее в идентификации из-за невозможности их исполнения, хотя и здесь есть решение - команда objdump.
Debugfs находится в пакете e2fsprogs: sourceforge.net/projects/e2fsprogs, но, прежде чем брать его из Сети, убедитесь, не установлен ли он с вашего дистрибутива Linux. Адрес последней версии recover.