Wszystko o kondycji kart SD na Raspberry Pi
Karta SD jest - obok zasilacza - krytycznym dodatkowym komponentem Raspberry Pi. Monitorowanie jej stanu jest naprawdę ważne, aby zapewnić płynne działanie systemu operacyjnego Raspberry Pi i dobre wrażenia użytkownika. Ten artykuł pokaże Ci kilka sposobów, jak sprawdzić i monitorować stan karty microSD.
Najpierw przedstawię dogłębny przegląd działania kart pamięci, abyś mógł zrozumieć możliwości i ograniczenia sprawdzania stanu karty SD.
Następnie wyjaśnię, jak chronić kartę microSD, ograniczając typowe problemy, z którymi borykają się użytkownicy Raspberry Pi. Omówimy również najlepsze marki kart microSD dla Raspberry Pi, które polecamy.
Jeśli chcesz, możesz również przejść dalej, aby uzyskać polecenia systemu Linux do sprawdzenia bieżącego stanu karty microSD.
Podstawy: Wewnątrz karty microSD
Karta microSD zawiera układ pamięci flash (po lewej stronie obrazka), oraz mikrokontroler (po prawej stronie obrazka, zazwyczaj oparty na architekturze ARM).
Flash
Pamięć flash przechowuje informacje poprzez "uwięzienie" elektronówktóre są "wstrzykiwane" za pomocą wysokiego napięcia przez nieprzewodzący przewodnik do tzw. bramka pływająca(**). Elektrony są więc częścią tranzystora, który może pozwolić na przepływ podłączonego prądu lub nie, w zależności od ładunku pływającej bramki. Teoretycznie nie mogą one odpłynąć, ponieważ bramka pływająca jest elektrycznie odizolowana. Oznacza to, że informacje pozostają zapisane nawet po wyłączeniu zasilania.
Informacja jest zawsze odczytywana pomiędzy źródłem (S) a drenem (D). Elektrony wprowadzone do bramki pływającej zwiększają np. napięcie progowe tranzystora, od którego popłynąłby prąd. Tranzystor blokuje się wtedy przy normalnym napięciu odczytu (nie przewodzi).
Do zaprogramowania pływającej bramki potrzebne jest znacznie wyższe napięcie elektryczne (np. 10 V) niż do normalnej operacji odczytu (np. 3,3 V). W tym celu kluczową rolę odgrywa dodatkowo bramka sterująca (V1/V2/V3).
Aby skasować wszystko, bramka sterująca wypycha elektrony z bramki pływającej, przykładając wysokie napięcie ujemne.
Elementy NAND flash stosowane w kartach microSD grupują poszczególne tranzystory pamięci w strony, a kilka stron w bloki. Strona ma od 512 do 8192 bajtów, blok może zawierać do 256 stron (a więc łącznie 2048 kB przy wielkości strony 8kB).
Zapis (dla logicznej "1") może być wykonywany bitowo lub przynajmniej bajtowo/wordowo. Kasowanie (dla logicznego "0") może być wykonane tylko zgodnie z ruchem wskazówek zegara. Jeśli pozostaną jakieś niezmienione informacje, należy je ponownie zaprogramować.
Pamięci flash mają ograniczoną żywotność ze względu na programowanie i kasowanie, które obliczamy w cyklach kasowania.
Powodem ograniczonej żywotności jest uszkodzenie izolacyjnej warstwy tlenku, która chroni pływającą bramkę przed wyciekiem ładunku, spowodowanym wysokimi napięciami. Gdy tylko warstwa ta staje się przewodząca, komórka pamięci nie może przechowywać więcej informacji.
Aside: Komórki pamięci wielopoziomowej
Początkowo istniały tylko dwa stany naładowania (1 bit informacji) na komórkę pamięci. Obecnie, dzięki kilku pływającym bramkom na tranzystor, wielopoziomowe komórki pamięci przechowują różne stany naładowania, a tym samym kilka bitów na tranzystor pamięci. Podczas odczytu system ocenia, w jaki sposób przyłożony prąd jest przewodzony w różny sposób przez tranzystor.
Z jednej strony umożliwia to znaczne zwiększenie gęstości komórek pamięci, ale z drugiej strony odczyt jest wolniejszy, a komórki pamięci reagują znacznie bardziej wrażliwie na błędy bitowe na straty ładunku. W przypadku komórek jednopoziomowych możliwe jest wykonanie od 100 000 do 1 000 000 cykli zapisu-erase, w przypadku TLC (komórki trójpoziomowe z trzema bitami na komórkę pamięci) ok. 1000 cykli zapisu-erase.
Jest to powód, dla którego przemysłowe karty SD mają zwykle mniejszą gęstość pamięci i wykorzystują SLC (single level cells), dla lepszej integralności danych..
Kontroler
Zadaniem kontrolera jest zarządzanie lampą błyskową, a w szczególności wykonywanie niwelacja zużycia i korekcja błędów odczytu. Wydajność i długowieczność karty microSD zależy w decydującym stopniu od algorytmów zastosowanych w kontrolerze.
Pamięć flash nie może być przepisywana tak często, jak jest to wymagane, z powodu uszkodzenia izolującej warstwy tlenku bramek pływających, jak opisano powyżej. Aby uniknąć uszkodzenia poszczególnych obszarów, które są szczególnie często używane, kontroler różnicuje fizyczny przydział do bloków, które mogą być logicznie adresowane przez system plików (= wear leveling).
Ta zmienność alokacji fizycznej jest również powodem, że testowanie zapisu na karcie SD (poprzez zapisywanie i odczytywanie za pomocą narzędzi bad block, itp.) w rzeczywistości nie zidentyfikuje prawdziwych złych bloków i pozwoli na ich uniknięcie na poziomie systemu operacyjnego / systemu plików! Tylko kontroler pamięci flash wewnątrz karty microSD wie, który blok jest zapisywany / odczytywany w danym momencie, a jak wspomniano, może się to zmienić w czasie.
Uszkodzone bloki (bad blocks) są już obecne w fabrycznie nowej pamięci flash. Te wadliwe bloki są oznaczone w specjalnym obszarze pamięci flash.
Zarządzane są również informacje o korekcji błędów dla poszczególnych bloków, dzięki czemu błędy odczytu mogą być korygowane za pomocą sum kontrolnych. Kontroler dodaje bloki z klastrowymi błędami odczytu do listy złych bloków i przesuwa rzeczywistą alokację fizyczną bloku logicznego.
Karta microSD ma zazwyczaj - w zależności od producenta - około 10% wolnej pojemności, aby wymienić złe bloki na dobre "bloki rezerwowe".
Małe brudne sekrety: Problemy z pamięcią flash
Usuwanie odbywa się tylko w kierunku przeciwnym do ruchu wskazówek zegara
Dane mogą być kasowane tylko blok po bloku. Wymazywanie obciąża komórki pamięci i skraca ich żywotność - powstają nowe uszkodzone bloki.
Wadliwe bloki z fabryki
Pamięci Flash są już dostarczane z wadliwymi blokami. W trakcie eksploatacji dodawane są kolejne wadliwe bloki (bad bloki). Dlatego kontroler stara się zapisywać / kasować bloki możliwie równomiernie poprzez wear-leveling.
MLC i TLC szczególnie wrażliwe
Wielopoziomowe komórki pamięci (MLC) zmniejszają liczbę cykli kasowania, a tym samym długoterminową niezawodność.
Czytać przeszkadzać
Zjawiskiem, o którym jeszcze nie wspomniałem, a które jest szczególnie perfidne, jest Czytać przeszkadzać. Nawet przy samym odczycie z karty, może on - właśnie przez odczyt - spowodować, że sąsiednie komórki pamięci w tym samym bloku zmienią swoje zaprogramowanie. Prawdopodobieństwo takiego zdarzenia wzrasta gwałtownie po kilku 100 000 odczytów.
Aby uniknąć zakłóceń odczytu, kontroler rejestruje liczbę dostępów do bloku, aby po przekroczeniu pewnego progu skopiować go w całości do nowej lokalizacji i usunąć oryginalny blok. Następnie blok może być ponownie wykorzystany.
Wszystko to są rzeczy, które kontroler musi skompensować, aby udawać, że jest "idealną kartą pamięci" na zewnątrz, podczas gdy w środku wygląda zupełnie inaczej!
Wreszcie, bity zapisane przez promieniowanie rentgenowskie mogą zostać przypadkowo usunięte. W tym przypadku jedynie konstrukcja karty odporna na promieniowanie rentgenowskie może zapewnić, że dane pozostaną nienaruszone.
Producent i wybór dobrej karty
Zarówno mikrokontroler, jak i lampa błyskowa oraz gotowa karta microSD mogą pochodzić od różnych producentów - karta SD Panasonic na przykładowym zdjęciu ma lampę błyskową Samsung. Kontroler został wyprodukowany w Japonii.
Istnieje czterech producentów, którzy wytwarzają urządzenia NAND flash:
- Samsung <- lider rynku
- Toshiba
- IM Flash Technologies (joint venture Micron Technology i Intel)
- Hynix we współpracy z Numonyx
Toshiba i Samsung produkują większość wszystkich chipów.
SanDisk (zalecane)
SanDisk i Toshiba posiadają spółkę joint venture zajmującą się produkcją pamięci flash. Jednak w 2009 r. SanDisk przeniósł prawa do fabryk na Toshibę, stając się spółką joint venture. producent bezfabrycznych pamięci flash. Nadal współpracują ze sobą w zakresie rozwoju pamięci. SanDisk i Toshiba, wraz z firmą Matshushita, są twórcami standardu SD, wprowadzonego w 1999 roku. Firma SanDisk stworzyła również standard microSD.
Od dłuższego czasu polegamy na marce SanDisk i jak dotąd mamy z nią bardzo dobre doświadczenia.
Samsung (zalecane)
Polecamy również karty pamięci Samsung. Jako lider rynku w sektorze pamięci NAND flash, Samsung może idealnie dopasować do siebie wszystkie komponenty karty SD i posiada wszystkie niezbędne informacje do stworzenia solidnego produktu.
Kingston (NIEZALECANE)
Mieliśmy złe doświadczenia z niezawodnością kart Kingston 128 GB w krytycznym projekcie. Kingston nie posiada własnych fabryk i kupuje nadwyżki pojemności od innych producentów pamięci flash. W rezultacie nie ma gwarancji stałej wydajności.
Następujące artykuł autorstwa Bunny Huang jest również interesująca w tym kontekście.
Toshiba
Toshiba, jako #2 na światowym rynku DRAM, sprzedaje również swoje własne produkty w postaci kart pamięci. SanDisk i Toshiba, wraz z firmą Matshushita, są twórcami standardu SD, wprowadzonego w 1999 roku. Jak dotąd nie mamy żadnych doświadczeń z kartami Toshiby.
Transcend / Silicon Power
Używaliśmy również kart Transcend i Silicon Power, szczególnie w zakresie tanich kart. Karty są zasadniczo dobre, ale widzieliśmy więcej zwrotów / wad z Transcend niż z SanDisk. Dlatego w przypadku krytycznych projektów polecałbym raczej SanDisk / Samsung.
Wybór dobrej karty pamięci
Aby wybrać dobrą kartę pamięci, pierwszą rzeczą, którą należy zrobić, to wybrać producenta. Polecamy Samsung lub SanDiski ewentualnie Toshiba, na krótką listę.
Następnie ważna jest klasa pamięci. Klasa ta wskazuje największą prędkość zapisu blok po bloku. Nie jest to prędkość zapisu dla rozproszonych zapisów o dostępie losowym, co ma większe znaczenie w rzeczywistych zastosowaniach.
Wyższa klasa jest droższa, ale zalecana ze względu na znaczny wzrost wydajności. Zazwyczaj wysyłamy karty klasy 10.
Na stronie ten przegląd na eLinux.org, można sprawdzić kompatybilność odpowiedniej karty pamięci z Raspberry Pi. Ważna uwaga: Raspberry Pi stale modyfikuje oprogramowanie układowe w celu zapewnienia lepszej kompatybilności z kartami pamięci i uniknięcia uszkodzenia danych.
Należy zamawiać z godnych zaufania źródeł - np, otrzymujemy nasze karty SanDisk microSD bezpośrednio od Raspberry Pi Trading i renomowanych, dużych niemieckich dystrybutorów. Na Amazon, upewnij się, aby zamówić bezpośrednio z Amazon, a nie z Marketplace detalisty.
Niektóre informacje (cid, csd, date, manfid, oemid, serial) karty microSD można odczytać za pomocą Linuksa, aby sprawdzić, czy otrzymałeś kartę właściwego producenta. Przykłady z kartą Transcend:
cd /sys/class/mmc_host/mmc?/mmc?:*
echo "man:$(cat manfid) oem:$(cat oemid) name:$(cat name) hwrev:$(cat hwrev) fwrev:$(cat fwrev)"
man:0x000074 oem:0x4a60 name:USD hwrev:0x1 fwrev:0x0
echo "serial:$(cat serial) mdt:$(cat date)"
serial:0x401e39f2 mdt:03/2017
Identyfikator producenta (manfid) jest przypisany przez SD-3C LLC, jak również OEM / ID aplikacji (oemid). Strona oemid identyfikuje WUO karty i/lub zawartość karty.
Nazwa produktu (nazwa) ma długość 5 znaków (ASCII). hwrev jest rewizją sprzętu, a fwrev rewizja oprogramowania sprzętowego. Razem stanowią one rewizję produktu (hwrev.fwrev).
Strona serial to numer seryjny karty microSD, jest to 32-bitowe pole, które odczytuje się jako liczbę całkowitą bez znaku.
Strona mdt (Manufacturing Date) wskazuje, kiedy karta została wyprodukowana - rok i miesiąc.
Możesz porównać wartości ze stronami internetowymi, aby wykryć oszustwa związane z fałszywymi kartami microSD. Polecam lekturę Artykuł na blogu Bunny'ego (jeden) oraz ten artykuł (dwa).
Stabilny mężczyzna/oem kombinacje danej marki wskazują na dobrze kontrolowany i spójny łańcuch dostaw. Na przykład, SanDisk ma następującą kombinację dla wszystkich wpisów w eLinux.org Wiki: man:0x000003 oem:0x5344. Inne marki, takie jak Transcend, zmieniają swoich dostawców, więc stała jakość nie jest pewna.
Unikanie uszkodzeń danych podczas pracy
Karta microSD jest "dyskiem twardym" Raspberry Pi. W normalnej konfiguracji Linuksa działa ona jak normalny dysk twardy - następuje zarówno odczyt, jak i zapis. Linux zapisuje informacje w wielu plikach dziennika i między innymi aktualizuje czasy dostępu do plików. Dane ulegają więc częstym zmianom. Jest to coś, do czego karty microSD nigdy nie zostały zaprojektowane.
Wskazówka #1: Wyłącz prawidłowo Raspberry Pi i używaj dobrego źródła zasilania
Nie odłączyłbyś też tak po prostu komputera z systemem Windows. W przypadku komputerów z Linuksem, a zwłaszcza Raspberry Pi obsługujących karty microSD, jest to tylko kwestia czasu. przed uszkodzeniem danych podczas przerw w zasilaniu.
Linux ma pamięć podręczną odczytu i zapisu, aby przyspieszyć operacje na plikach. Odłączenie zasilania od Pi może spowodować utratę informacji z pamięci podręcznej zapisu, które nie zostały zapisane na karcie microSD.
Jak wspomniano wcześniej, kontroler microSD aktywnie przesuwa dane w czasie pracy w celu wyrównania zużycia i uniknięcia zakłóceń odczytu. Dzieje się to bez wiedzy systemu Linux ("przezroczyste"). I w zależności od producenta, mniej lub bardziej konserwatywnie. Również tutaj - szczególnie podczas operacji zapisu! - może dojść do uszkodzenia i utraty danych.
Dlatego należy upewnić się, że po wyłączeniu Pi, ACT-LED Raspberry Pi przestanie migać, a dopiero potem odłączyć zasilanie.
Złe zasilanie może również prowadzić do problemów związanych z przerwy w dostawie prądu (undervoltage). W razie wątpliwości należy użyć zasilacza zalecanego / dostarczonego przez Raspberry Pi Trading.
Tip #2 System tylko do odczytu z nakładkami
System tylko do odczytu nie chroni karty SD przed zakłóceniami odczytu, a tym samym przed starzeniem się z powodu niezbędnych cykli wymazywania. Dzieje się to jednak znacznie wolniej niż w przypadku aktywnego zapisu.
System plików tylko do odczytu ma również inne zalety, na przykład mniej kontroli systemu plików podczas uruchamiania.
Zwłaszcza systemy wbudowane - tj. systemy, które służą konkretnemu celowi w aplikacji (np. digital signage) niekoniecznie potrzebują możliwości ciągłego instalowania nowego oprogramowania i przechowywania dokładnych dzienników na miejscu. Dzienniki można wysyłać przez sieć do centralnego serwera (w razie potrzeby z opóźnieniem), a w przypadku aktualizacji systemu można przełączyć system w tryb konserwacji w celu zastosowania aktualizacji.
Oto kilka informacji z projektu Debian, na którym oparty jest Raspbian: https://wiki.debian.org/ReadonlyRoot.
Korzystając z nakładek na dysk RAM (w tmpfs), system może nadal zapisywać pliki dziennika lub wprowadzać zmiany w plikach. Nakładki na dysk RAM można okresowo synchronizować ze specjalnie wyznaczonymi partycjami na karcie SD. Należy uważać na dysk RAM, aby go nie przepełnić (z powodu plików dziennika) i oczywiście jest mniej pamięci RAM dostępnej do normalnych działań.
Używamy tej techniki z naszym produktem Anonymeboxgdzie należy założyć, że użytkownik po prostu wyjmuje wtyczkę z gniazdka.
Szukasz partnera, który zrealizuje solidne rozwiązanie tylko do odczytu dla Twojego projektu wbudowanego Raspberry Pi? Oferujemy (jako pi3g e.K.) usługi doradcze i rozwojowew zakresie sprzętu i oprogramowania.
Wskazówka #3 Zmniejszenie liczby operacji zapisu
Szczególnie w starszych kernelach, Linux uaktualnia czas dostępu do każdego pliku, zgodnie ze standardem POSIX. Oznacza to, że każda operacja odczytu automatycznie powoduje operację zapisu. Istnieje możliwość wyraźnego ustawienia noatime w /etc/fstab jeśli jeszcze go nie ustawiłeś (Raspbian wydaje się ustawiać go automatycznie).
Więcej informacji na temat relatime oraz noatime
Wyłączenie logów systemowych przy użyciu maski:
systemctl mask systemd-journald.service
Utworzono symlink z /etc/systemd/system/systemd-journald.service do /dev/null.
sudo systemctl mask rsyslog.service
Utworzono symlink z /etc/systemd/system/rsyslog.service do /dev/null.
Należy oczywiście szczegółowo przeanalizować inne logi tworzone przez inne aplikacje oraz konsekwencje wyłączenia tych usług (np. zaprzestanie uruchamiania niektórych usług).
Zamień plik:
Jeśli nie ma wystarczającej ilości pamięci RAM, Linux przenosi poszczególne obszary pamięci RAM do pliku SWAP. (Rozważ użycie Raspberry Pi 4 z wystarczającą ilością pamięci RAM, np. Pi 4 / 4 GB lub Pi 4 / 8 GB dla danego przypadku użycia). Za pomocą poniższego polecenia można sprawdzić status pliku SWAP:
sudo systemctl status dphys-swapfile
● dphys-swapfile.service - LSB: Autogenerowanie i używanie pliku wymiany Załadowany: załadowany (/etc/init.d/dphys-swapfile) Aktywny: aktywny (exited) od Sat 2017-07-01 19:11:57 UTC; 8min temu Process: 498 ExecStart=/etc/init.d/dphys-swapfile start (code=exited, status=0/SUCCESS)
Możesz użyć następującego polecenia, aby wyłączyć SWAP:
sudo systemctl disable dphys-swapfile
Wniosek
Karty microSD w ciągłym użyciu wystawiają na ciężką próbę długoterminową niezawodność systemów opartych na Raspberry Pi.
Używając odpowiedniego zasilacza, systemów tylko do odczytu z nakładkami, konsekwentnie ograniczając operacje zapisu i wybierając dobrą kartę SD znanej marki, można zwiększyć stabilność w dłuższej perspektywie.
Uwagi
(*) Uwaga: Raspberry Pi 3, 3B+ i 4 mogą być uruchamiane z nośnika USB lub przez sieć (Ethernet), bez karty microSD.
Szczególnie w przypadku rozruchu przez sieć zalecamy zainstalowanie karty microSD ze specjalnym oprogramowaniem układowym, ponieważ błąd limitu czasu w kodzie rozruchowym uniemożliwia stabilny rozruch (Raspberry Pi 3B).
Powyższe wyjaśnienia dotyczące struktury pamięci flash odnoszą się również do pamięci USB, ponieważ one również opierają się na pamięci flash.
(**) Uwaga: coraz częściej stosowaną alternatywą dla bramek pływających są pamięci flash z pułapkowaniem ładunku, zasada działania pozostaje ta sama. Komórka flash z pułapkowaniem ładunku umożliwia osiągnięcie większej gęstości pamięci.
Jeśli chcesz dowiedzieć się więcej o kartach SD w Raspberry Pi, zajrzyj na stronę nasze liczne artykuły na ten temat tutaj.
Cześć,
Czy istnieje sposób na sprawdzenie kontrolera w karcie SD ile jest bad plocków?
Sprawdzając to okresowo chciałbym zbudować wykres trendu.
Dziękuję za pracę.
Z poważaniem,
Peter
to byłoby niemożliwe dla normalnej karty SD klasy konsumenckiej, chyba że masz narzędzie MP dla konkretnego używanego kontrolera, który nigdy nie jest dostępny.
Byłoby to możliwe, gdyby karta była klasy przemysłowej i miała dostępne informacje SMART (określone w ich odpowiednich arkuszach danych), a następnie można napisać jakiś kod, aby odczytać dane SMART.
Ale to dopiero początek problemów. Nie ma przemysłowego standardu dla monitorowania zdrowia kart SD, więc każdy producent implementuje protokół inaczej i nie zawsze jest on publikowany.
Raport SMART niektórych producentów podaje tylko procentową liczbę pozostałego czasu życia karty, niektórzy podają bardziej szczegółowe informacje, w tym zarezerwowane bloki, początkowe złe bloki, późniejsze złe bloki, max/min/avg erase count, P/E life time, itp.
Obecnie udało mi się odczytać statystyki zdrowotne kart od Lexar, ADATA, ATP, Sandisk, Apacer, Metorage, Delkindevices, SiliconePower, Swissbit i jeszcze kilku innych.
Moją motywacją jest crackowanie SMART info z brudnych tanich używanych kart przemysłowych produkowanych przez Foresee, na razie udało mi się złamać karty z serii MPS/M9M/M9H/D7D/X52/X53 i wciąż pracuję nad kolejnymi modelami.
Mam nadzieję, że wkrótce powstanie standard przemysłowy dla kart SD smart info. Również uważam za zabawne, że niektóre karty SD mają wyższą żywotność TBW niż wiele dysków SSD lmao
oh, zapomniałem wspomnieć, że większość (ale nie wszystkie, shit.) kart daje SMART info poprzez wysłanie komendy CMD56 do karty z 32bitowym argumentem int, będziesz musiał znaleźć ten magiczny numer z datasheet i odpowiedniego formatu danych, aby odczytać dane. Jeśli masz datasheet, to jesteś w zasadzie gotowy, sprawdź narzędzie sdmon na githubie dla przykładowego kodu.
Jeśli datasheet nie jest dostępny lub magiczna liczba nie jest opublikowana, będziesz musiał iterować całą 31-bitową (najniższy bit jest zawsze 1) przestrzeń int, aby złamać ją na siłę, a to może zająć 12 godzin do pół miesiąca w zależności od szczęścia. Mam nadzieję, że nie ma złego producenta, który zaczyna swoją magiczną liczbę od 0xF_______. Na razie wszystkie magiczne numery, które udało mi się złamać/zebrać zaczynają się od 0x1_______.
Niektóre karty wymagają bardziej skomplikowanej procedury do odczytania informacji SMART, jak Apacer, ale dobrze, że podali niezbędne informacje w datasheet. Apacer robi karty OEM dla kilku innych marek, więc ta sama procedura ma zastosowanie.
[...] Zdrowie karty SD (w tym najlepsze praktyki dotyczące dbania o kartę SD!) [...]
[...] Wszystko o zdrowiu kart SD / microSD na Raspberry Pi [...]