Moje wbudowane urządzenie linux korzysta z karty SD do zapisywania niektórych danych diagnostycznych, co jest zdecydowanie zbyt obszerne, aby możliwe było użycie wewnętrznej pamięci flash.
Problem polega na tym, że jeśli urządzenie zostanie nieoczekiwanie wyłączone, system plików (FAT32) na karcie jest uszkodzony.
Nie ma sposobu, aby zapobiec nieoczekiwanym przerwom w zasilaniu lub takiemu wyłączeniu przez użytkownika, a urządzenie powinno być względnie bezobsługowe. Co gorsza, dane są zapisywane w sposób ciągły, więc uszkodzenia są bardzo częste, a Linux po wykryciu wadliwego systemu FS instaluje je tylko do odczytu w trybie cichym.
Jakie metody byś to złagodził? Czy uruchomienie fsck.vfat automatycznie przy starcie wystarczy?
Więcej informacji:
- Karty nie należy uważać za wyjmowaną przez użytkownika. Należy to traktować jako dysk wewnętrzny. Wszelkie przechowywane na nim dane będą dostępne do pobrania przez sieć lub dysk USB, a system automatycznie usunie najstarsze wpisy. Oznacza to, że nie musi być czytelny na przeciętnym komputerze.
- System obsługuje obecnie FAT, yaffs i jffs2. Dodanie innych systemów plików do jądra jest możliwe, ale jeśli istnieją inne ścieżki, wolelibyśmy je najpierw.
- Zapis może zostać zawieszony na żądanie nawet na kilka minut bez utraty danych.
- dopuszczalna jest częściowa utrata danych lub niewielkie uszkodzenie. Całkowite zatrzymanie rejestrowania nie jest.
- zdarzenia wyłączenia są przez większość czasu całkowicie nieprzewidywalne.
- system działa na ARM9, 200 MHz, 64 MB pamięci RAM, 32 MB wewnętrznej pamięci flash i zużywa większość mocy procesora do swojej podstawowej roli. Weź to pod uwagę, myśląc o fantazyjnych rozwiązaniach wymagających dużych zasobów.
Odpowiedzi:
Możesz użyć
block2mtd
sterownika do korzystania z transakcyjnych systemów plików jffs2 lub yaffs (2), które wydają się zatrudniać gdzie indziej dla twojej karty SD, co rozwiązałoby problem utraty danych lub uszkodzenia systemu plików przy wyłączaniu.Może to jednak powodować inne problemy. Ponieważ karta SD prawdopodobnie ma własne mechanizmy wyrównywania zużycia i ponownego mapowania sektora, mogą one zakłócać implementacje jffs2 i yaffs, aby zrobić to samo, zmniejszając żywotność lub wydajność karty SD. Jeśli to nie jest problem, warto spróbować.
źródło
Sprawdź, czy używane jądro obsługuje flush i / lub flagę synchronizacji dla vfat (wydaje się, że niektóre wersje go ignorują, bądź ostrożny!).
Lub po prostu zrezygnuj z systemu plików, jeśli wszystko może przejść do jednego pliku (jak w przypadku surowego strumienia dziennika!) Lub do kilku plików o stałym rozmiarze (użyj partycji;)
źródło