Avaldatud on projekti LittleFS 2.10 väljaanne, mis arendab kompaktset failisüsteemi sisseehitatud seadmete ja mikroprotsessorite jaoks. Failisüsteem loodi algselt ettevõtte ARM poolt operatsioonisüsteemile Mbed OS, kuid hiljem eraldati see eraldi projektiks. Failisüsteemi kood on kirjutatud C keeles ja see levitatakse BSD litsentsi alusel. LittleFS-i viiteimplementatsioon on saadaval C-raamatukoguna, mille põhjal on loodud FUSE-moodul ja waabits erinevatele programmeerimiskeeltele.
LittleFS-i omadused:
- Madalaid ressursinõudeid ja tugi piiratud RAM-i tingimustes. LittleFS-i rakenduses kasutatakse ainult staatiliselt määratud puhvreid (ilma dünaamilise mälu eraldamiseta) ning rekursiivseid kutsed ei ole kasutusel, mistõttu jääb LittleFS-i kasutatav operatiivmälu ja teenindusstruktuurid salvestisse alati püsivaks, olenemata sellest, mis failideks salvestatakse ja kui suureks salvestus on.
- Flash-mäluseadmete kulumisvõrdsustamise tööriistad (wear leveling), mis aitavad minimeerida plokkide korduvat kasutamist ja jaotada võrdselt plokkide puhastamise operatsioone Flash-mälus, mille kontroller ei paku sellele probleemile lahendust.
- Väga kõrge rikkevastupidavus — FS käsitleb ootamatut töö lõpetamist (shut down to power loss) tavalise olukorrana ja tagab, et salvestus kettal on igal ajahetkel terve. Andmete terviklikkuse tagamiseks kasutatakse copy-on-write (COW) mehhanismi, kus muudatused ei kirjutata üle, vaid salvestatakse uude asukohta.
- Tehingute atomiseeritus, nagu kustutamine ja ümbernimetamine, isegi juhul, kui toide katkevad nende täitmise ajal. Faili muudatused salvestatakse kettale ainult pärast sync või close käsu täitmist. Ebatäpsused, mis tulenevad operatsioonidest, mida ei saa atomaarsetena täita, lahendab spetsiaalne deorphan töötleja, mis läbib kogu FS puu pärast laadimist.
- POSIX-sarnaste funktsioonide tugi failide ja kataloogide käsitlemiseks.
LittleFS-i failide sisu esitatakse COW-loenditena, mis tagavad O(1) keerukuse taseme lisamisel ja O(nlogn) lugemisel. Blokid eraldatakse, skaneerides failisüsteemi kasutatud plokkide osas fikseeritud suurusega piirkonnas, mis hoitakse bitivektorina. Skaneerimise lihtsustamiseks on kõik kataloogid osa seotud nimekirjast, mis katab kogu failisüsteemi. Kui ploki salvestamisel ilmneb viga, eraldatakse uus plokk ja andmed kantakse sinna üle.
Uues LittleFS-i versioonis tehtud muudatuste hulka kuuluvad:
- Failiteede analüüsi kood on ümber kujundatud, et tuua failisüsteemi käitumine lähemale POSIX-süsteemidele ja kasutajate ootustele olukordades, nagu tee lõpetamine kaldkriipsuga, tühjade teede töötlemine ja juurdepääs failisüsteemi juurest kaugemale.
- Lisatud on kaks uut näidet plokkseadmetest ramcrc32bd ja ramrsbd, milles on rakendatud LittleFS-iga ühilduv veakorrektiivsüsteem. Sellisel kujul ei ole LittleFS-is praegu toeks veadetektsiooni ja -korrigeerimise funktsioone ning need toimingud viiakse plokkseadmestiku tasandile.
- Funktsiooni lfs_mkdir on lisatud lõppsläsha toe, st funktsiooni lfs_mkdir(«a/») kutsumine ei põhjusta enam viga.
- Funktsioonides lfs_stat ja lfs_getattr kuvatakse nüüd viga, kui kasutatakse lõppsläsha, kui olemasolev FS tee ei ole kaust.
- Faili avamine funktsiooni lfs_file_open kaudu, millel on nime lõppsläsh, toob nüüd kaasa vea LFS_ERR_NOTDIR, kui fail ei ole kaust FS-s, LFS_ERR_ISDIR, kui nimi viitab kaustale FS-s, ja LFS_O_CREAT, kui fail ei eksisteeri.
- Katse pääseda juur FS-st väljaspool, näiteks lfs_stat(«/../a»), toob nüüd kaasa vea.
- Tühi tee ei ole enam sünonüüm juurkausta kutsumiseks, st funktsiooni lfs_stat(«») kutsumine toob kaasa vea.
Allikas: opennet.ru
