Zabezpieczanie karty SD przed uszkodzeniem

11

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.
SF.
źródło
3
Prawdopodobnie już to rozważałeś, ale warto wspomnieć o innych, którzy zastanawiają się nad tym pytaniem: większość kart flash (SD, CF itp.) Ma tolerancję zapisu wynoszącą co najwyżej kilka tysięcy cykli. Używanie zwykłych kart do rejestrowania danych lub podobnych zadań ostatecznie je zabije (i zwykle w krótszym czasie, niż ludzie myślą).
Chris S
@ChrisS: Jest to w przeważającej mierze tylko append i zastępuje najstarsze najnowsze wpisy, ma nieodłączny charakter bardzo dobrego równoważenia obciążenia zapisów, zwłaszcza że miesiące wypełniają kartę. Problem może dotyczyć samego wpisu FAT, ale ufam, że kontroler ma w tym coś sensownego.
SF.
Jaki jest koszt, jeśli urządzenie jest wyłączone i nie zapisuje tych danych na karcie? Czy jeśli dane diagnostyczne nie zostaną zapisane, stracisz dużo czasu lub pieniędzy, czy po prostu nie będziesz mieć plików dziennika?
Freiheit
1
@ Freiheit: Brakuje raczej niejasnej, choć nie zupełnie nieistotnej funkcji sprzedawanej klientom, a dodatkowo w przypadku, gdy ktoś inny naprawdę źle spieprzy i szuka kozła ofiarnego, tracimy jedną z możliwości obrony w sądzie. Rzecz w tym, że dane przed prawdopodobną awarią są najcenniejsze - dowód na to, że urządzenie działało poprawnie do ostatniej chwili, a nie że jego wina spowodowała eskalację wydarzeń w katastrofę.
SF.
Odnotowany. Wyraźnie rejestrujesz dane dotyczące czegoś ważnego!
Freiheit

Odpowiedzi:

8

Możesz użyć block2mtdsterownika 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ć.

the-wabbit
źródło
Z miesiącem lub dwoma, aby wypełnić kartę SD 2 GB, osiągnięcie limitu zużycia nawet przy całkowicie losowym równoważeniu obciążenia nie powinno stanowić problemu.
SF.
5

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;)

rackandboneman
źródło