|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Листинг 8.7. Формат суперблока (второстепенные поля опущены)struct fs { /* 0x00 */ int32_t fs_firstfield; /* Связный список файловых систем */ /* 0x04 */ int32_t fs_unused_1; /* для внутренних суперблоков */ /* 0x08 */ ufs_daddr_t fs_sblkno; /* Адрес суперблока в файловой системе (фс) */ /* 0x0C */ ufs_daddr_t fs_cblkno; /* Смещение блока цилиндров в фс */ /* 0x10 */ ufs_daddr_t fs_iblkno; /* Смещение блоков inode в фс */ /* 0x14 */ ufs_daddr_t fs_dblkno; /* Смещение 1-го блока данных после группы цил. */ /* 0x18 */ int32_t fs_cgoffset; /* Смещение группы цилиндров */ /* 0x1C */ int32_t fs_cgmask; /* Используется в calc mod fs_ntrak */ /* 0x20 */ time_t fs_time; /* Время последней записи */ /* 0x24 */ int32_t fs_size; /* Количество блоков в фс */ /* 0x28 */ int32_t fs_dsize; /* Количество блоков данных в фс */ /* 0х2С */ int32_t fs_nog; /* Количество групп цилиндров */ /* 0x30 */ int32_t fs_bsize; /* Размер базовых блоков в фс */ /* 0x34 */ int32_t fs_fsize; /* Размер фрагментов блоков в фс */ /* 0x38 */ int32_t fs_frag; /* Количество фрагментов в блоке в фс */
/* Параметры конфигурации */ /* 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; /* Размер блока информации гц */ /* 0xA0 */ int32_t fs_cgsize; /* Размер группы цилиндров */
/* Поля, которые могут быть вычислены на основании остальных */ /* 0хВ4 */ int32_t fs_cpg; /* Кол-во цилиндров в группе */ /* 0xB8 */ int32_t fs_ipg; /* Кол-во Inode на группу */ /* 0xBC */ int32_t fs_fpg; /* Кол-во блоков в группе * fs_frag */
/* Поля, очищаемые при монтировании */ /* 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]; /* Путь монтирования фс */ }; За концом суперблока, на некотором отдалении от него, находится первая группа цилиндров. В начале каждой группы расположена служебная структура cg, представляющая собой описатель группы цилиндров и содержащая магическую последовательность 55h 02h 09h, по которой все уцелевшие группы можно найти даже при полностью испорченном суперблоке. Штатным образом стартовые адреса всех последующих групп вычисляются путем умножения номера группы на ее размер, содержащийся в поле fs_cgsize. Другие важные параметры: □ cg_cgx — порядковый номер группы, отсчитываемый от нуля; □ cg_old_niblk — количество inode в данной группе; □ cg_ndblk — количество блоков данных в данной группе; □ csum — количество свободных inode и блоков данных в данной группе; □ cg_iusedoff — смещение карты занятых inode, отсчитываемое от начала данной группы (в байтах); □ cg_freeoff — смещение карты свободного пространства (байты от начала группы). Структура cg определена в файле /src/ufs/ffs/fs.h и выглядит следующим образом — листинг 8.8. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |