mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

FS(4)                                                     FS(4)

НАЗВАНИЕ 
        fs - формат тома, содержащего файловую систему

СИНТАКСИС 
        #include 
        #include 
        #include 

ОПИСАНИЕ 
        На всех томах файловой системы хранится  в  стандартном
        формате определенная жизненно важная информация. Каждый
        том  (блочное  устройство)  разделен на некоторое коли-
        чество секторов, имеющих длину 1024 байт.  Размер  всех
        файлов  кратен,  а  внутренних буферов равен килобайту.
        Рекомендуется пользоваться  константой  BUFSIZ,  равной
        размеру  сектора.  Она  определена  во включаемом файле
        . Необходимо помнить  и  о  том,  что  утилиты
        cpio(1), fsdb(1M) в целях совместимости работают с 512 
        байтными  блоками.  Еще  большей  осторожности  требует
        бесструктурный ввод/вывод. Драйверы диска не  поддержи-
        вают  512-байтные  блоки, так что при использовании ко-
        манды dd(1) надо указывать размер буфера кратным  кило-
        байту.  Правда, при нумерации блоков драйверы ввода/вы-
        вода по-прежнему считают их 512-байтными.

        Первые 512 байт сектора 0 могут содержать информацию об
        альтернативных дорожках. Вторая половина сектора 0  на-
        зывается суперблоком.

        Сектор 1 не используется. В секторах, начиная со второ-
        го, располагаются описатели файлов и собственно  файлы.
        Системный том не содержит программы начальной загрузки.

        Суперблок имеет следующий формат:

        struct filsys {
          ushort  s_isize;          /* Размер списка описателей
                                       файлов в блоках */
          daddr_t s_fsize;          /* Размер всего тома в
                                       блоках */
          short   s_nfree;          /* Количество адресов в
                                       массиве s_free */
          daddr_t s_free[NICFREE];  /* Список свободных блоков
                                       */
          short   s_ninode;         /* Кол-во описателей фай-
                                       лов в масс. s_inode */
          ino_t   s_inode[NICINOD]; /* Список свободных описа-
                                       телей файлов */
          char    s_flock;          /* Блокир. при опер. со
                                       списком своб. блоков */
          char    s_ilock;          /* Блокир. при опер. со
                                       списком опис. файлов */
          char    s_fmod;           /* Флаг модификации супер-
                                       блока */
          char    s_ronly;          /* Флаг монтирования только
                                       на чтение */
          time_t  s_time;           /* Время последнего обнов-
                                       ления суперблока */
          short   s_dinfo[4];       /* Информация об устройстве
                                       */
          daddr_t s_tfree;          /* Кол-во свободных блоков
                                       */
          ino_t   s_tinode;         /* Кол-во свободных описа-
                                       телей файлов */
          char    s_fname[6];       /* Имя файловой системы */
          char    s_fpack[6];       /* Имя тома */
          long    s_fill[14];       /* Заполнитель, чтобы
                                       sizeof(filsys)==512 */
          long    s_state;          /* Состояние файловой сис-
                                       темы */
          long    s_magic;          /* Маг. число новой (вер-
                                       сии V.3) файл. сист. */
          long    s_type;           /* Тип новой файловой сис-
                                       темы */
        };

        #define FsMAGIC 0xfd187e20   /* Значение s_magic */
        
        #define Fs1b    1            /* Блок по 512 байт */
        #define Fs2b    2            /* Блок по 1024 байта */
        
        #define FsOKAY   0x7c269d38  /* s_state: нормальная */
        #define FsACTIVE 0x5e72d81a  /* s_state: активная */
        #define FsBAD    0xcb096f43  /* s_state: плох.корень */
        #define FsBADBLK 0xbadbc14b  /* s_state:  есть   плохие
                                        блоки */

        Поле  s_type определяет тип файловой системы. В настоя-
        щее время поддерживаются два типа файловых систем: ста-
        рая, с 512-байтными логическими блоками и новая,  улуч-
        шенная, с 1024-байтными блоками. Поле s_magic использу-
        ется для того, чтобы отличить старую 512-байтную систе-
        му  от  новой.  Если значение этого поля не совпадает с
        магическим числом FsMAGIC, то тип файловой системы при-
        нимается равным Fs1b, то есть система считается старой;
        в противном случае используется значение s_type. Опера-
        ционная система заботится о корректности преобразования
        номеров логических блоков в номера физических секторов.

        Поле s_state определяет состояние файловой системы. Для
        успешно размонтированной, неповрежденной файловой  сис-
        темы  s_state  имеет  значение  FsOKAY. После того, как
        система была смонтирована с целью  внесения  изменений,
        состояние  изменяется на FsACTIVE. По-особому обрабаты-
        вается корневая файловая система. Если во время загруз-
        ки ОС обнаруживается,  что  корневая  файловая  система
        повреждена,  она  монтируется,  но отмечается признаком
        FsBAD. Позже, после того, как она будет размонтирована,
        будет установлено состояние FsOKAY.

        Поле s_isize задает адрес первого  блока  данных  после
        списка описателей файлов; сам список описателей начина-
        ется со второго блока. Таким образом, список описателей
        файлов  имеет  длину  s_isize-2 блока. Значение s_fsize
        есть первый блок, который потенциально  недоступен  для
        размещения  файлов. Эти два числа используются системой
        для выявления плохих номеров блоков; если неверный  но-
        мер  блока  получается  из списка свободных блоков или,
        наоборот, освобождается, то на системную консоль  выво-
        дится  диагностическое  сообщение.  Более  того, список
        свободных блоков очищается, чтобы  предотвратить  даль-
        нейшее  получение номеров блоков из возможно поврежден-
        ного списка.

        Список свободного пространства для каждого тома устроен
        следующим образом. Массив s_free содержит до 50 номеров
        свободных блоков s_free [0], ..., s_free [s_nfree - 1].
        Блок  с номером s_free [0] является следующим элементом
        списка свободного пространства. Нулевое слово  (длинное
        целое) в этом блоке содержит количество (до 50) номеров
        свободных  блоков,  указанных  в последующих 50 словах,
        причем первое слово одновременно служит ссылкой на сле-
        дующий элемент списка свободного пространства с  анало-
        гичной структурой. Иными словами, каждый элемент списка
        свободного  пространства располагается в начале свобод-
        ного блока и устроен так же, как пара полей  s_nfree  и
        s_free, играющая роль заголовка списка.

        Чтобы занять свободный блок,  надо  уменьшить  значение
        s_nfree и выделить блок с номером s_free [s_nfree]. Ес-
        ли  номер  выделенного блока равен 0, это означает, что
        на томе нет свободных блоков, то есть имеет место ошиб-
        ка. Если значение s_nfree стало нулевым,  нужно  прочи-
        тать выделенный блок, поместить его нулевое слово в по-
        ле s_nfree, а последующие 50 слов - в массив s_free.

        При освобождении блока, если значение s_nfree равно 50,
        следует скопировать пару полей s_nfree и s_free в нача-
        ло этого блока, записать блок и установить s_nfree рав-
        ным 0. В любом случае, номер освобождаемого блока поме-
        щается  в  элемент массива s_free [s_nfree], после чего
        поле s_nfree увеличивается на 1.

        Поле s_tfree хранит общее количество свободных  блоков,
        доступных файловой системе.

        Поле s_ninode хранит количество номеров свободных  опи-
        сателей  файлов в массиве s_inode. Чтобы занять свобод-
        ный описатель файла в случае, когда s_ninode больше  0,
        это  поле следует уменьшить на 1 и выделить описатель с
        номером s_inode [s_ninode]. Если же  значение  s_ninode
        равно 0, нужно перебрать описатели файлов и номера сво-
        бодных (не более 100) поместить в массив s_inode, после
        чего снова попытаться выделить описатель.

        При  освобождении  описателя,  если  значение  s_ninode
        меньше 100, номер описателя следует поместить в элемент
        массива s_inode [s_ninode] и увеличить поле s_ninode на
        1. Если же значение s_ninode равно 100, не стоит  забо-
        титься о регистрации факта освобождения.  Дело  в  том,
        что  таблица номеров свободных описателей предназначена
        только для ускорения их поиска; В самом описателе  есть
        признак, свободен он или занят.

        Значение s_tinode есть общее количество свободных  опи-
        сателей файлов, доступных файловой системе.

        Флаги  s_flock  и s_ilock поддерживаются только в копии
        файловой системы в оперативной памяти; их  значения  на
        диске  не  определены.  Значение  флага s_fmod на диске
        также не поддерживается; этот флаг показывает, что  су-
        перблок  был  изменен  и должен быть записан на диск во
        время очередного обновления информации в файловой  сис-
        теме.

        Флаг s_ronly означает защиту от записи.

        Поле s_time есть время последней модификации суперблока
        файловой  системы.  Оно  измеряется количеством секунд,
        прошедших с 00:00:00 1 января 1970г. (по Гринвичу).

        Поле s_fname есть имя файловой системы, а s_fpack - имя
        тома.

        Номера описателей файлов начинаются с 1. Длина описате-
        ля  составляет  64 байта. Описатель номер 1 в настоящее
        время не используется. Описатель номер 2 зарезервирован
        для корневого каталога файловой системы. Другие  описа-
        тели не имеют предопределенного назначения. Каждый опи-
        сатель  соответствует  одному  файлу.  Формат описателя
        файла см. в inode(4).

ФАЙЛЫ 
        /usr/include/sys/fs/*

СМ. ТАКЖЕ 
        mount(2), inode(4).
        finito(1M), fsck(1M), fsdb(1M), mkfs(1M) в  Справочнике
        администратора.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк