Lansarea sistemului de fișiere rezistent LittleFS 2.10

A fost publicată versiunea 2.10 a proiectului LittleFS, care dezvoltă un sistem de fișiere compact pentru dispozitive încorporate și microcontrolere. Inițial, sistemul de fișiere a fost creat de compania ARM pentru sistemul de operare Mbed OS, dar ulterior a fost separat într-un proiect distinct. Codul FS este scris în limbajul C și este distribuit sub licența BSD. Implementarea de referință a LittleFS este livrată sub formă de bibliotecă C, pe baza căreia este creat un modul FUSE și legături pentru diverse limbaje de programare.

Caracteristici LittleFS:

  • Cerințe reduse de resurse și suport pentru operarea în condiții de dimensiuni limitate ale RAM-ului. În implementarea LittleFS sunt folosite doar buffere definite static (fără alocări dinamice de memorie) și nu sunt utilizate apeluri recursive, ceea ce face ca dimensiunea memoriei RAM consumate și structurile de serviciu ale LittleFS pe medii de stocare să rămână întotdeauna constante, indiferent de ceea ce este scris în FS și de dimensiunea stocării.
  • Mecanisme pentru echilibrarea uzurii suporturilor Flash (wear leveling), care permit minimizarea reutilizării blocurilor și distribuirea uniformă a operațiunilor de ștergere a blocurilor pe memoria Flash, al cărei controler nu asigură o soluție pentru această problemă.
  • O foarte mare rezistență la defecțiuni — FS consideră oprirea aleatorie a funcționării (finalizarea prin deconectarea alimentării) ca o situație normală și garantează că stocarea pe disc se află într-o stare integră în orice moment. Pentru a evita deteriorarea integrității și pierderile de date este aplicat mecanismul copy-on-write (COW), prin care modificările nu suprascriu informația, ci sunt salvate într-o nouă locație.
  • Atomitatea execuției operațiunilor, cum ar fi ștergerea și redenumirea, chiar și în cazul pierderii alimentării în timpul desfășurării acestora. Modificările fișierului sunt scrise pe disc doar după apelarea sync sau close. Inconcordanțele cauzate de operațiuni care nu pot fi efectuate atomic sunt rezolvate de un handler special de tip deorphan, care parcurge întreaga structură a FS după încărcare.
  • Suport pentru funcții similare cu POSIX pentru lucrul cu fișiere și directoare.

Conținutul fișierelor din LittleFS este reprezentat prin listele COW CTZ, care oferă un nivel de complexitate O(1) pentru adăugare și O(nlogn) pentru citire. Alocarea blocurilor se face prin scanarea FS-ului pentru blocurile utilizate într-un domeniu de dimensiune fixă, stocat sub formă de vector de biți. Pentru a simplifica scanarea, toate directoarele fac parte dintr-o listă înlănțuită care acoperă întregul sistem de fișiere. Dacă, la scrierea unui bloc, apare o eroare, se alocă un bloc nou și datele sunt transferate în acesta.

Printre modificările din noua versiune LittleFS:

  • Codul de analiză a căilor fișierelor a fost revizuit, ceea ce a permis alinierea comportamentului FS-ului la sistemele POSIX și așteptările utilizatorilor în astfel de situații, cum ar fi finalizarea căii cu un slash, gestionarea căilor goale și navigarea dincolo de rădăcina FS-ului.
  • Au fost adăugate două exemple noi de dispozitive de blocare ramcrc32bd și ramrsbd, în care este implementat un mecanism de corectare a erorilor compatibil cu LittleFS. În prezent, FS-ul LittleFS nu suportă determinarea și corectarea erorilor, iar aceste operațiuni sunt mutate la nivelul dispozitivelor de blocare.
  • Funcției lfs_mkdir i s-a adăugat suport pentru slash-uri finale, adică apelul lfs_mkdir("a/") nu va mai duce la o eroare.
  • În funcțiile lfs_stat și lfs_getattr, acum se va returna o eroare la utilizarea slash-urilor finale, dacă calea existentă în FS nu este un director.
  • Cercetarea unui fișier prin funcția lfs_file_open cu un slash final în nume va duce acum la eroarea LFS_ERR_NOTDIR, dacă fișierul nu este un director în FS, LFS_ERR_ISDIR, dacă numele se referă la un director în FS, și LFS_O_CREAT, dacă fișierul nu există.
  • Încercarea de a accesa dincolo de rădăcina FS-ului, de exemplu, lfs_stat("/.../a"), va genera acum o eroare.
  • Specificația unei căi goale nu mai este un sinonim pentru accesarea directorului rădăcină, adică apelul lfs_stat("") va duce la o eroare.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster