Восстановление информации своими руками


Листинг2 структура описателя группы цилиндров


Между описателем группы цилиндров и группой inode расположена карта занятых inode и карта свободного дискового пространства, представляющие собой обыкновенные битовые поля, точно такие же как и в NTFS. При восстановлении удаленных файлов без этих карт никуда! Отделяя зерна от плевел, они существенно сужают круг поиска, что особенно хорошо заметно на дисках, заполненных более чем наполовину.

За картами следует массив inod'ов, смещение которого содержится в поле cg_iusedoff (адрес первой группы inode продублирован в суперблоке). По сути, в UFS структура inode ничем не отличается от ext2fs, только расположение полей другое. К тому же имеется только один блок косвенной адресации вместо трех, но это уже детали, в которые не будет углубляться (иначе или зависнем или завязнем), а лучше рассмотрим назначение фундаментальных полей, к числу которых принадлежат:

 

q       di_nlink — кол-во ссылок на файл (0 означает "удален");

q       di_size — размер файла в байтах;

q       di_atime/di_atimensec — время последнего доступа к файлу;

q       di_mtime/di_mtimensec — время последней модификации;

q       di_ctime/di_ctimensec – время последнего изменения inode;

q       di_db – адреса первых 12-блоков данных файла, отсчитываемые в фрагментах от начала группы цилиндров;

q       di_ib — адрес блоков косвенной адресации (фрагменты от начала группы);

 

Сама структура inode определена в файле /src/ufs/ufs/dinode.h и для UFS1 выглядит так:

 

struct dinode {

/* 0x00 */    u_int16_t     di_mode;      /*   0: IFMT, permissions; see below. */

/* 0x02 */    int16_t              di_nlink;     /*   2: File link count. */

/* 0x04 */    union {

              u_int16_t oldids[2];       /*   4: Ffs: old user and group ids. */




Начало  Назад  Вперед