Konfigurowanie Raspberry jako rejestratora danych

13

Jak mówi tytuł, pracuję nad prostą aplikacją wbudowaną, która odczytuje niektóre informacje z portu szeregowego i loguje je do pliku, oprócz wyświetlania trochę statusu na wyświetlaczu.

Jestem teraz na etapie rejestrowania i wydaje się, że działa, próbuję skonfigurować system i mam kilka pytań.

  1. System przeznaczony jest do rejestrowania danych na pamięci USB FAT32, którą można w dowolnym momencie odłączyć, podłączyć lub wymienić. Jaka jest preferowana metoda automatycznego montowania włożonej pamięci masowej USB do stałego katalogu? Wygląda na to, że pakiet usbmount prawie to robi, ale brak konserwacji sprawia, że ​​jest on nieco ostrożny.

  2. Nie mogę zagwarantować zasilania i przeprowadzać czystych wyłączeń. Na szczęście jedynymi plikami, które należy zapisać, oprócz wewnętrznych informacji o systemie operacyjnym, powinny być dzienniki. Czy system plików dziennika dla systemu operacyjnego uratuje mnie ode mnie, czy powinienem montować system tylko do odczytu lub majstrować przy dyskach RAM?

  3. Czy system plików FAT na pamięci USB przetrwa i wyzdrowieje po przerwach w dostawie prądu i nagłych wyrzuceniach? Czy powinienem utworzyć nowy plik dziennika za każdym razem, gdy zostanie zamontowany?

  4. Skonfigurowałem serwer X, aby uruchamiał się automatycznie i majstrowałem przy skryptach autostartu LXDE, aby uruchomić wyświetlanie statusu i wyłączyć menedżera okien / wygaszacz ekranu. Czy są jakieś inne przeszkody w utrzymywaniu ciągłego wyświetlania?

  5. Rejestrator nie będzie miał dostępu do sieci Ethernet i raczej potrzebuje dokładnego zegara. Czy moduł RasClock jest odpowiednią opcją?

Przepraszamy za długi post i wiele pytań częściowo powiązanych.

Jestem przyzwyczajony do pracy z prostymi urządzeniami wbudowanymi, dla których mam pełną kontrolę nad oprogramowaniem, a zadanie prawidłowej konfiguracji prawdziwego systemu operacyjnego sprawia, że ​​jestem trochę niespokojny. Z drugiej strony raczej podejrzewam, że nie jestem jedynym (ab-) używającym Pi do tego typu aplikacji, więc mam nadzieję, że pytania nie są zbyt szczegółowe dla mojej konkretnej sytuacji.

doynax
źródło
Czy gdzieś opisujesz swoje działające rozwiązanie szeregowe USB->, aby inni potencjalni rejestratorzy mogli go wypróbować? Chcę uzyskać dodatkową wartość z mojego skrobaczki / rejestratora / kamery internetowej Pi. Dzięki!
Tai Viinikka

Odpowiedzi:

7

System przeznaczony jest do rejestrowania danych na pamięci USB FAT32, którą można w dowolnym momencie odłączyć, podłączyć lub wymienić.

Odłączona część, która jest problematyczna. AFAIK, żaden system komputerowy nigdzie nie obiecuje ci prawa do wyrwania pamięci USB niezapowiedzianej w dowolnym momencie bez potencjalnych problemów. Musisz więc pomyśleć o tym, jak to obejść.

Nie mogę zagwarantować zasilania i przeprowadzać czystych wyłączeń.

Ponownie odcięcie zasilania (prawie) dowolnego systemu komputerowego jest ryzykowne. To zwykle kończy się dobrze (który nie zrobił to kilka razy, przez przypadek, z powodu awarii zasilania, itp?), Ale nie wydaje się być niezwykła ilość osób zgłaszających korupcję karty SD z pi. Więc jeśli masz na myśli: „Przeważnie system nie zostanie zamknięty w sposób czysty”, musisz przemyśleć, ponieważ będzie to strategia ślepa uliczka. Należy pamiętać, że możliwe jest wyzwolenie zamknięcia bez klawiatury lub połączenia sieciowego. Możesz użyć podobnej metody, aby uruchomić czyste odmontowywanie pamięci USB.

Możesz dodać syncopcję, /etc/fstababy ograniczyć buforowanie, ale man mountnotatki:

W przypadku nośników o ograniczonej liczbie cykli zapisu (np. Niektóre dyski flash) „synchronizacja” może spowodować skrócenie cyklu życia.

Obejmuje to karty SD, ale o ile pamiętasz o sporadycznym testowaniu (i wymianie, w razie potrzeby) swoich nośników, może to być warte zachodu. Myślę, że wpłynie to nieco na ogólną wydajność.

