/* 0x12 */ int16_t cg_old_niblk; /* Кол-во блоков inode в этой гц */
/* 0x14 */ int32_t cg_ndblk; /* Кол-во блоков данных в этой гц */
/* 0x18 */ struct csum cg_cs; /* Краткое описание цилиндра */
/* 0x28 */ int32_t cg_rotor; /* Положение посл. исп. блока */
/* 0x2C */ int32_t cg_frotor; /* Положение посл. исп. фрагмента */
/* 0x30 */ int32_t cg_irotor; /* Положение посл. исп. inode */
/* 0x34 */ int32_t cg_frsum[MAXFRAG]; /* Счетчик доступных фрагментов */
/* 0x54 */ int32_t cg_old_btotoff; /* (int32) блоков на цилиндр */
/* 0x58 */ int32_t cg_old_boff; /* (u_int16) своб. позиций блоков */
/* 0x5C */ int32_t cg_iusedoff; /* (u_int8) карта исп. inode */
/* 0x60 */ int32_t сg_freeoff; /* (u_int8) карта своб. блоков */
/* 0x64 */ int32_t cg_nextfreeoff; /* (u_int8) след. своб. блок */
/* 0x68 */ int32_t cg_clustersumoff; /* (u_int32) счетчик своб. кластеров */
/* 0x6C */ int32_t cg_clusteroff; /* (u_int8) карта своб. кластеров */
/* 0x70 */ int32_t cg_nclusterblks; /* Кол-во кластеров в этой гц */
/* 0x74 */ int32_t cg_niblk; /* Кол-во блоков inode в этой гц */
/* 0x78 */ int32_t cg_initediblk; /* Посл. инициализированный inode */
/* 0х7С */ int32_t cg_sparecon32[3]; /* Зарезервировано */
/* 0x00 */ ufs_time_t cg_time; /* Время последней записи */
/* 0x00 */ int64_t cg_sparecon64[3]; /* Зарезервировано */
/* 0x00 */ u_int8_t cg_space[1]; /* Место для карт гц */
/* реально больше */
Между описателем группы цилиндров и группой inode расположены карта занятых inode и карта свободного дискового пространства, представляющие собой обыкновенные битовые поля, точно такие же, как и в NTFS. При восстановлении удаленных файлов без этих карт обойтись невозможно. Они существенно сужают круг поиска, что особенно хорошо заметно на дисках, заполненных более чем наполовину.
За картами следует массив inode, смещение которого содержится в поле cg_iusedoff
□ di_nlink
□ di_size
□ di_atime
di_atimensec
— время последнего доступа к файлу;□ di_mtime
di_mtimensec
— время последней модификации;□ di_ctime
di_ctimensec
— время последнего изменения inode;□ di_db
□ di_ib
Сама структура inode определена в файле /src/ufs/ufs/dinode.h. Для UFS1 эта структура выглядит, как показано в листинге 8.9 и на рис. 8.11.
Рис. 8.11
. Схематичное изображение inodeЛистинг 8.9. Структура inode в UFS1
struct dinode {
/* 0x00 */ uint16_t di_mode; /* 0: IFMT, права доступа; */
/* см. ниже */
/* 0x02 */ int16_t di_nlink; /* 2: Счетчик ссылок */
/* 0x04 */ union {