Файловая система HFS

 

Одной из испольуемых HP-UX файловых систем является High Performance File System (HPFS, HFS) известная также как MCKusic или BSD файловая система. Файловая система это структура данных существующая на дисковых устройствах позволяющая сохранять и получать доступ к информации хранящейся в ней в иерархическом виде. Существует ряд причин исходя из которых информацию хранящуюся на дисковых носителях приходится организовывать в виде нескольких файловых систем, к ним можнно отнестиЖ

 

· Если суммарный обьем данных превышает обьем поддерживаемый одной файловой системой

· Для увеличения производительности системы, разнося данные имеющие разную структуру (средний размер файла, наличия ограничения на дисковое пространство для пользователей) на разные файловые системы или данные к которым идет частый доступ разносятся на разные физические устройства.

· В целях системной безопасности (запрет запуска программ с файловых систем, ограничение дискового места для файловой системы, и.т.п)

 

В общих чертах файловую систему HP-UX состоит из дерева каталогов (директорий) расположеных иерархически с корневым каталогом в вершине. Все файловые системы имеют свойство “монтируемости” заключающееся в том что любая файловая система может быть смонтирована (прикреплена) к существующей директории. Любую смонтированную файловую систему кроме корневой можно размонтировать. Монтирование корневой файловой системы осуществляет ядро, сразу же после загрузки.

 

Структура файловой системы HFS

Все HFS файловые системы имеют в своем составе следующие структуры:

 

· Главный суперблок

· Набор групп цилиндров

 

Структуры данных используемые в файловой системе содержатся в файле /usr/include/sys/fs.h. Первичный суперблок это непрерывный блок данных размеров 8К размещающийся перед началом файловой системы который содержит статическую информацию о файловой системы в момент ее создания (или последнего расширения):

 

· Размер файловой системы

· Количество inodes которые может хранить файловая система

· Позиция свободного места на диске

· Количество групп цилинров

· Позиции суперблоков, крупп цилиндро, блоков inodes и блоков данных

· Размер блока и фрагмента

 

Главный суперблок

Помимо этого главный суперблок содержит вспомагательную информацию о том когда последний раз монтировалась, модифицировалась и проверялась файловая система. Потому что главный суперблок содержит исключительно важную информацию о файловой системе, HP-UX всегда хранит его копии в каждой группе цилиндров. Одна из копий загружается в память после загрузки. Главный суперблок размещается в самом начале файловой системы и каждая группа цилиндпров имеет имеет свою копию суперблока. Таким образом достигается резервирование критически важной информации. Суперблоки групп цилиндров на диске обновляются каждый раз когда выполняется команда sync или когда файловая система размонтируется. В файле /etc/sbtab присутствует запись положения всех суперблоков файловых систем.

 

 

Группы цилиндров

 

Группа цилиндров – это группа дисковых цилиндров идущих подряд. Цилиндр представляет собой совокупность треков каждый из которых размещен на одинаковом расстоянии от центра поверхности дискового носителя. Все треки в цилиндрк доступны за одну операцию чтения/записи дисковой головки. В целях повышения производительности, цилиндры группируются (по умолчанию 16 цилиндров) в группы цилиндров. Каждая группа цилиндров имеет свой набор inodes и свою карту свободного пространства в группе. Такая организация хранения позволяеет минимизировать время поиска данных файла в группе цилиндров. Приведем структуру группы цилиндров:

 

Структура Размер
Главный суперблок 1 8 Кб
Запасной суперблок 8 Кб
Информация группы цилиндров 1 блок (4 Кб или 8 Кб)
Таблица inodes Переменный 2
Блоки данных 0 или более блоков 3

                              

                          1 только для первой группы цилиндров

                          2  см. раздел inodes

                          3  см. раздел блоки данных

 

Раздел информации о группе цилиндров хранит динамические параметры группы цилиндров, такие как:

 

· Количество inodes и блоков данных в группе цилиндров

· Указатели на последний использованый блок, фрагмент и inode

· Количество свободных фрагментов

· Карту использованных inodes

· Карту свободных блоков

 

Информация о группе цилиндров занимет один блок (размер блока определяется присоздании файловой системы и обычно равен либо четырем либо восьми килобайтам).

 

Inodes

 

Кроме хранения информации о состоянии файловой системы, группы цилиндров хранят ключевую информацию о inodes файловой системы – индексам файлов данных (и директорий). Дисковая inode содержит следующую информацию о файле:

 

