Haiku OSBFS - перевод статьи Эндрю Хадсона (часть 1)


Недавно наткнулся на статью Эндрю Хадсона: "The BeOS file system: an OS geek retrospective" и счел ее довольно интересной. Потихоньку начал переводить для себя, но подумал, что это может быть интересно и другим. Разговор пойдет о файловой системе BFS (или BeFS дабы не путать с Boot File System) созданной для BeOS, сейчас используется в Haiku. Сам перевод будет разбит на три части.
часть вторая
часть третья

Файловая система для Beos, известная так же как BFS, используется в Haiku, BeOS, и SkyOS. Когда она была создана в конце 90-х как часть злополучного проекта BeOS, своим набором функций получила признание среди гиков-энтузиастов. Этот набор функций включает в себя:

* 64-битное адресное пространство
* Журналируемая файловая система
* Большая скорость чтения в режиме многопоточности
* Поддержка расширенных атрибутов файлов
* Оптимизация для потокового доступа к файлам

В этой короткой статье, мы взглянем на легендарную BFS, начиная с некоторого файловой основы и перейдем к обсуждению особенностей. Также включены в конце статьи 2 интервью: первое с человеком, который разработал BFS для Be, а второе с разработчиком версии BFS с открытым исходным кодом.

Немного истории

BFS разработали в 1997 году Dominic Giampaolo и Cyril Meurillon, оба работали на Be. Она проектировалась как легкая, с поддержкой многопоточности, файловая система для поддержки больших объемов и потокового мультимедиа. Также была предназначена для поддержки функций базы данных предыдущей файловой системы Be. Хотя она была написана в то время, когда типичные компьютеры имели 8MB оперативной памяти, а жесткий диск имел объем 9GB, дальновидный дизайн позволил BeFS быть актуальной и сегодня.

В 2002 году Axel D?rfler переписал оригинальный драйвер BFS для Haiku, как проект с открытым исходным кодом.

Прежде чем мы сможем говорить о том, что же в BFS такого особенного, сначала поговорим немного об основах файловой системы.

Основы файловой системы

На базовом уровне, файловая система существует для управления данными на носителях информации. Функции, общие для большинства файловых систем, включают в себя:

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

Для более детального обзора многочисленных файловых систем, обратитесь к статье От BFS к ZFS: прошлое, настоящее и будущее файловых систем. Для углубленного изучения HPFS, NTFS, EXT2, XFS circa 2000, обратитесь к 3 главе Practical File System Design.

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

Диск: устройство хранения информации определенного размера. Минимальной адресуемой областью данных на жёстком диске является сектор. Размер сектора традиционно равен 512 байт, но он теперь приближается к 4096 байтам для более новых дисков.

Блок: наименьший модуль, перезаписываемый диском или файловой системой. Все, что делает файловая система, составлено из операций, сделанных на блоках.

Bitmap: структура данных, которая определяет, какие блоки на диске свободны для использования

Раздел: подмножество всех блоков на диске. Диск может иметь несколько разделов.

Логический диск часть долговременной памяти компьютера, рассматриваемая как единое целое для удобства работы.

Суперблок: в суперблоке определяется размер файловой системы, максимальное число файлов в разделе, объем свободного пространства – и содержится информация о том, где искать незанятые участки.

Метаданные: общий термин, вкратце — информация об используемых данных. Например, размер файла — очень важная информация, но это не часть данных, это сохранено непосредственно в файле. Так метаданные файла — данные о файле, а не в файле.

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

I-node: место, где файловая система хранит все необходимые метаданные о файле. I-node также обеспечивает подключение к содержимому файла и любым другим данным, связанных с файлом. Термин «i-node» (который мы будем использовать в этой статье) является историческим и возник в Unix. I-node также известен как блок управления файлом (FCB) или файл записи.

Атрибут: имя и значение, связанное с именем. Значение может иметь определенный тип (строка, целое и т.д.), или это могут быть просто произвольные данные.

Особенности BFS

Теперь, когда мы узнали некоторые основные термины, давайте посмотрим на некоторые особенности, которые делают BFS уникальной.

Во-первых, BFS поддерживает 64-битную адресацию, что означает как бы не был велик объем дисков в будущем, Вы сможете отформатировать весь диск в BFS. Вы можете создавать разделы более 8 экзабайт и, в зависимости от размера блока, создавать файлы размером больше 30GB.

