Portál AbcLinuxu, 19. března 2024 12:43

Jak nakonfigurovavat SD kartu pro embedded systém

17.3.2014 06:25 | Přečteno: 1743× | Počítače

Vyrobit jednoduchý počítač pro sběr dat je dneska poměrně jednoduché - najdete si jednodeskový ARM počítač, zaměstnáte hardwarového vývojáře a necháte si navrhnout rozšiřující desku. Nakonfigurujete dodaný linux, nainstalujete databázi, webový server, svoji aplikaci pro sběr dat a je to.

Modul pro sběr dat

A je to! Nebo není?

První nečitelnou SD kartu svedete na vadný kus. Kdyby byla karta v pořádku, nebyla by přece nabouraná už po čtrnácti dnech! Jenže další karta umřela už druhý den. Že by dva vadné kusy? Třetí karta zničená během měsíce vás začne nahlodávat - že by ty karty byly v pořádku a špatně je něco jiného?

Jeden můj známý mi ukázal velkou kulatou krabici od paklu cédeček plnou zničených SD karet. Během vývoje zničil stovky různých karet, od nejlacinějších noname, přes značkové karty až po průmyslové SD karty s cenou v tisícikorunách za kus, které měly údajně hrubé zacházení vydržet. Odešly stejně rychle, jako kterákoli jiná SD karta v jeho sbírce.

Co je tedy špatně?

SD karta není dělaná na časté přepisy. Při použití ve foťáku nebo v mobilu se na kartu zapíše třeba 10 MB najednou, při další operaci se zapíše dalších 10 MB najednou a tak dál. O data na kartě ve foťáku se obvykle staráte až po zaplnění karty nebo až když chcete fotky stáhnout. Databáze pracuje s kartou výrazně jinak - při sběru dat se na kartu zapisuje s malým intervalem poměrně zanedbatelné množství dat. Jakmile zapíšete do databáze, připojí se na konec nějakého souboru pár bajtů dat, databáze si navíc vynutí sync.

Do algoritmu pro wear leveling na SD kartě vidí pouze výrobce, takže je dosti pravděpodobné, že postupným připisováním pár bajtů na konec souboru přepisujete vždy stejné místo na kartě. Je div, že karta vydrží takové zacházení celých čtrnáct dní!

Jak z toho ven?

Základem je omezit veškeré zápisy na SD kartu. Typicky se při práci linuxového stroje zapisují na disk tyto informace:

Swap

Začnu od toho nejjednoduššího: swap. Vaše zařízení musí mít dostatek paměti pro běh celého prostředí, aby se nesnažilo používat swap. Stejně - nejlepší je swap úplně vypnout. Když začne počítač odkládat paměťové stránky na SD kartu, neuvěřitelně zpomalí. Nejjednodušším únikem z takové situace je tvrdý reset.

Databáze

Databázová data přestěhujte na ramdisk. Ten můžete snadno vytvořit v souboru /etc/fstab řádkem:

shm  /dev/shm  tmpfs  nodev,nosuid,noexec  0 0

Ramdisk vytvořený tímto řádkem najdete v adresáři /dev/shm. Nevýhodou ramdisku je, že po restartu systému se data ztratí. Vaše aplikace s tím proto musí počítat a musí být schopná získat šablonu databáze z odjinud. Ztracená data? Smůla - ale pořád je to lepší, než jet vyměňovat zničenou SD kartu do zařízení vzdáleného několik stovek kilometrů.

Poznámka k databázi: používám databázi Sqlite. Údajně je tato databáze vhodná právě pro použití na SD kartách, protože nepřepisuje staré záznamy, ale zapisuje vždy nové verze dat na konec souboru. V praxi likviduje Sqlite SD kartu stejně, jako kterákoliv jiná databáze. Navíc doba pro zotavení po havárii je při větší databázi (řádově jednotky GB) i na normálním disku nechutně dlouhá. Snažte se proto svou databázi udržet co nejmenší.

Logy

U logů je problém, že obvykle každá aplikace zapisuje své logy do nějakého jiného souboru a u některých aplikací - typicky třeba u webového serveru - je nastavení logů specifické právě pro tuto aplikaci. Nejjednodušší je vůbec nenastartovat syslog démona (ať už používáte jakýkoliv). Pokud logy přece jen potřebujete, syslog se dá u rozumných aplikací pro logování (používám syslog-ng) poslat přes síť do jiného počítače.

Wtmp

Zakázat wtmp je nesmírně obtížné. Do souboru /var/log/wtmp zapisuje proces init. Google vám příliš neporadí - dotazů "Jak zakázat zápisy do wtmp?" najdete sice dost, ale odpovědí je pravidelně podezíravá, vyhýbavá otázka: "A proč to chcete? Zakazovat zápisy do wtmp může chtít jen zlý člověk, který nechce nechávat v systému své stopy". Naštěstí existuje jedno primitivní řešení - po startu proceru init wtmp jednoduše smažte:

rm -f /var/log/wtmp

Než se vám podaří v init skriptech tento soubor smazat, proces init sice stačí soubor vytvořit a možná do něj i něco zapsat, a po smazání bude mít nějaké připomínky, ale fakt, že si soubor wtmp nepřejete, dokáže akceptovat, a už jej znovu nevytvoří. Pokud byste chtěli zakázat vytvoření wtmp souboru kompletně, asi budete muset hrábnout do zdrojových tvarů - do toho se mi nikdy nechtělo.

Žurnál

Po prostudování různých zdrojů na internetu jsem dospěl k názoru, že nejvhodnějším filesystémem pro SD kartu je ext4. Pro SD kartu je ale vhodné zakázat žurnál a upravit některé další parametry:

mkfs.ext4 -O ^has_journal -E stride=2,stripe-width=1024 -b 4096 /dev/sda1

Zotavení po havárii

V souvislosti s montováním nekorektně odmontovaného filesystému po havárii systému nebo po vypnutí napájení bych ještě doporučil upravit startovací skripty tak, aby se zakázalo manuální kontrolování disků. Donuťte startovací skript, aby zkontroloval disk vždy, když je potřeba, a aby to dokázal udělat i bez vaší asistence. Já si přepsal startovací skript /etc/init.d/fsck (distribuce gentoo). Do míst, kde se původně systém dovolával mojí pomoci, jsem vložil řádek

fsck -y /

V jiné distribuci bude startovací skript vypadat jinak, takže žádné podrobnosti neuvádím. Poraďte si.

