Представлена LittleFS, компактная файловая система для встраиваемых устройств

Проект Mbed OS, в рамках которого компания ARM развивает открытую ОС для устройств «Интернета вещей», представил новую файловую систему LittleFS, оптимизированную для встраиваемых систем. Код ФС написан на языке Си и распространяется под лицензией Apache 2.0. ФС LittleFS доступна в составе Mbed OS 5.7, как FUSE-модуль для монтирования из Linux, в форме Си-библиотеки для интеграции с приложениями и как обвязка для JavaScrpt (emscripten) для обращения к данным из браузера.

Реализация LittleFS включает около 2000 строк кода, система не требовательна к ресурсам и может работать в условиях ограниченного размера ОЗУ. В коде не используются рекурсивные вызовы и возможна работа без динамического выделения памяти с использованием статически определённых буферов. В отличие от других ФС для Flash-накопителей, построенных на основе структур данных в форме лога, в LittleFS размер потребляемой оперативной памяти и служебных структур на накопителе всегда остаётся постоянным, не зависимо от того, что записывается в ФС и какого размера хранилище.

LittleFS включает программные средства для выравнивания износа Flash-носителей (wear leveling), позволяющие минимизировать повторное использование блоков и равномерно распределить операции очистки блоков на Flash-памяти, контроллер которой не обеспечивает решение данной задачи.

Важной для встраиваемой техники особенностью LittleFS также является устойчивость к сбоям — ФС рассматривает случайное прекращение работы (завершение работы через отключение питания) в качестве штатной ситуации и спроектирована для гарантирования нахождения хранилища на диске в целостном состоянии в любой момент времени. Для исключения нарушения целости и потери данных применяется механизм copy-on-write (COW), при котором изменения не перезаписывают информацию, а сохраняются в новое место.

Структуру LittleFS составляет набор блоков директорий. Каждая директория имеет связанный список пар метаданных, которые могут обновляться атомарно через изменение указателя на активный блок метаданных. Блоки директорий включают ссылки на другие файлы или директории. Содержимое файлов представлено COW-списками CTZ, обеспечивающими уровень сложности O(1) при добавлении и O(nlogn) при чтении. Выделение блоков осуществляется через сканирование ФС на предмет использованных блоков в области фиксированного размера, хранимой в виде битового вектора. Для упрощения сканирования все директории являются частью связанного списка, охватывающего всю файловую систему. Если при записи блока определяется ошибка, то выделяется новый блок и данные переносятся в него.

Поддерживается полный набор POSIX-подобных функций для работы с файлами и каталогами. Обеспечивается атомарность совершения таких операций, как удаление и переименование, даже в случае пропадание питания во время их выполнения. Фактически изменения файла сбрасываются на диск только после вызова sync или close. Рассогласования, вызванные операциями, которые не могут быть выполнены атомарно, решаются специальным обработчиком deorphan, который проходит по всему дереву ФС при первом распределении после загрузки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.