Uscita del file system tollerante agli errori LittleFS 2.10

È stato pubblicato il rilascio del progetto LittleFS 2.10, che sviluppa un file system compatto per dispositivi embedded e microcontrollori. Inizialmente, il file system è stato creato dall'azienda ARM per il sistema operativo Mbed OS, ma successivamente è stato trasferito a un progetto separato. Il codice del file system è scritto in linguaggio C e distribuito con licenza BSD. La realizzazione di riferimento di LittleFS è fornita come libreria C, sulla quale è stato creato un modulo FUSE e wrapper per diversi linguaggi di programmazione.

Caratteristiche di LittleFS:

  • Basse esigenze di risorse e supporto per il funzionamento in condizioni di dimensioni limitate della RAM. Nella realizzazione di LittleFS sono utilizzati solo buffer staticamente definiti (senza allocazione dinamica della memoria) e non vengono utilizzate chiamate ricorsive, il che consente di mantenere costante la dimensione della memoria operativa e delle strutture di servizio di LittleFS su storage, indipendentemente da ciò che viene scritto nel file system e dalla dimensione dello storage.
  • Strumenti per il livellamento dell'usura dei supporti Flash (wear leveling), che permettono di minimizzare il riutilizzo dei blocchi e di distribuire uniformemente le operazioni di cancellazione dei blocchi nella memoria Flash, il cui controller non offre una soluzione a questo problema.
  • Elevatissima resilienza ai guasti: il file system considera l'interruzione casuale dell'operazione (fine dell'operazione a causa dello spegnimento) come una situazione normale e garantisce che lo storage su disco rimanga integro in qualsiasi momento. Per escludere violazioni di integrità e perdite di dati, viene impiegato un meccanismo di copy-on-write (COW), in cui le modifiche non sovrascrivono le informazioni, ma vengono salvate in una nuova posizione.
  • Atomicità delle operazioni, come eliminazione e rinominazione, anche in caso di interruzione di corrente durante la loro esecuzione. Le modifiche ai file vengono scritte su disco solo dopo la chiamata di sync o close. Le incoerenze causate da operazioni che non possono essere eseguite in modo atomico vengono risolte da un gestore speciale chiamato deorphan, che attraversa tutte le strutture del file system dopo il caricamento.
  • Supporto per funzioni simili a POSIX per la gestione di file e directory.

Il contenuto dei file in LittleFS è rappresentato da liste COW-CTZ, che garantiscono un livello di complessità O(1) per l'aggiunta e O(nlogn) per la lettura. L'allocazione dei blocchi avviene tramite la scansione del FS per blocchi utilizzati in un'area di dimensione fissa, memorizzata sotto forma di vettore di bit. Per semplificare la scansione, tutte le directory fanno parte di una lista concatenata che copre l'intero file system. Se durante la scrittura di un blocco si verifica un errore, viene allocato un nuovo blocco e i dati vengono trasferiti in esso.

Tra le novità della nuova versione di LittleFS:

  • Il codice di analisi dei percorsi dei file è stato riprogettato, avvicinando il comportamento del FS a quello dei sistemi POSIX e alle aspettative degli utenti in situazioni come la chiusura del percorso con una barra, la gestione dei percorsi vuoti e la navigazione oltre la radice del FS.
  • Sono stati aggiunti due nuovi esempi di dispositivi a blocchi ramcrc32bd e ramrsbd, in cui è stato implementato un meccanismo di correzione degli errori compatibile con LittleFS. Al momento, il FS LittleFS non supporta la rilevazione e la correzione degli errori, e queste operazioni vengono gestite a livello di dispositivi a blocchi.
  • Nella funzione lfs_mkdir è stato aggiunto il supporto per le barre di chiusura, quindi la chiamata lfs_mkdir("a/") ora non genera più un errore.
  • Nelle funzioni lfs_stat e lfs_getattr ora viene visualizzato un errore quando si utilizzano barre di chiusura, se il percorso esistente nel FS non è una directory.
  • La tentativo di apertura tramite la funzione lfs_file_open di un file con una barra finale nel nome porterà ora a un errore LFS_ERR_NOTDIR, se il file non è una directory nel FS, LFS_ERR_ISDIR, se il nome si riferisce a una directory nel FS, e LFS_O_CREAT, se il file non esiste.
  • La tentativo di accesso oltre la radice del FS, ad esempio, lfs_stat("/../a"), porterà ora a un errore.
  • Specificare un percorso vuoto non è più sinonimo di accesso alla directory radice, quindi la chiamata lfs_stat("") genererà un errore.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster