Обзор EldoS Solid File System - файловой системы в одном файле


Первый же возникающий вопрос, зачем и кому может потребоваться прятать файловую систему внутрь файла, требует развернутого ответа. Такие производители, как ID Software, Blizzard Entertainment и "1C", сочли подобную технологию полезной и в той или иной форме используют ее в своих весьма успешных продуктах. Высокая безопасность и эффективность выполнения файловых операций, независимость хранилища данных от платформы и типа физического носителя - это лишь некоторые задачи, решаемые таким странным на первый взгляд способом. Одно из доступных на рынке готовых решений - EldoS Solid File System - и станет предметом сегодняшнего обзора.

Необходимо сразу оговориться, что целевая аудитория рассматриваемого решения почти целиком ограничивается сообществом разработчиков программного обеспечения. Рядовому же пользователю могут быть интересны продукты, базирующиеся на этом решении. Поставляемая с дистрибутивом утилита SolFS Explorer, к сожалению, полноценным примером такого продукта служить не может в силу ограниченности функционала. Однако ее исходный код (несмотря на полное отсутствие комментариев) будет полезен при написании собственных программ, использующих библиотеку SOLFS.DLL.

В качестве примера коммерческого продукта, ориентированного на конечного пользователя, стоит упомянуть liveye BladeBox eXtreme, в котором используется EldoS SolFS Driver Edition.

Краткий обзор функциональности Solid File System

  • Гибкость
    • Возможность выбора оптимального размера страницы.
    • Поддержка более одного потока данных на файл, что делает возможным логическое объединение: к содержащему изображение файлу может быть прикреплена текстовая заметка или к файлу с табличными данными — описание структуры таблицы.
    • Возможность дополнения стандартных файловых атрибутов собственными.
    • Отсутствие ограничений на одновременный доступ к различным хранилищам, а также на одновременный доступ из нескольких порожденных процессов.
    • Независимость от контейнера и платформы.
    • Поддержка всех общепринятых функций работы с файлами и директориями, включая поиск по маске.
  • Надежность
    • Журналирование операций.
    • Встроенные средства контроля целостности, восстановления и оптимизации.
    • Поддержка криптографических алгоритмов AES и SHA с длиной ключа 256 бит. Допускается избирательное шифрование данных на уровне файловых потоков, а также подключение пользователем собственных криптосхем.
  • Производительность
    • Повышение производительности файловых операций достигается благодаря значительному сокращению количества системных вызовов. Разработчики SolFS делают особый упор на этом аспекте, однако проверить его на практике затруднительно без (1) разработки адекватной методики тестирования и (2) написания некоего синтетического теста, что выходит за рамки нашего обзора.

Остановимся подробнее на отдельных аспектах.

Размер страницы

Разработчики современных мультимедийных приложений (в первую очередь игровых), оперирующих большим количеством файлов, сталкиваются с проблемой эффективного хранения и доступа к данным. Не вдаваясь глубоко в подробности, отметим одну особенность организации многих файловых систем, вследствие которой любому файлу вне зависимости от его размера выделяется не менее одного кластера (это не всегда так для NTFS: файлы длиной несколько сотен байт могут храниться целиком в служебной области MFT, не занимая ни одного кластера), состоящего из N идущих подряд секторов стандартной емкости (512 байт для HDD, 2048 для CD/DVD). На больших дисковых разделах значение N может быть достаточно велико, как следствие, объем фактически занимаемого файлом дискового пространства может в десятки и даже сотни раз превышать объем хранимой в этом файле полезной информации. Такая избыточность оправданна в случае, когда предполагается рост размера файла, что, в частности, характерно для лог-файлов.

Файл меньшего, чем кластер, размера
Файл "меньшего", чем кластер, размера

