Рис. 8.9. Структура файловых систем s5/ext2fs (а) и UFS (б)
Адресация ведется либо по физическим смещениям, измеряемым в байтах и отсчитываемым от начала группы цилиндров (реже — от начала раздела UFS), либо в номерах фрагментов, отсчитываемых от тех же самых точек. Допустим, размер блока составляет 16 Кбайт, разбитых на 8 фрагментов. Тогда 69-й сектор будет иметь смещение
512 * 69 == 35328
байт или
1024 * (16/8)/512 * 69 == 276
фрагментов.
В начале раздела расположен загрузочный сектор, затем следует суперблок, за которым находится одна или несколько групп цилиндров (рис. 8.10). Для перестраховки копия суперблока дублируется в каждой группе. Загрузочный сектор не дублируется, но по соображениям унификации и единообразия под него просто выделяется место, таким образом, относительная адресация блоков в каждой группе остается неизменной.
Рис. 8.10. Последовательно расположенные группы цилиндров
В UFS суперблок располагается по смещению 8192 байт от начала раздела, что соответствует 16-му сектору. В UFS2 он "переехал" на 65536 байт (128 секторов) от начала, освобождая место для дисковой метки и первичного загрузчика операционной системы, а для действительно больших (в исходных текстах они обозначены как "piggy") систем предусмотрена возможность перемещения суперблока по адресу 262144 байт (целых 512 секторов).
Среди прочей информации суперблок содержит:
□
cblkno
— смещение первой группы блока цилиндров, измеряемое во фрагментах, отсчитываемых от начала раздела;
□
fs_iblkno
— смещение первого inode в первой группе цилиндров (фрагменты от начала раздела);
□
fs_dblkno
— смещение первого блока данных в первой группе цилиндров (фрагменты от начала раздела);
□
fs_ncg
— количество групп цилиндров;
□
fs_bsize
— размер одного блока в байтах;
□
fs_fsize
— размер одного фрагмента в байтах;
□
fs_frag
— количество фрагментов в блоке;
□
fs_fpg
— размер каждой группы цилиндров, выраженный в блоках (также может быть найден через
fs_cgsize
).
Для перевода смещений, выраженных во фрагментах, в номера секторов, служит следующая формула: