Анализируем содержимое каталога

Просмотрите выгруженное содержимое каталога в читаемом формате:

        # xxd debugfs-dump | less

Каждая запись состоит из пяти полей. Байты первых двух полей представлены в обратном порядке. Это значит, что первый байт - самый младший.

Описание полей:

  1. 4 байта - номер inode.

  2. 2 байта - длина этой записи.

  3. 1 байт - длина имени файла (1-255).

  4. 1 байт - тип файла (0-7).

    0 = Неизвестный

    1 = Обычный файл

    2 = Каталог

    3 = Символьное устройство

    4 = Блочное устройство

    5 = Поток FIFO

    6 = Поток SOCK

    7 = Символьная ссылка

  5. Имя файла (1-255 символов).

Если запись удаляется из каталога, то размер предыдущей записи увеличивается на размер удаляемой записи (предыдущая запись как бы "съедает" следующую).

Если файл переименовывается в более короткое имя, то уменьшается значение третьего поля.

Первая запись, которую вы увидите - это сам каталог, представляемый одной точкой.

Предположим, что у нас есть следующая запись в каталоге:

         c1 02 0e 00 40 00 05 01 'u' 't' 'i' 'l' 's'

В ней номер inode будет "e02c1" (в шестнадцатиричной форме) или 918209 (в десятичной). Следующая запись находится через 64 байте (шестнадцатиричное 40). Мы также видим, что имя файла состоит из 5 байт ("utils") и что тип файла (01) соответствует обычному файлу.

Теперь пересчитаем номера inode подкаталогов в десятичную форму.

Если вы не любите производить такие операции вручную, то я для вас написал небольшую программу на C. Программа берет содержимое каталога (созданное debugfs, как описано ранее в разделе Разд. Находим номера inode удаленных каталогов). На стандартном выводе вы получаете список имен файлов и номеров inode.

Перед запуском этой программы вам надо загрузить записанное содержимое каталога в двоичный редактор и изменить поле "длина записи каталога" в записи, предшествующей восстанавливаемой. Это просто: если мы обозначим длину предшествующей записи как x, а длину записи, которую вы хотите восстановить как y, то вам надо заменить поле, содержащее x на x-y.

Программа называется e2dirana (ext2fs directory analyse), и ее можно найти по адресу http://www.matematik.su.se/~tomase/ext2fs-undeletion/