На примере некоторых CD-энциклопедий, содержащих тысячи небольших файлов в одной директории, хорошо заметны снижение скорости доступа к данным, а также низкая эффективность использования дискового пространства. Очевидно, для многих задач можно подобрать значение N, близкое к оптимальному, беда лишь в том, что размер кластера определяется на этапе форматирования раздела и, хотя существуют специализированные утилиты, позволяющие изменить размер кластера без переформатирования, отнюдь не каждое приложение может рассчитывать на такую роскошь, как специально для него подготовленный дисковый раздел. В случае же использования SolFS понятие кластера становится неактуальным: атомом данных в пределах контейнера является страница (ближайшая аналогия — сектор), требуемый размер которой можно легко выбрать сообразно специфике конкретного приложения и тем самым оптимизировать доступ к данным.

Независимость от контейнера

Рассматриваемое решение весьма примечательно своей гибкостью: файловая система создается практически в любом контейнере, будь то файл, запись в базе данных или просто выделенная область памяти. Кроме того, получить доступ в организованное с помощью SolFS хранилище данных могут приложения, работающие под различными платформами: Windows, Unix/Linux, .NET и PDA, при этом версия Embedded Edition доступна в виде исходных текстов, соответствующих стандарту ANSI C, что дает возможность компиляции в экзотической среде. Подобная всеядность должна заметно облегчить жизнь разработчикам, занятым в кросс-платформенных проектах.

Журналирование

Другой важный аспект — журналирование операций. Этот механизм исключает ситуацию неопределенного состояния файловой системы из-за внезапного останова, то есть обеспечивает ее целостность (подчеркнем: как и в случае с NTFS, речь не идет о гарантии целостности отдельного файла). Комплексные операции разбиваются на атомарные, давая возможность выполнить корректный откат в случае сбоя в процессе записи, например. Пользователям Windows 9x должны быть хорошо знакомы вереницы потерянных кластеров, сохраняемых при восстановлении в корневой директории как файлы FILE001.CHK, FILE002.CHK и т. д., — прямое следствие отсутствия в FAT16/FAT32 механизма журналирования.

Прочее

Документация доступна в виде .CHM-файла, содержащего описание трех основных классов (SolFSStorage, SolFSStream и EStorageError), а также функций и обработчиков событий, с помощью которых и выполняются все действия над хранилищем данных.

Особенности лицензирования

Функционал бесплатной ознакомительной версии ограничен: некоторые операции выполняются с задержкой, также недоступно шифрование. Однако разработчики с готовностью и без проволочек предоставляют ограниченную по времени полнофункциональную лицензию на любую из поставляемых версий. Для оценки пригодности SolFS в конкретном проекте достаточно оформить запрос через онлайн-форму.

На платформах Windows и Pocket PC пользователь получает выбор: для (eMbedded) Visual C++ доступна как статическая, так и динамическая сборка, для Delphi и C++ Builder - только статическая. В случае с динамической сборкой потребуется поместить файл SolFS.DLL в директорию приложения пользователя — коммерческая лицензия позволяет делать это бесплатно, запрещено только распространение исходного кода SolFS. Лицензионные отчисления (royalty) не требуются.

Корпоративная лицензия предусматривает возможность установки на любое количество принадлежащих компании рабочих мест в пределах одной страны. Персональная лицензия допускает установку на неограниченное число компьютеров при условии, что всеми инсталляциями будет пользоваться один и тот же разработчик. Этот вариант лицензии делает решение привлекательным для разработчиков-одиночек, поскольку при вполне разумной цене позволяет использовать в небольших проектах готовое решение без дополнительных затрат, перекладываемых на покупателя их собственного продукта. Для разработчиков объектов ActiveX или Delphi, а также других библиотек, предназначенных для использования в третьих проектах, предусмотрена специальная лицензия (Middleware license).

Выводы

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

  • ID Software — .WAD-файлы в DOOM I/II, .PAK-файлы в играх на движке Quake I/II/III/IV;
  • Blizzard Entertainment — .MPQ-файлы в играх Warcraft III, Diablo II;
  • 1C — файл мета-данных платформы 7.x.

Очевидно, что далеко не в каждом проекте использование SolFS необходимо и оправданно. Однако в тех случаях, когда успешная реализация проекта определяется эффективным и безопасным управлением данными, в отсутствие собственных наработок применение готового решения может быть целесообразно, как минимум, с целью экономии затрат сил и времени на изобретение велосипеда.





Дополнительно

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.