System plików, który nigdy się nie psuje (dopuszczalna utrata danych)

9

Istnieje kilka istniejących tematów dotyczących tego problemu, ale to, czego szukam, jest nieco inne. Mam kartę SD na wbudowanym Linuksie i cierpi na utratę zasilania. Być może będę w stanie zmodyfikować sprzęt w pewnym momencie, poprawnie zamknąć itd. Ale teraz chciałbym znaleźć system plików, który przetrwałby utratę zasilania bez kłopotów. Utrata danych jest dopuszczalna. Wolałbym nie stracić więcej niż plik, który obecnie piszę, ale wolałbym to wszystko stracić niż stawić czoła „niemożności zamontowania”, „poczekać 10 minut fsck” lub „nie mogę utworzyć nowego plik z powodu tego i-węzła coś coś błąd ”. Program MUSI być kontynuowany!

Staram się to zapewnić. Używam komponentów klasy przemysłowej, mam watchdogi sprzętowe, watchdogi programowe, wewnętrzne, zewnętrzne, init restartujący programy, demony stale sprawdzające pamięć, deskryptory plików i tak dalej, mam watchdogi oglądające moje watchdogi, które z kolei są obserwowane przez inne watchdogi ... Ale nie mogę zagwarantować, że karta SD jest w stanie zamontować i działać?

Teraz moim najlepszym założeniem jest użycie JFS na karcie SD, włączenie fsck i fsck.jfs w mojej instalacji. (Dodanie 600kb + zjadanie pamięci RAM i flash. Co jest złe.) I uruchamiaj fsck przy każdym uruchomieniu (może dodając dużo czasu rozruchu. Co jest nieco złe.) To wydaje się trochę smutne.

Czy ktoś wie o lepszym sposobie lub lepszym systemie plików?

AKTUALIZACJA: e2fsprogs-libs (zależność od jfsutils) wydaje się być piekielnie trudny do skompilowania w mojej dystrybucji. Zajrzę do ZFS (nie jest to jednak natywne dla mojej dystrybucji. I wydaje się, że robi wiele, czego nie potrzebuję.)

AKTUALIZACJA 2: Więcej informacji o moim systemie i moich testach: Pamięć na karcie SD jest dodatkowym, opcjonalnym miejscem do przechowywania. Karty SD to microSD klasy przemysłowej 2 Gb-8 Gb. Karta SD jest montowana przez mój rc za pomocą polecenia mount -t. Opcje „noatime”, ale nie „synchronizacja”. Moja dystrybucja to niestandardowy uClinux o smaku urządzeń analogowych, z jądrem 3.10 i zajętym 1.21. Moja podstawowa pamięć to spi flash z jffs2. Nigdy nie miałem z tym żadnych problemów. Nie wiem nawet, czy jest dostępny plik fsck.jffs2. Z drugiej strony Nand flash ... ale to inna historia. Karta SD służy do przechowywania danych pomiarowych. Program „monitor” dołącza wyniki do pliku i ma strategiczne miejsca synchronizacji. Gdy plik przekroczy określony rozmiar, zostanie utworzony nowy. Po osiągnięciu określonej liczby plików najstarszy plik zostanie usunięty. Jeśli bieżący plik pomiarowy zostanie utracony z powodu utraty zasilania, nie będzie to katastrofą. Pliki mają zwykle 50-100 kb, a 1 wynik to zwykle 1 kb. To tylko wstępna faza rozwoju. Nic nie jest naprawione. Po raz pierwszy mam do czynienia z systemami plików innymi niż Flash w systemach osadzonych. (Mam ext4 na moich serwerach x86).

Zacząłem od tłuszczu. Domyślny system plików. (Uznałem, że fabryki mogą mieć powód, aby to wybrać. A jeśli coś działa, nie obchodzi mnie to tak bardzo.) Nigdy nie widziałem problemów z utratą zasilania w moich wbudowanych urządzeniach VATF. Wystąpiły jednak problemy z FAT w WinCE. Jednak gdy mój program „monitorujący” osiągnął 100-200 plików, odmówił utworzenia. Wygląda na to, że FAT ma specjalny problem z limitem plików w katalogu głównym i nieco większy w podkatalogach. Muszę być w stanie stworzyć 500-1000 plików w 1 reż. Więc vfat nie zrobi.

Potem przełączyłem się na ext2. Jednak nie wstawiłem fsck podczas uruchamiania. (Nie wiedziałem, że muszę to zrobić.) W ciągu jednego dnia mój program „monitorujący” nie był w stanie utworzyć większej liczby plików z powodu błędu „coś iodź coś”. Nieszczęście!

Moje obecne rozwiązanie to ext2 z „e2fsck -y” podczas uruchamiania. Jak dotąd wydaje się to obiecujące. Ale e2fsck i cała koncepcja „fsck at startup” mnie dokucza. Sam e2fsck wydaje ponad 350kb mojej podstawowej pamięci flash i pamięci RAM. (Kiedy nie jest uruchomiony.) Co oznacza, że ​​to mój największy program. Jest większy niż zajęty. To prawie rywalizuje z moim jądrem.

Zastanawiałem się nad ext3. Zapisał metadane, które nie zaszkodziłyby. Wątpię jednak, na ile to pomoże. Myślę, że z moimi małymi plikami i kontrolowanymi synchronizacjami powinienem być objęty? Ma uporządkowaną sekwencję zapisu. Oznacza to, że dane są w pewnym stopniu rejestrowane. Może to jednak prowadzić do niedeterministycznych opóźnień. Co jest złe w mojej sytuacji. (Prawdopodobnie nie jest to problem.) Ma również funkcję zaplanowanej synchronizacji. Na przykład. zatwierdzać co 5 sekund. Myślę, że to zakłóca moje własne synchronizacje. Zbyt wiele zapisów jest złe dla kart SD. Nawet przemysłowe. Nie mogę znaleźć żadnej dokumentacji dotyczącej tego, jak to wyłączyć. A ext3 nadal wymaga uruchamiania fsck przy każdym uruchomieniu! Ale ext3 wciąż jest możliwe.

Ext4. Naprawi wiele problemów z wydajnością ext3. Jednak tak naprawdę nie potrzebuję wydajności. Wydaje się, że moja dystrybucja nie ma wbudowanego pliku mkfs.ext4 i fsck.ext4. Być może to nie jest problem. To może jednak. Na przykład. e2progs-libs (zależność od jfsutils) wydaje się mieć wiele problemów z kompilacją.

JFS, XFS, BRFSS. Wszystko obsługiwane przez moje jądro. Obecnie nie jest zawarty w moim skrzynce narzędziowej przestrzeni użytkownika. Wszystko wydaje się być dość dużymi, złożonymi systemami. I wszystkie wydają się wymagać odpowiednika „fsck” przy starcie?

Zastanawiałem się także nad rzuceniem własnego systemu plików: zawsze pisz 2 kopie tabeli plików. Podczas przemierzania wybiera ten z poprawnym CRC i najnowszym numerem sekwencyjnym. Wykonaj 2-etapową sekwencję zapisu. Przydziel tymczasowo, napraw przy zatwierdzeniu. Nie wymaga fsck. Obawiam się, że może to być trochę naiwne.

AKTUALIZACJA3: BTW, natura systemów wbudowanych (przynajmniej tego) polega na tym, że są one autonomiczne, bez opieki, poza zasięgiem i muszą działać przez lata. Przerażają mnie programy takie jak fsck, które mogą wymagać interakcji człowieka.

Illishar
źródło
1
Dlaczego nie po prostu zamontować systemu plików w trybie tylko do odczytu i stworzyć mały system plików do tego, co chcesz napisać?
Chris Down
Opcją może być również ZFS (dobra kontrola integralności danych).
Ouki
Jest to mały system plików do zapisu
Illishar
Tak, patrzyłem też na ZFS. Jednak poparcie dla tego nie jest specjalnie wyskakujące na moją twarz, kiedy patrzę na moją dystrybucję. I tak naprawdę nie martwię się o integralność danych. Chcę tylko, żeby się zamontował i działał.
Illishar
czy przeglądałeś btrfs.wiki.kernel.org/index.php/Main_Page , powinieneś edytować swoje pytanie w swoich badaniach, abyśmy mogli Ci pomóc bardziej efektywnie
Kiwy

Odpowiedzi:

2

W twojej historii jest trochę niespójności, a przynajmniej niejasności:

Wciąż wolałbym to wszystko stracić niż zmierzyć się z „niezdolnością do zamontowania”, „poczekać 10 minut fsck”

Sugeruje - chociaż tak naprawdę nie mówisz - że to problem, którego naprawdę doświadczasz. Ale wtedy:

e2fsprogs-libs (zależność od jfsutils) wydaje się być piekielnie trudny do skompilowania w mojej dystrybucji.

Oznacza to, że nie masz żadnego fsck , ponieważ e2fsprogs-libsjest to zależność, dla e2fsprogsktórej zapewnia e2fsck. Być może nadal jesteś w fazie planowania i nawet nie przetestowałeś systemu, na przykład ext4, ale zamiast tego doszedłem do wniosku, że powinieneś zacząć od JFS? Czy jest jakiś konkretny powód?

Zauważyłem na wymianie Raspberry pi (podstawową pamięcią pi jest także karta SD), że znaczna liczba użytkowników wydaje się być bardzo sfrustrowana tego rodzaju problemami, chociaż większość (w tym ja) nigdy tego nie miała wszystko. Na początku założyłem, że byli to ludzie nieświadomi faktu, że system powinien zostać całkowicie zamknięty, ale nie jest to trudny punkt do zrozumienia, gdy zostanie wyjaśniony, i są ludzie, którzy zgłaszają to, mimo że system został poprawnie zamknięty .

Powiedziałeś już, że potrzebujesz tego, aby móc tolerować przerwy w dostawie prądu (co jest dość uczciwe), ale wspominam o tym, ponieważ sugeruje to, że są jakieś pis lub niektóre karty SD lub kombinacja obu, które są po prostu podatne na uszkadza system plików z powodu jakiegoś zdarzenia (gwałtownego wzrostu?), które zdarza się regularnie albo po wyciągnięciu wtyczki, albo po jej ponownym włożeniu. Ja też NIE widziałem - i było mnóstwo czasu dla wielu ludzi na wypróbowanie - JAKIEKOLWIEK raporty o tym, że ktoś przeszedł na btrfs, jfs lub cokolwiek, a teraz problem został rozwiązany.

Inną tajemniczą rzeczą jest to, że nawet jeśli ludzie szarpią za przewód, nie powinno to regularnie powodować awarii systemu plików. Z pewnością zrobiłem to wiele razy w / pi i zdobywam, jeśli nie setki razy, w / w zwykłym systemie Linux (zasilanie zostało odcięte, system przestał reagować, jestem wyczerpany i zły, itp.) i chociaż widziałem niewielką utratę danych, nigdy nie widziałem, aby system plików został uszkodzony do tego stopnia, że ​​po szybkim fsck stał się bezużyteczny.

Ponownie, zakładając, że wszystkie te raporty są prawdziwe (nie rozumiem, dlaczego liczba ludzi kłamałaby na ten temat), dzieje się coś znacznie więcej niż zwykłe odmontowywanie, ale wydaje się, że wpływa to tylko na niewielki odsetek użytkowników, co sugeruje ponownie jakiś typowy defekt sprzętowy.

Na pi piszę -ydo /forcefsckw skrypcie startowym, tak, że na następnym rozruchu zostanie uruchomiony automatycznie, a wszelkie problemy są stałe, niezależnie od tego, czy wydaje się być konieczne, czy nie. W przypadku pojedynczego rdzenia 700 MHz zajmuje to około 10 sekund dla systemu plików 12 GB zawierającego ~ 4 GB danych. Zatem „10 minut” brzmi niewiarygodnie długo, zwłaszcza że już powiedziałeś „To jest mały system plików do zapisu!”.

Możesz również rozważyć dzwonienie syncw regularnych odstępach czasu.

Na koniec powinieneś zaktualizować pytanie o bardziej oparte na faktach, szczegółowe szczegóły problemów , które faktycznie napotkałeś, i mniej hiperboli. W przeciwnym razie po prostu wygląda to zbyt wcześnie na problem XY , który prawdopodobnie zostanie szybko pominięty przez osoby z dużym doświadczeniem i potencjalnymi poradami dla Ciebie.

Złotowłosa
źródło
W rzeczywistości mój e2fsck jest w stanie skompilować bez zależności e2fsprogs-libs. Też się nad tym zastanawiałem. (To nie jest wersja busyboksa.) Ale wolałbym go w ogóle nie mieć ... Zaktualizuję pytanie o więcej informacji.
Illishar,
Jestem tylko zaskoczony, że działa bez libext2fs (czy zbudowałeś wersję statyczną? A może to tylko kwestia innego opakowania? W każdym razie ...). Wybrałbym ext4 zamiast ext2 ze względu na ulepszone dziennikowanie i szybsze sprawdzanie fsck , jeśli to możliwe, i być może syncopcję montowania. Chociaż to i dziennikowanie wydłuży twoje cykle zapisu, trudno jest zobaczyć, w jaki sposób alternatywny system plików (np. Teoretyczny, który sprawdza online) może ominąć konieczność robienia mniej więcej tego samego, jeśli celem jest solidność. Powodzenia, a jeśli znajdziesz rozwiązanie, dodaj swoją odpowiedź.
goldilocks
2

Program MUSI być kontynuowany!

Jest to powszechny wymóg, a systemy Linux są najlepszym wyborem, jeśli chodzi o wybór stabilnego systemu.

Wydaje się, że twoje wysiłki również nie zmierzają we właściwym kierunku. Co jednak możesz zrobić, aby uzyskać stabilny system?

Na pierwszym poziomie możesz ulepszyć swój system plików:

  • Użyj yournal_data_orderedw ext3/ext4systemie plików, podczas tworzenia lub modyfikowania za pomocą tune2fs.
  • Z JFSużyciem --replay_journal_onlypodczas sprawdzania.
  • Włącz autorepair, ustawiając FSCKFIX=yesw skryptach początkowych .

Jeśli to nie wystarczy, możesz uruchomić system bez montowania uszkodzonego dysku. Zamiast tego utwórz nowy ramdisk, ręcznie sprawdzając i naprawiając uszkodzony dysk. Można to również zautomatyzować za pomocą skryptów.

Na kolejnym poziomie musisz opuścić system wbudowany i przeczytać kilka tematów na temat wysokiej dostępności


źródło
W przypadku skryptów startowych automatyczne sprawdzanie jest czymś, czego OP chce uniknąć. System plików musiałby zatem obsługiwać sprawdzanie systemu plików online.
Bratchley
1
z yournal_data_orderedlub replay_journal_onlyzajmuje tylko kilka sekund, aby sprawdzić, to różnica.
1
Tak proszę. Czy znasz system plików, który obsługuje sprawdzanie online?
Illishar,