четверг, 14 января 2010 г.

Восстановление удаленных файлов в Linux ext3

И все таки это случилось.
rm -rf там где этого ни в коем случае не надо делать. Все, данных больше нет, и назад пути тоже нет. Потому что файловая система ext3
In order to ensure that ext3 can safely resume an unlink after a crash, it actually zeros out the block pointers in the inode, whereas ext2 just marks these blocks as unused in the block bitmaps and marks the inode as "deleted" and leaves the block pointers alone.

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

На практике это означает, что разработчики файловой системы ext3 в целях повышения надежности сделали невозможным восстановление стертых файлов. Однако, поскольку ext3 журналируемая файловая система. Когда Вы стираете файл, копия указателя блока записывается в журнал. То есть, найти этот указатель блока все таки можно. Значит можно восстановить данные. Все зависит от скорости с которой вы отключите жесткий диск.
Программу для восстановления данных с ext3 написал Carlo Wood. И она есть в репозитории AltLinux. Установите пакет ext3grep.

Как действовать:
Отмонтировать жесткий диск, на котором была выполнена команда rm и примонтировать его в режиме только "чтение". Важно! Программа восстанавливает данные стертые до последнего отключения диска. То есть шансы восстановить данные резко падают, если вы монтировали диск (перезагружали компьютер) несколько раз.
Данные восстанавливаются по команде:
ext3grep /dev/sdb1 --restore-file home/my-file
Здесь /dev/sdb1 имя жесткого диска, а home/my-file - путь к файлу, который вы хотите восстановить. Обратите внимание, что путь не начинается с /. То есть если вы монтируете диск с корневой файловой системой, то путь к папке /home/ivan/ будет home/ivan/. Восстановленные файлы находятся в папке RESTORED_FILES в текущем каталоге.
При первом вызове программа сканирует жесткий диск и составляет индекс. Это долго. Зато последующие вызовы работают очень быстро. Чтобы восстановить все что возможно:
ext3grep /dev/sdb1 --restore-all

Комментариев нет:

Отправить комментарий