/* 0x00 */ u_int8_t cg_space[1]; /* Место для карт гц */
/* реально больше */
Между описателем группы цилиндров и группой inode расположены карта занятых inode и карта свободного дискового пространства, представляющие собой обыкновенные битовые поля, точно такие же, как и в NTFS. При восстановлении удаленных файлов без этих карт обойтись невозможно. Они существенно сужают круг поиска, что особенно хорошо заметно на дисках, заполненных более чем наполовину.
За картами следует массив inode, смещение которого содержится в поле
cg_iusedoff
(адрес первой группы inode продублирован в суперблоке). По сути, в UFS структура inode ничем не отличается от ext2fs, только расположение полей другое. К тому же, имеется только один блок косвенной адресации вместо трех, но это уже детали, не имеющие большого практического значения. Рассмотрим назначение фундаментальных полей, к числу которых принадлежат:
?
di_nlink
— количество ссылок на файл (0 означает "удален");
?
di_size
— размер файла в байтах;
?
di_atime
/
di_atimensec
— время последнего доступа к файлу;
?
di_mtime
/
di_mtimensec
— время последней модификации;
?
di_ctime
/
di_ctimensec
— время последнего изменения inode;
?
di_db
— адреса первых 12 блоков данных файла, отсчитываемые во фрагментах от начала группы цилиндров;
?
di_ib
—
адрес блоков косвенной адресации (фрагменты от начала группы).
Сама структура inode определена в файле /src/ufs/ufs/dinode.h. Для UFS1 эта структура выглядит, как показано в листинге 8.9 и на рис. 8.11.
В UFS2 формат inode был существенно изменен — появилось множество новых полей, удвоилась ширина адресных полей (листинг 8.10). Что это обозначает для нас в практическом плане? Смещения всех полей изменились, только и всего, а общий принцип работы с индексными дескрипторами остался прежним.