Библиотека сайта rus-linux.net
Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
Как восстановить удаленные файлы в файловой системе 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 | >> | Продолжение |