A ještě jednu připomínku na konec: u podobných zařízení není důležité, aby fungovala stoprocentně spolehlivě. Důležité je, aby se zařízení dokázalo vzpamatovat po havárii samo a pokud možno co nejrychleji.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Max avatar 17.3.2014 07:34 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Odpovědět | Sbalit | Link | Blokovat | Admin
Poznamenej si ještě :
mountovat buď čistě v read only režimu, nebo používat mountovací parametr relatime, případně noatime.
Zdar Max
Měl jsem sen ... :(
Max avatar 17.3.2014 07:37 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Jinak "/tmp" do ramdisku, to samé logy a další podobné adresáře.
Tzn., logování bych nezakazoval, buď by se logovalo jen do ramdisku, nebo na vzdálený syslog.
Zdar Max
Měl jsem sen ... :(
=^..^= AmigaPower® avatar 17.3.2014 10:06 =^..^= AmigaPower® | skóre: 30 | blog: BLB | Praha
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
WOW! Znovuoběvení funkcí AmigaOs! :-D
Petr Bravenec avatar 17.3.2014 07:42 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Vida, relatime a noatime mě nenapadlo uvést, jinak je to pro mě samozřejmost.
Petr Bravenec - Hobrasoft s.r.o.
17.3.2014 14:18 -ff-
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Moc pěkný článek. Konečně něco dobrého o Linuxu.

Ty žvásty o Ukrajině od Davkola a spol. mi už lezou krkem.
Max avatar 17.3.2014 08:34 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Odpovědět | Sbalit | Link | Blokovat | Admin
Jinak na sd kartě je krásně vidět, proč cfkarty měly a ještě někde mají smysl. Vlastní řadič, člověk může jet ve full RW a ničeho se nebát atd. (kolegové takto provozují desítky průmyslových PC s WinCE ve full RW režimu na CF kartách a dlouhá léta ok). Takovou věc sd karty neustojí.
Zdar Max
Měl jsem sen ... :(
Ruža Becelin avatar 17.3.2014 08:55 Ruža Becelin | skóre: 40 | blog: RuzaBecelinBlog
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Ono taky hodne zalezi na SD karte - vyrobce, parametry. Muj domaci DHCP/DNS server bezi na 16GB class 10 od Kingston, mam tam neupravovany CentOS 6.5, cele to bezi 24/7 pres skoro tri roky bez problemu.

Nicmene argument s CF kartami beru.
17.3.2014 14:09 -ff-
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Kingston je špička.
Petr Bravenec avatar 17.3.2014 14:14 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Já asi vezmu foťák a zajdu za tím svým známým a vyfotím tu škatuli od cedéček plnou __jakýchkoliv__ SD karet, všecky značky, všechny kvality, od pomalých noname po značkové průmyslové karty - všecky zničené během pár dnů. Výrok "Kingston je špička" je fakt jen nepodložený výkřik do tmy. Při likvidaci SD na značce nezáleží, SD karty odcházejí velice rychle bez ohledu na značku.
Petr Bravenec - Hobrasoft s.r.o.
17.3.2014 21:03 amir
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
A jak z té fotky poznáme, že jsou zničené, a že pošly zrovna při tom, co popisuješ ? Fotka je naprosto neprůkazná!

S tím Kingstonem má možná pravdu: All Kingston SD, SDHC and SDXC cards are backed by a lifetime warranty...
18.3.2014 10:24 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Už mi zopár Kingston kariet odišlo v obyčajnom snartphone. Trochu ich prebral k životu SD Formatter, ale dlho neobstáli. SD karty sú naozaj stavané v týchto dobách len na skokovú alokáciu vo fotoaparátoch, a napríklad cache aplikácií v Androide ich spoľahlivo odrovná ešte pred vypršaním doživotnej záruky. V prípade spomínaných SD kariet je daná záruka na smiech keďže náklady na poštovné pri zaslaní SD karty hradí kupujúci. Naozaj nemám záujem riešiť poštovné 16 Eur za balík ak 16G SDHC Class 10 stojí 15 Eur. A na tomto majú postavenú kvalitu produktu. Neoplatí sa to reklamovať? Tak tam dáme doživotnú záruku.
19.3.2014 10:21 R
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
A vyrobcom SD kariet este nedoslo, ze sa tie karty pouzivaju v smartphonoch?
19.3.2014 12:12 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Došlo. Ale pri obchodnom modele "Neoplatí sa to reklamovať? Tak tam dáme doživotnú záruku." nemá zmysel trvanlivosť.
17.3.2014 09:31 Min
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Známý dělá průmyslové aplikace s CF kartami a má s nimi úplně stejné problémy jako autor blogu s SD kartami. A to i s takovými speciálně určenými pro průmyslové nasazení.
17.3.2014 10:39 Ondrej 'SanTiago' Zajicek
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Ja mel s CF kartama jako rootem pro routery trochu jine problemy. Ne ze by se fyzicky rozbily, ale casto se (uz po nekolika rebootech) na nich rozsypal filesystem. Dokonce i kdyz jsem mel dva filesystemy, jeden rw a druhy ro, tak dochazelo k rozsypani i toho ro. Problemy byly asi zpusobene zapisy tesne pred rebootem (napr. zapisem spojenym s umountem pri vypinani). Jedine spolehlive reseni bylo prejit na readonly root na flashce a pripadny rw filesystem na jinem blokovem zarizeni.
Petr Bravenec avatar 17.3.2014 11:14 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Tohle se mi stávalo i na SD. Nepřišel jsem na příčinu. Ale nakonec se dal ten ext4 nastavit tak, aby se nerozsypal a systém ho dokázal zkontrolovat. Měl jsem jeden ten počítač připojený k napájení přes reléovou desku a trápil jsem to několik nocí resetem co pár minut.
Petr Bravenec - Hobrasoft s.r.o.
17.3.2014 10:16 R
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Odpovědět | Sbalit | Link | Blokovat | Admin
Budem riesit rovnaky problem s Raspberry Pi - aby to chodilo 24/7 a nesralo sa to.

Image Raspbianu je nepouzitelny - je tam milion zbytocnosti (okrem ineho aj swap) a pritom zakladne veci chybaju, takze budem robit cistu minimalnu instalaciu.

Pravdepodobne tiez pouzijem ext4. Ale neviem sa rozhodnut, ci mam alebo nemam pouzivat zurnal - bojim sa, ze bez zurnalu sa filesystem rozoserie. Zapisovat sa bude minimalne - obcas sa tam nahraju nove data, inak cely cas len citanie.

Logy asi dam na ramdisk (nejakej mensej velkosti, aby mi to nezozralo polovicu RAM). A k tomu asi logrotate, aby sa ten ramdisk nezaplnil. Logrotate by mohol logy z RAM ukladat na kartu.
Petr Bravenec avatar 17.3.2014 11:10 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Ten milion zbytečností mě donutil, abych si pro to přeložil vlastní Gentoo. Jenom to chvíli trvalo, ale stačí to udělat na jednom a ten pak používat jako repozitář pro binární balíky a pro vlastní aplikace.

Používat žurnál na podobné zařízení není šťastný nápad. Spíš se postarejte o to, aby se disk opravdu kontroloval po každém restartu a aby se to kontrolovalo automaticky - bez interakce administrátora.
Petr Bravenec - Hobrasoft s.r.o.
17.3.2014 14:26 R
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Gentoo urcite pouzivat nebudem, mam to na jednom serveri a je s tym viac starosti ako so vsetkymi Debianmi dokopy. Vidim to na vlastnu instalaciu Raspbianu a pripadne vlastny repozitar.

BTW. "fsck -y" spusti kontrolu len ak je filesystem oznaceny ako "dirty". Aby sa spustila vzdy, musi tam byt "-f".
Petr Bravenec avatar 17.3.2014 15:45 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Gentoo mám asi na patnácti serverech a uznávám, že je s tím opravdu hodně práce. Na druhou stranu mám i několik dalších debianů a u těch jsem se dostal časem vždy do situace, že jsou prakticky neupdatovatelné - binární distribuce mi předepisují konkrétní verze konkrétních produktů, takže na jednom serveru mám vlastní přeložený dovecot a nějaké pluginy do něj, jinde to je nagios, kde mě binární distribuce nechala na holičkách. Možná to dělám špatně, ale málokdy jsem dokázal udržovat nějakou binární distribuci dost dlouho čistou, bez vlastních náhražek distribučních balíků. Proto jsem za Gentoo vděčný. Gentoo je jako lego - můžu si postavit vlastní plastovou Tatrovku. Binární distribuce je už hotová vylisovaná Tatrovka, ale když chci vyrobit dveře pro řidiče, musím vzít do ruky pilku a původní představu výrobce o vzhledu Tatrovky zničit.

U binární distribuce se tvůrce snaží udělat systém co nejlepší: "PAM? To přece nemůže nikomu vadit, to do systému musíme dát, bez toho se nedá udělat spousta věcí!", zatímco Gentoo uvažuje cestou: "Na jaké základní kostičky můžu tento balík rozložit?" a prostě mi umožní se systémovými prostředky toho PAM balíku zbavit. Vyhodit PAM - to byla například jedna z úprav, které jsem tam dělal.
Petr Bravenec - Hobrasoft s.r.o.
pavlix avatar 17.3.2014 16:26 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Na jaké základní kostičky můžu tento balík rozložit?
Rozkládání na základní kostičky, je právě doménou binárních distribucí. Gentoo naopak funguje na principu konfigurace a skládání. Jedná se o dvě techniky, kterými se oba typy distribucí snaží dopracovat podobného výsledku, tedy flexibility. Obojí má své výhody.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
Petr Bravenec avatar 17.3.2014 16:55 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Dobře, citoval bych to jinak: "Jaké kostičky můžu použít, abych poskládal systém, jaký potřebuju" (z pohledu mne jako uživatele Gentoo).

Výrok "Na jaké základní kostičky můžu tento balík rozložit?" sedí pro tvůrce systému.

Ale to je fuk. Každému prostě sedí něco jiného. Mně průběžné updaty Gentoo v tom množství ani moc nevadí, mám to zvládnuté, i když je to někdy opruz. Víc by mě iritovalo, kdybych musel někde kvůli update systému dělat dump/restore databáze, protože novější verze distribuce mi nenabízí starší databázový server (v Gentoo můžu nainstalovat klidně starší verzi, či dokonce provozovat několik různých verzí téhož db serveru). Naopak jsem často zoufalý z Debianu, když narážím na fosilní verze softwaru, které jsem opustil už před lety, a které už dávno nezvládají dělat to, co od nich běžně v Gentoo požaduji. Pak nastupují různé alternativní repozitáře nebo instalace ze zdrojáků, což takový systém vždy více či méně rozbije.

Na druhou stranu jsem rád, že na různé "krabicové" servery, na kterých běží samba, firewall a ftp, a které po nainstalování vrazím zákazníkovi kamsi pod stůl, můžu použít Debian a o server se prakticky nestarat. Když tak na tím přemýšlím, řekl bych, že takových "serverů" mám asi většinu.
Petr Bravenec - Hobrasoft s.r.o.
17.3.2014 22:01 R
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Pozeral som na init skripty toho Raspbianu (resp. Debianu) a vynuteny fsck s automatickou opravou sa urobi tak, ze v /etc/default/rcS sa nastavi
FSCKFIX=yes
a medzi parametre jadra sa prida
forcefsck
Nemusim editovat ziadne init skripty a tym padom nebude problem pri upgrade.
Josef Kufner avatar 17.3.2014 23:33 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
A nebo na filesystému nastavíš počet mountů na jedničku a interval (čas) na jeden den.
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 17.3.2014 13:02 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Ukládat staré logy na kartu mi přijde u takových zařízení zbytečné. Když to chcípne, tak tam nic nebude (logrotate ještě nerotoval) a když to nechcípne, tak jsou v paměti aktuální. Spíš bych to viděl na nějaké sledovadlo logů, které pošle mail okamžitě, jakmile detekuje anomálii, a při troše štěstí to stihne dřív, než chcípne úplně. A pokud linka dovolí, tak vzdálený syslog je ještě lepší.
Hello world ! Segmentation fault (core dumped)
17.3.2014 14:12 R
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Vzdialeny syslog nehrozi, bude to pripojene cez WAN a nespolahlive linky. Niektore mozno ani nebudu mat trvale pripojenie.
Dreit avatar 17.3.2014 15:25 Dreit | skóre: 15 | blog: Dreit a jeho dračí postřehy | Královehradecký kraj
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém

Já to vyřešil USB diskem :-D

Nope
Josef Kufner avatar 17.3.2014 13:03 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Odpovědět | Sbalit | Link | Blokovat | Admin
Jakou výhodu má ext4 bez žurnálu oproti ext2?
Hello world ! Segmentation fault (core dumped)
Heron avatar 17.3.2014 14:28 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Asi delayed allocation, bude zapisovat více dat současně a to ještě pokud možno lineárně za sebou v jednom extentu, což by mohlo některým algoritmům v SD kartě pomoct (pokud jsou opravdu dělané na FAT a zápisy o velikosti a četnosti jaké mají fotoaparáty).
17.3.2014 21:05 amir
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Pravda, ale obávám se, že v praxi (zejména u Gentoo) je toto nepodstatné.
pavlix avatar 18.3.2014 09:18 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Důvod?
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
Petr Bravenec avatar 18.3.2014 12:16 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Jak nakonfigurovavat SD kartu pro embedded systém
Gentoo je v tomto ohledu distribuce jako jakákoliv jiná. Na jenom stroji to jednou za čas updatuju ze zdrojáků, na ostatních strojích pak nainstaluju binární balíky vyrobené a uskladněné v repozitáři na tom prvním počítači - je to rychlé, pohodlné a hygienické.
Petr Bravenec - Hobrasoft s.r.o.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.