Издаване на устойчива файловата система LittleFS 2.10

Публикувана е версия 2.10 на проекта LittleFS, който развива компактна файлова система за вградени устройства и микроконтролери. Първоначално файлова система е създадена от ARM за операционната система Mbed OS, но по-късно е отделена в самостоятелен проект. Кодът на файловата система е написан на C и се разпространява под BSD лиценз. Референтната реализация на LittleFS се предлага под формата на C библиотека, на база на която е създаден FUSE модул и обвивки за различни програмни езици.

Характеристики на LittleFS:

  • Ниски изисквания към ресурсите и поддръжка на работа в условия на ограничен размер на RAM. В реализацията на LittleFS се използват само статично определени буфери (без динамично разпределение на паметта) и не се използват рекурсивни повиквания, благодарение на което размерът на заетата оперативна памет и служебните структури на LittleFS на носителя винаги остава постоянен, независимо от това какво се записва в файловата система и какъв е размерът на хранилището.
  • Средства за изравняване на износването на Flash носители (wear leveling), които позволяват минимизиране на повторното използване на блокове и равномерно разпределение на операциите за почистване на блокове в Flash паметта, чийто контролер не осигурява решение на тази задача.
  • Изключителна устойчивост на сривове — ФС разглежда случайното прекратяване на работа (завършване на работа поради прекъсване на захранването) като нормална ситуация и гарантира, че съ хранилището на диска е в непроменено състояние по всяко време. За да се избегне нарушаване на целостта и загуба на данни, се прилага механизъм copy-on-write (COW), при който промените не презаписват информацията, а се съхраняват на ново място.
  • Атомарност на извършваните операции, като изтриване и преименуване, дори в случай на загуба на захранване по време на тяхното изпълнение. Промените на файла се записват на диска само след извикване на sync или close. Несъответствията, причинени от операции, които не могат да бъдат извършени атомарно, се решават от специален обработчик deorphan, който преминава през цялото дърво на файловата система след зареждане.
  • Поддръжка на функции, подобни на POSIX, за работа с файлове и директории.

Съдържанието на файловете в LittleFS е представено с COW-списъци CTZ, които осигуряват ниво на сложност O(1) при добавяне и O(nlogn) при четене. Разпределението на блоковете се извършва чрез сканиране на файловата система за използвани блокове в област с фиксирован размер, съхранявана под формата на битов вектор. За улесняване на сканирането, всички каталози са част от свързан списък, обхващащ цялата файловата система. Ако при писане на блок се установи грешка, се заделя нов блок и данните се прехвърлят в него.

Сред промените в новата версия на LittleFS:

  • Преработен е кодът за обработка на файлови пътища, което позволява поведението на файловата система да бъде приближено до системите POSIX и очакванията на потребителите в такива ситуации, като завършване на пътя с наклонена черта, обработка на празни пътища и навигация извън корена на файловата система.
  • Добавени са два нови примера за блочни устройства ramcrc32bd и ramrsbd, в които е реализиран механизъм за корекция на грешки, съвместим с LittleFS. В актуалния си вид файловата система LittleFS не поддържа определяне и коригиране на грешки, а тези операции се прехвърлят на ниво блочни устройства.
  • В функцията lfs_mkdir е добавена поддръжка на завършващи наклонени черти, т.е. извикването на lfs_mkdir(«a/») вече не води до извеждане на грешка.
  • В функциите lfs_stat и lfs_getattr сега се извежда грешка при използване на завършващи наклонени черти, ако съществуващият в файловата система път не е каталог.
  • Опитът за отваряне на файл чрез функцията lfs_file_open с завършваща наклонена черта в името сега ще води до грешка LFS_ERR_NOTDIR, ако файлът не е каталог в файловата система, LFS_ERR_ISDIR, ако името сочи към каталог в файловата система, и LFS_O_CREAT, ако файлът не съществува.
  • Опитът за достъп до границата на основната ФС, например, lfs_stat(«/../a»), вече ще води до извеждане на грешка.
  • Указването на празен път вече не е синоним на достъп до основната директория, т.е. извикването на lfs_stat(«») ще доведе до извеждане на грешка.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster