Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
На главную -> MyLDP -> Тематический каталог -> Файловые системы Linux

Как восстановить удаленные файлы в файловой системе ext3

Оригинал: HOWTO recover deleted files on an ext3 file system
Автор: Карло Вуд (Carlo Wood)
Дата публикации: Март 2008
Перевод: Коваленко Алексей
Дата перевода: 03.09.2009 г.

Введение

Рано или поздно это происходит с каждым: через мгновение после нажатия Enter вы осознате свою ошибку, но уже слишком поздно; вы удалили очень важный файл или каталог, для которого не существует резервной копии. Или, возможно, резервная копия есть, но она месячной давности....и, пребывая в шоке, вы видите последний месяц, мгновенно пролетающий перед вашими глазами, и с болью понимаете, что вам придется делать все заново....

К счастью, вы помните, что файлы никогда реально не удаляются, максимум - перезаписываются новым содержанием. Итак, вы как можно скорее перемонтируете диск только для чтения. Но что теперь?

Если вы попробуете найти в Google ответ на запрос "восстановление удаленных файлов в ext3", то практически любая найденная статья будет содержать вопрос пользователя о том, возможно ли это, и ответ - "нет".

Наиболее часто цитируемый абзац взят из самого ext3 FAQ:

Q: Как можно восстановить удаленные файлы или отменить их удаление в разделе диска с файловой системой ext3?

A: На самом деле, это невозможно. Вот что сказал об этом один из разработчиков, Андреас Дилгер:

Чтобы обеспечить корректное восстановление ссылок в случае неожиданного отказа системы, ext3 при удалении файла обнуляет указатели на блоки в индексном дескрипторе файла (inode), в то время как ext2 просто помечает эти блоки как неиспользуемые в битовой карте блоков, а индексный дескриптор как "удаленный", и не трогает указатели на блоки.

Ваша единственная надежда на то, чтобы найти при помощи grep все части удаленных вами файлов, и надеяться на лучшее.

Однако это утвержение не совсем верно. Вся информация, возможно, сохранилась, и указатели блоков в том числе. Вероятность этого немного меньше, чем в случае с ext2, поскольку нужные данные придется восстанавливать из журнала. Кроме того, мета-данные меньше связаны с реальными данными, поэтому необходимо найти эвристический алгоритм для возврата к предыдущему состоянию. Каждый раз, когда происходит доступ к файлу, изменяется Время Доступа к нему, и его инод записывается на диск, вместе с 31 другими инодами, которые так же принадлежат данному блоку. Когда это происходит, копия блока записывается в журнал. Поэтому, если ваш раздел не очень большой в сравнении с журналом, и если Вы относительно недавно обращались к файлам, которые хотите восстановить, возможно, Вам удастся восстановить указатели на блоки из журнала.

7-го февраля 2008 года я случайно полностью удалил мой домашний каталог: более 3Гб данных были удалены командой rm -rf. На тот момент у меня была только резервная копия от июня 2007 года. Невозможность восстановления данных была неприемлема. Поэтому я проигнорировал всех, пытающихся меня в этом убедить и начал изучать, как в действительности работает файловая система ext3, и что в действительности происходит, когда файлы удаляются...

Через три недели, написав около 5000 строк кода, я восстановил на своем диске все файлы до единого.

Что вы должны знать перед тем, как начнете

Программа, которую я написал, служит для восстановления недавно удаленных файлов (незадолго до последнего размонтирования). Она НЕ РАБОТАЕТ с поврежденной файловой системой, только со случайно удаленными файлами.

Кроме того, программа находится в бэта-стадии: разработка этой программы была выполнена как нестандартное решение, призванное помочь в восстановлении моих собственных данных. После восстановления своих данных я продолжал работу над программой около месяца, чтобы устранить ошибки, которые не появлялись в моем случае, но делали программу в целом не такой надежной, как хотелось бы. Поэтому, вполне вероятно, что программа "из коробки" не будет работать полностью так, как хотелось бы вам. Я снабдил ее специальными прерываниями (asserts - прерывание программы, если какое-либо утверждение не верно), которые отменяют выполнение этой программы, если что-либо не работает, вместо того чтобы попытаться восстановить файлы. В этом случае Вам придется, так сказать, копнуть поглубже и дописать программу самому.

Данная программа требует доступа к файловой системе с удаленными файлами только для чтения: она не пытается восстановить файлы. Вместо этого она позволяет вам сделать копию удаленных файлов и записать их во вновь созданное дерево каталогов в текущем каталоге (который, очевидно, должен быть на другой файловой системе). Все пути относятся к корневому разделу, то есть если вы анализируете раздел /dev/md5, который был смонтирован в каталог /home, тогда /home неизвестен разделу и программе и поэтому не является частью пути. Взамен этого, путь будет выглядеть примерно как "carlo/c++/foo.c", без слэша впереди. Корневой раздел (в примере /home) - это пустая строка, не '/'.

Имя программы ext3grep было выбрано потому, что я планировал написать высоко интеллектуальную программу, которая должна была иметь возможность реконструировать файлы путем поиска блоков, которые выглядят подобно ожидаемым блокам (базируясь на старых резервных копиях или на других правилах). grep в имени программы был добавлен в ожидании того, что цитата разработчика ext3, приведенная выше, окажется верной. Я подготовился к необходимости работы с наборами блоков, где каждый набор соответствует шаблону поиска и ранжирован по критерию похожести. Предполагалось, что затем кто-то поработает над набором блоков, используя набор операторов, предоставляемых программой, с целью снижения количества блоков, назначения их файлам, и расположения их в соответствующем порядке. Однако ничего подобного не понадобилось. Тем не менее я сохранил имя ext3grep поскольку, возможно, кто-то действительно захочет добавить программе подобную grep-функциональность (в данный момент ее grep-функциональность ограничена фиксированными строками и печатью соответствующих номеров блоков в стандартный вывод).

Страницы:  1   2   3   4   5   >>   Продолжение 


Средняя оценка 5 при 1 голосовавших

Комментарии