Wydanie odpornej na awarie systemu plików LittleFS 2.10

Opublikowano wydanie projektu LittleFS 2.10, który rozwija kompaktowy system plików dla urządzeń wbudowanych i mikrokontrolerów. Początkowo system plików został stworzony przez firmę ARM dla systemu operacyjnego Mbed OS, ale następnie wydzielono go jako osobny projekt. Kod FS jest napisany w języku C i jest dystrybuowany na licencji BSD. Referencyjna implementacja LittleFS dostarczana jest w postaci biblioteki C, na bazie której stworzono moduł FUSE oraz opakowania dla różnych języków programowania.

Cechy LittleFS:

  • Niskie wymagania dotyczące zasobów i wsparcie dla działania w warunkach ograniczonego rozmiaru RAM. W implementacji LittleFS stosowane są wyłącznie statycznie określone bufory (bez dynamicznego przydzielania pamięci), a wywołania rekurencyjne nie są używane, dzięki czemu rozmiar zajmowanej pamięci operacyjnej i struktury pomocnicze LittleFS na nośniku zawsze pozostają stałe, niezależnie od tego, co jest zapisywane w FS i jakiego rozmiaru jest pamięć.
  • Środki do wyrównywania zużycia nośników Flash (wear leveling), które minimalizują ponowne użycie bloków i równomiernie rozkładają operacje czyszczenia bloków w pamięci Flash, której kontroler nie oferuje rozwiązania w tej kwestii.
  • Bardzo wysoka odporność na awarie — FS traktuje przypadkowe przerwanie pracy (zakończenie pracy przez odłączenie zasilania) jako sytuację normalną i gwarantuje utrzymanie integralności danych na dysku w każdej chwili. Aby zapobiec naruszeniu integralności i utracie danych, stosowany jest mechanizm copy-on-write (COW), w którym zmiany nie nadpisują informacji, lecz są zapisywane w nowym miejscu.
  • Atomowość wykonywania operacji, takich jak usuwanie i zmiana nazwy, nawet w przypadku utraty zasilania w trakcie ich wykonywania. Zmiany w pliku są zapisywane na dysku dopiero po wywołaniu sync lub close. Niespójności wywołane operacjami, które nie mogą być wykonane atomowo, są rozwiązywane przez specjalny procesor deorphan, który przeszukuje całe drzewo FS po załadowaniu.
  • Wsparcie dla funkcji podobnych do POSIX do pracy z plikami i katalogami.

Zawartość plików w LittleFS jest reprezentowana przez listy COW (Copy-On-Write) CTZ, co zapewnia złożoność O(1) przy dodawaniu i O(nlogn) przy odczycie. Przydzielanie bloków odbywa się poprzez skanowanie systemu plików w celu zidentyfikowania używanych bloków w obszarze o stałej wielkości, przechowywanym w postaci wektora bitowego. Aby uprościć skanowanie, wszystkie katalogi są częścią listy powiązanej, obejmującej cały system plików. Jeśli podczas zapisywania bloku wystąpi błąd, przydzielany jest nowy blok, a dane są w nim przenoszone.

Wśród zmian w nowej wersji LittleFS:

  • Przerobiono kod analizy ścieżek plików, co pozwoliło przybliżyć działanie systemu plików do systemów POSIX oraz oczekiwań użytkowników w takich sytuacjach, jak zakończenie ścieżki ukośnikiem, obróbka pustych ścieżek i nawigacja poza korzeniem systemu plików.
  • Dodano dwa nowe przykłady urządzeń blokowych ramcrc32bd oraz ramrsbd, które wdrażają mechanizm korekcji błędów kompatybilny z LittleFS. W obecnej formie w samym systemie plików LittleFS brakuje wsparcia dla wykrywania i korekcji błędów, a operacje te są przenoszone na poziom urządzeń blokowych.
  • Funkcja lfs_mkdir zyskała wsparcie dla końcowych ukośników, tzn. wywołanie lfs_mkdir("a/") teraz nie prowadzi do wyświetlenia błędu.
  • W funkcjach lfs_stat i lfs_getattr teraz wyświetla się błąd przy używaniu końcowych ukośników, jeśli istniejąca w systemie plików ścieżka nie jest katalogiem.
  • Próba otwarcia pliku za pomocą funkcji lfs_file_open z końcowym ukośnikiem w nazwie teraz prowadzi do błędu LFS_ERR_NOTDIR, jeśli plik nie jest katalogiem w systemie plików, LFS_ERR_ISDIR, jeśli nazwa odnosi się do katalogu w systemie plików, oraz LFS_O_CREAT, jeśli plik nie istnieje.
  • Próba dostępu poza korzeń systemu plików, np. lfs_stat("/../a"), teraz kończy się wyświetleniem błędu.
  • Określenie pustej ścieżki teraz nie jest synonimem dostępu do katalogu głównego, tzn. wywołanie lfs_stat("") zakończy się błędem.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster