понедельник, 8 августа 2011 г.

Восстановление удалённых файлов с ext4-раздела.

Один из пользователей в офисе случайно удалил кучку файлов с сетевого ресурса, которые оказались важными. Не буду здесь обсуждать, почему архивация этого ресурса не велась - моей вины здесь нет, не велась и всё. Пришлось восстанавливать данные, и, в итоге, они были восстановлены. Здесь укажу последовательность действий. Их немного.

В-первую очередь, надо отмонтировать раздел, чтоб никто не перезаписал то место на диске, где хранились стёртые данные.

umount /dev/mapper/partition

Затем желательно снять образ раздела, чтоб с ним было время спокойно поработать. Это можно сделать так:

dd if=/dev/mapper/partition |ssh username@bckhost "cat >~/partition.img"

или так:

dd if=/dev/mapper/partition |ssh username@bckhost "dd of=~/partition.img"

Теперь раздел можно замонтировать обратно, чтоб остальные пользователи продолжали работать, пока админ копается с восстановлением:

mount /dev/mapper/partition

Теперь можно заняться восстановлением. Первоначально я попытался использовать утилиту photorec из testdisk-а, так как я уже когда-то что-то восстанавливал с её помощью. Время сканирования образа зависит от его размера и у меня заняло долгие часы, а результат процесса представляет собой кучу каталогов с ничего не говорящими названиями типа "recup_dir.1". Имена файлов в этих калогах тоже могут быть изменены. В общем результат неудовлетворительный. Кстати, чтоб утилита photorec "увидела" образ, нужно явно указать путь к нему в командной строке (о чём можно узнать, запустив команду с ключом --help):

photorec /d recup_dir file.dd

Тем не менее утилита незаменима для восстановления, например, удалённых с флэшки фотографий - название утилиты об этом и говорит. Кроме того работает с большим количеством разделов, включая юниксовые и широко распространённый vfat(fat32).

Позже я нашёл необходимый мне инструмент. Им оказалась программа extundelete. Установка на Gentoo прошла быстро:

emerge -va extundelete

Программа работает с разделами ext3/ext4. Ключами командной строки можно задать время, начиная с которого(или не позже которого) восстанавливать удалённые файлы, а также некоторые другие параметры, например, восстановление одного конкретного файла. Я поступил проще, восстановил всё, что можно было:

extundelete --restore-all ~/partition.img

По-умолчанию, результатом команды будет каталог RECOVERED_FILES, являющийся корнем, относительно которого воссоздана структура вложенных каталогов с восстановленными файлами. Теперь результат достигнут: выбираем нужные файлы и копируем обратно на сетевой ресурс, с которого их удалили.

2 комментария:

  1. Павел Елагин19 февраля, 2013 23:06

    Сделал:
    sudo dd if=/dev/sdb6 | cat > partition.img
    Получил файл размером с указанный раздел. Затем:

    $ sudo extundelete --restore-all partition.img
    WARNING: Extended attributes are not restored.
    Loading filesystem metadata ... 79 groups loaded.
    Loading journal descriptors ... 32255 descriptors loaded.
    Searching for recoverable inodes in directory / ...
    24884 recoverable inodes found.
    Looking through the directory structure for deleted files ...


    В итоге пустая папка:
    $ ls -l RECOVERED_FILES/
    итого 0

    ОтветитьУдалить
  2. Евгений Бушков20 февраля, 2013 14:29

    А дальше после "Looking through the directory structure for deleted files ..." что выдает? Там как раз должна быть информация либо об ошибках, либо о восстановлении.
    Во-первых, я бы посоветовал запускать команду от рута - без sudo. Так, кстати, и рекомендуется делать.
    Программа extundelete, надо прямо сказать, довольно капризная - у меня частенько выдает segfault-ы, версия 0.2 тоже говорит о ее незрелости. Сейчас я создал тестовый образ: создал и удалил файл, и пытался восстановить. Получил ошибки при восстановлении:

    Looking through the directory structure for deleted files ...
    2 recoverable inodes still lost.
    Unable to restore inode 13 (file.13): No data found.
    Unable to restore inode 14 (file.14): No data found.

    Вспомнил, что есть еще одна утилита для восстановления ext4magic, попробовал ее (подробнее можно почитать тут: http://openfacts2.berlios.de/wikien/index.php/BerliosProject:Ext4magic).
    Вот так можно пролистать содержимое образа:
    ext4magic -L testpartition.dd
    Так можно восстановить конкретный файл:
    ext4magic testpartition.dd -d RECOVERED_FILES/ -r -f zhen.jpg

    Эта команда отработала корректно. Так что можно пробовать все три утилиты (photorec, extundelete, ext4magic) - какая-нибудь да сработает.

    ОтветитьУдалить