Staraj się więc unikać gwałtownego szarpania wtyczki lub pendrive'a najlepiej jak potrafisz, a na pewno nie projektuj konfiguracji zależnej od tego. Np. Nie mów sobie ani innym użytkownikom: „Odłączanie pamięci USB jest w dowolnym momencie możliwe”, ponieważ tak nie jest i nie można tego zrobić.

Wykonywanie odpowiednich syncpołączeń w aplikacji (np. W stanie bezczynności lub po znaczącym zapisie) jest dobrym pomysłem.

Gdy masz już wszystko, co chcesz zainstalowany i skonfigurowany , można potencjalnie zamontować główny system plików tylko do odczytu, jeśli utworzyć osobne partycje dla /var, /runoraz /tmpi zamontować te RW; możesz także utworzyć jedną taką zamontowaną partycję i dowiązać do niej katalogi rw.

Na raspbian pi nie musisz się martwić /run, ponieważ jest to już tmpfs (RAM); /sysi /procsą również w pamięci RAM (ale nie używaj ich do niczego poza tym, do czego są przeznaczone). Jeśli system ma jeden cel, a wszystkie dane trafiają do pamięci USB, /varjest to jedyny problematyczny, ale nie, moim zdaniem, krytycznie.

Złotowłosa
źródło
Naszym głównym problemem jest to, że zasilanie może zostać odcięte w dowolnym momencie podczas zatrzymania awaryjnego, co, jak podejrzewam, będzie częstym zjawiskiem podczas testowania (stąd potrzeba na początek rejestratora). Sprawdzę, czy możemy przymocować akumulator zapasowy do Pi, a może podłączę jakiś czujnik, aby wykryć utratę zasilania. Jednak moje życie byłoby o wiele łatwiejsze, gdyby główny system plików mógł być zamontowany w trybie tylko do odczytu, a pamięć USB chroniona przed okresowymi opróżnieniami i tym podobne.
doynax
@doynax: Możliwe jest uruchomienie z głównym systemem plików RO. Nie mam z tym żadnego doświadczenia, ale na końcu dodałem kilka akapitów na temat tego, co według mnie jest podstawową kwestią.
Złotowłosa
2

W poprzednim życiu pracowałem nad sterownikami urządzeń, które czytają / zapisują karty pamięci. Mogą być szarpane w trakcie każdej operacji, więc nawet podtrzymanie bateryjne lub kondensatorowe nie pomoże. Na podstawie specyfikacji formatowania chipów, wywnioskowałem zachowanie wymagane do uzyskania minimalnego uszkodzenia spowodowanego przez „gorące” usuwanie i wkładanie.

Zasadniczo musisz upewnić się, że jeśli zostaniesz odcięty w połowie zapisu bloku danych (lub kontakty są niespokojne), możesz rozpoznać ten fakt. po prostu dodaj dane o numerze bloku (i długości, jeśli nie ma ustalonego rozmiaru) i dodaj na końcu numer bloku CRC i (ten sam).

Pierwszy zapis, który wykonujesz, znajduje się na końcu, a jego wartość NIE jest kolejnym numerem bloku. W ten sposób, jeśli twój zapis nie zostanie ukończony, wystąpi niedopasowanie numeru bloku, a ten blok danych jest znany jako śmieci. Następnie zapisz swój blok danych z prawdziwym numerem bloku, a następnie długością, następnie CRC wygenerowany przez twój ulubiony algorytm i ponownie prawdziwy numer bloku. (CRC ma chronić przed kontaktami, które niszczą twoje dane).

Po przywróceniu zasilania lub ponownym włożeniu karty pamięci akceptuj tylko sekwencyjne bloki do punktu, w którym numery początkowe i końcowe bloku nie są zgodne lub CRC jest niepoprawny. Usuń ten blok i wznów rejestrowanie.

Jest to jednak niski poziom. Robienie tego za pomocą systemu plików to inna historia.

To, czego naprawdę potrzebujesz, to nadmiarowe kopie swojego FAT i rób podobne rzeczy przy stole FAT. Kolejny numer powie Ci, który jest najnowszy, a dopasowanie przód / tył i CRC zapewnią integralność.

Minęła pora snu, więc mam nadzieję, że to wystarczająco jasne.

Rufus V. Smith
źródło
1

Jeśli chodzi o dokładny zegar, dostępnych jest wiele tanich modułów GPS. Trudno znaleźć dokładniejszy zegar niż ten.

Matt
źródło
To doskonała sugestia. Zaoszczędź nam trudu ustawiania zegara i radzenia sobie z baterią. Musimy tylko śledzić strefę czasową (i przypuszczam, że reguły DST), a dla czystego rejestratora danych uniwersalny czas powinien być w porządku.
doynax,
Czy moduł GPS działa w pomieszczeniach, gdy żadna część nieba nie jest widoczna i nadal zapewnia przewagę nad prostym RTC?
Stéphane Gourichon