Pracujemy nad małym wbudowanym systemem Linux (wersja 2.6.35) z niewielkim wewnętrznym urządzeniem NAND dla systemu operacyjnego i aplikacji (250-500 Meg) oraz kartą SD z kartami SDHC SD 8 Gb do przesyłania danych.
Moc urządzenia można odłączyć w dowolnym momencie.
System musi przechowywać dane na kartach SD. Te dane są bardzo ważne ... to cały cel systemu. Systemy są zwykle całkowicie odłączone od dowolnej sieci w zdalnych lokalizacjach, a dane są pobierane przez sneakernet co 4-8 tygodni.
Obecnie mamy po prostu VFAT na kartach SD. Było tak głównie dlatego, że pierwsi klienci testowi mogli łatwo skopiować dane ręcznie na swoje laptopy Win7.
Jednak martwię się teraz, że to tylko kwestia czasu, zanim awaria zasilania w niewłaściwym czasie spowoduje utratę danych.
Jaki jest najlepszy sposób skonfigurowania takiego systemu, aby zapobiec utracie danych? JFFS2 brzmi tak, jak chciałbym, jeśli chodzi o sposób zapisywania danych (a potrzeby w zakresie wydajności wcale nie są wysokie), ale użycie block2mtd wydaje się dość kludgy, itp. Nie jestem również pewien, w jaki sposób będzie współdziałać poziomowanie zużycia karty z tym.
Jak najlepiej to zrobić?
EDYTOWAĆ
Zastanawiam się teraz nad opuszczeniem systemu plików VFAT i jednoczesnym przydzielaniem plików wielkości dziennej, wypełnionych 0xFF, co powinno znacznie ograniczyć narażenie na awarie cyklu zasilania. Mógłbym wtedy dołączyć tylko rekordy w tych wstępnie przygotowanych blokach i mam nadzieję, że karty SD nie są tak głupie, że wymazaliby / zużywały poziom zapisu do regionów 0xFF.
Mogę używać noatime, ale czy istnieje odpowiednik nomtime VFAT, aby zapobiec zapisom w zmodyfikowanym polu czasu? Potrzebuję jakiegoś sposobu, aby w ogóle zapobiec aktualizacjom metadanych, dopóki nie zostanie utworzony plik nowego dnia.
EDYCJA 2
Ktoś na wymianie stosu elektroniki przypomniał mi, że istnieją również dane ECC w NAND, więc nie ma sposobu, aby zapobiec potrzebie kasowania.
Czy więc JFFS2 przez block2mtd byłby odpowiedni w tej sytuacji?
EDYCJA 3
Gorzej niż myślałem. Karty SD, które mam, usuwają bloki danych, nawet jeśli zapisujesz dokładnie taką samą zawartość na dysku. Bloki kasowania mają rozmiar 64 KB i są zbyt duże, aby całkowicie opóźnić zapisywanie. Będę przechowywać do 128 KB danych w pamięci flash NAND (którą mogę kontrolować zachowanie zapisu), w pewnego rodzaju dzienniku, a następnie zapisz bloki 128 KB w pliku wyrównanym do 128 KB na partycji VFAT na karcie SD (w jeśli inne karty SD mają blokady usuwania 128 KB).
sync
polecenia po każdym zapisie na karcie SD, zapisuje on bity natychmiast po ich zmianie / utworzeniu bez przechowywania ich w pamięci RAM, dzięki czemu Twoje zmiany będą przynajmniej na karcie i nie przejdzie przez utratę mocy.
sync
prawdopodobnie pogorszyłoby sprawę, ponieważ zwiększa ułamek czasu, gdy metadane są w trakcie aktualizacji.