Одной из наиболее важных и разрекламированных особенностей BFS является поддержка расширенных атрибутов. Например важность атрибутов иллюстрируется на примере mp3 файлов. Информационные поля, важные для файла mp3, были бы: название песни, группа, альбом, дата выпуска, битрейт, продолжительность, количество прослушиваний песни. Если Вы хотите связать эту информацию с каждым файлом mp3, используя обычную файловую систему, Вам, возможно, придется создать Вашу собственную базу данных, чтобы поддерживать поиск, создание, обновление, или удаление этих атрибутов, поскольку Ваша коллекция музыки растет и изменяется.С BFS, напротив, эти атрибуты, или любые другие атрибуты, могут быть добавлены к файловой системе непосредственно.
Это означает, что программа для редактирования или проигрывания mp3 не должна создавать или поддерживать базу данных, потому что файловая система обработает эти функции для Вас. BFS ассоциирование атрибутов файлов или в рамках программного управления или из командной строки. Атрибуты могут быть найдены и отсортированы файловой системой в качестве расширения к любому приложению. Как это делается, будет обсуждаться в дальнейшем.

BFS поддерживает возможность создавать постоянный или «живой» запрос, который отслеживает изменения файлов. Это запрос, который подключается к файловой системе, проверяя файлы соответствующие критериям поиска. В Haiku, эти запросы легко создаются и расходуют удивительно небольшой объем системных ресурсов.

BFS — журналируемая файловая система, а это значит, что система сохраняет список изменений, которые она будет проводить с файловой системой, перед фактическим их осуществлением, и не нуждается в утилитах fsck или CHKDSK. Ведение журнала также способствует ускорению загрузки системы после неожиданного выключения.

BFS использует кодировку символов UTF-8 для имен каталогов и файлов. Это означает, что можно использовать практически любой язык, в естественном виде, в Haiku. Без лишних усилий можно использовать имена файлов на китайском, с немецкими символами умляуты или использовать рукописный арабский язык.

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

Архитектура BFS: Суперблок

Суперблок — структура данных высшего уровня для файловой системы. Суперблок BFS описывает физический диск, область журнала, и индексацию. По понятным причинам (для повышения производительности) суперблок сохраняется в оперативную память после загрузки системы.

typedef struct disk_super_block { 
	char name[B_OS_NAME_LENGTH]; 
	int32 magic1; 
	int32 fs_byte_order; 
	uint32 block_size; 
	uint32 block_shift; 
	off_t num_blocks; 
	off_t used_blocks; 
	int32 inode_size; 
	int32 magic2; 
	int32 blocks_per_ag; 
	int32 ag_shift; 
	int32 num_ags; 
	int32 flags; 
	block_run log_blocks; 
	off_t log_start; 
	off_t log_end; 
	int32 magic3; 
	inode_addr root_dir; 
	inode_addr indices; 
    int32 pad[8]; 
} disk_super_block; 

Name название файловой системы. Три magic numbers используются для проверки их согласованности, а также вариант нумерации. Fs_byte_order содержит порядок байтов, block_size содержит явное количество байт; block_shift используется как экспонента 2, также вычисляет размер блока. Это — целенаправленная избыточность, используемая для последовательности проверки файловой системы. Num_blocks содержит количество доступных блоков для файловой системы, used_blocks содержит количество используемых в настоящее время. Flags определяет, является ли состояние суперблока чистой или грязным. Root_dir указывает на корень всех файлов и каталогов. Indices указывает на начало индексируемого раздела расширенных атрибутов. Утилита bfsinfo может использоваться для формирования дампа суперблока для системного суперблока.

часть вторая
  • +11
  • DuskMan
  • 18 июня 2010, 11:27

Комментарии (7)

  • avatar
  • fog
  • 18 июня 2010, 22:52
  • #
  • 0
В 1997 году BFS может и была крутой FS, но сейчас как-то не впечатляет. :-/
Я бы сказал так: в 97-ом BFS была крутой, сейчас это просто файловая система для каких-то конкретных задач.
Ждём хабраеффекта на Open-life? ;)
Ой, уже не ждём, топик там, удалили, по понятным причинам.
Можно поподробнее?)
спасибо большое)))) ждем продолжение
Да уже готово :) Или вы хотите больше материала про BFS?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.