· Тип файла и атрибуты доступа

· Количество ссылок на файл

· Владельца и группу файла

· Размер файла в байтах

· Временные метки (время последнего обращения, последней модификации)

· Указатели на блоки файловой системы содержащих данные

 

Когда файл открыт процессом, информация о его inode находится в памяти ядра (in-core inode) в сочетании с доаполнительными атрибутами, такими как:

 

· Статус inode, включая факт блокировки inode, отличается ли in-core inode от дисковой inode в следствие модификации файла, является ли файл точкой монтирования файловой системы …

· Цифровой адрес файловой системы содержащий файл

· Указатель на другие in-core inodes выстроенные в виде списка.

 

Если inode указывает на специальный (не регулярный) файл, то с ним ассоциируются дополнительные параметры, такие как является ли файл FIFO или pipe, символьным или блочным устройством или же директорией. Когда создается файловая система (команда newfs), создаются inodes. Количество inodes ограничивает количество файлов в файловой системе. При создании файловой системы по умолчанию система подразумевает что в среднем на одну inode припадает 2048 байт данных, что в большинстве случаев является более чем достаточным количеством. Иногда, возможна ситуация когда ядро сигнализирует об ошибке переполнения таблицы in-core inodes (inode: table is full). В этом случае необходимо изменить размер этой таблицы увеличив системный параметр ядра ninode.

 

Блоки данных

После суперблока, данных о группе цилиндров и таблице inodes идет место зарезервированное под блоки данных. HP-UX поддерживает блоки размером 4,8,16,32 и 64Кб. Размер блока задается при создании файловой системы (команда newfs). Большой размер блока дает выиграш в скорости передачи данных при работе с большими файламино при этом является причиной неэффективного использования дискового пространства приработе с маленькими (которых большинство в HP-UX) файлами. Поэтому в целях экономии дискового пространства блок может быть разделен на несколько фрагментов (1,2 или 4Кб). Размер фрагмента также определяется при создании файловой системы и не может иметь размер меньше чем одна восьмая размера блока.

 

11.

1 2 . . 12
Третий уровень ссылок
Второй уровень ссылок
Первый уровень ссылок
Данные файла
Блоки адресуемые 1 напрямую               2                         .                            .                            .                           12
Временные метки
Размер файла в байтах
Владелец / группа
Ссылки на файл
Доступ к блокам данных

 

 

     
Тип файла и атрибуты

 


Как было указано выше, inode содержит указатель на блоки данных. В зависимости от размера файла данные содержащиеся в файлах могут быть доступны напрямую через указатели содержащиеся в inode, либо через двойную или тройную ссылку. Первый уровень ссылок позволяет адресовать непосредственно из inode 12 блоков данных, если этого не достаточно для адресации файла соответствующего размера то 12-й блок используется для адресации второго уровня. Размер ссылки составляет 4 байта, поэтому при размере блока в 4096 байт он может адресовать 1024 блока данных. Аналогичным образом осуществляется адресация третьего уровня. При этом ограничение на максимальный размер файла практически снимается. Помимо указателя на блок, inode хранит указатель на фрагмент. Этот указатель может быть интерпретирован как ссылка на целый блок или оддин или несколько его фрагментов. Если обьем данных файла такой что последний блок остается не полностью заполненным то при этом используются фрагмент(ы). Рассмотрим этот случай на примере 20К файла хранимого в 8К блоках. Файл будет хранится в 2-х полных блоках и 4-х фрагментах. Этот случай изображен на рисунке:

 

 

             
     

 


                             Размер файла

                                                                                            8        15 24      31 40 43 46

     
 

 


                                                    1

                              

                                                          2

 

      блоки адреceсуемые       3

           напрямую с inode

                                                          4

 

 

                                              12

 

Когда для записи файла требуется блок или фрагмент, система начинает искать свободныйе блоки на диске. Когда файловая система заполненная, выполняется очень долгие линейные поиски для нахождения свободных блоков, и обычно находится блок соседний с тем котрый использовался при записи предыдущего файла. В конце концов это приводит к сильному падению производительности файловой системы. Поэтому для более быстрого поиска свободных блоков на файловой системе резервируется некоторая часть свободного места (minfree). Этот параметр задается при создании файловой системы и может быть изменен в дальнейшем. Как правило это 10% от всего места отведенного под файловую систему.

 





Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: