Восстановление данных. Практическое руководство, стр. 63
<b>/* 0x34 */ int32_t fs_fsize; /* Размер фрагментов блоков в фс */</b><b>/* 0x38 */ int32_t fs_frag; /* Количество фрагментов в блоке в фс */</b>/* Параметры конфигурации *//* 0x3C */ int32_t fs_minfree; /* Мин. процент свободных блоков *//* 0x40 */ int32_t fs_rotdelay; /* Мин. задержка (мс) для оптимального след. блока *//* 0x44 */ int32_t fs_rps; /* Обороты диска в минуту *//* Размеры, определяемое кол-вом гц и их размерами *//* 0x98 */ ufs_daddr_t fs_csaddr; /* Адрес блока информации гц *//* 0х9С */ int32_t fs_cssize; /* Размер блока информации гц */<b>/* 0xA0 */ int32_t fs_cgsize; /* Размер группы цилиндров */</b>/* Поля, которые могут быть вычислены на основании остальных *//* 0хВ4 */ int32_t fs_cpg; /* Кол-во цилиндров в группе *//* 0xB8 */ int32_t fs_ipg; /* Кол-во Inode на группу */<b>/* 0xBC */ int32_t fs_fpg; /* Кол-во блоков в группе * fs_frag */</b>/* Поля, очищаемые при монтировании *//* 0xD0 */ int8_t fs_fmod; /* Флаг модификации суперблока *//* 0xD1 */ int8_t fs_clean; /* Флаг "чистой" (clean) фс *//* 0xD2 */ int8_t fs_ronly; /* Флаг защиты от записи *//* 0xD3 */ int8_t fs_flags; /* См. поле fs_ flags *//* 0xD4 */ u_char fs_fsmnt[MAXMNTLEN]; /* Путь монтирования фс */};За концом суперблока, на некотором отдалении от него, находится первая группа цилиндров. В начале каждой группы расположена служебная структура
cg55h 02h 09hfs_cgsizeДругие важные параметры:
□
cg_cgx□
cg_old_niblk□
cg_ndblk□
csum□
cg_iusedoff□
cg_freeoffСтруктура
cgЛистинг 8.8. Структура описателя группы цилиндров
#define СG_MAGIC 0x090255#define MAXFRAG 8struct cg {/* 0x00 */ int32_t cg_firstfield; /* Связный список групп цилиндров */<b>/* 0x04 */ int32_t cg_magic; /* Магическая последовательность */</b>/* 0x08 */ int32_t cg_old_time; /* Время последней записи */<b>/* 0x0C */ int32_t cg_cgx; /* Мы находимся в гц номер cgx */</b>/* 0x10 */ int16_t cg_old_ncyl; /* Кол-во цилиндров в этой гц */<b>/* 0x12 */ int16_t cg_old_niblk; /* Кол-во блоков inode в этой гц */</b><b>/* 0x14 */ int32_t cg_ndblk; /* Кол-во блоков данных в этой гц */</b><b>/* 0x18 */ struct csum cg_cs; /* Краткое описание цилиндра */</b>/* 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) своб. позиций блоков */<b>/* 0x5C */ int32_t cg_iusedoff; /* (u_int8) карта исп. inode */</b><b>/* 0x60 */ int32_t сg_freeoff; /* (u_int8) карта своб. блоков */</b>/* 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. При восстановлении удаленных файлов без этих карт обойтись невозможно. Они существенно сужают круг поиска, что особенно хорошо заметно на дисках, заполненных более чем наполовину.