Wszystko o zdrowiu kart SD / microSD 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 są zachowywane nawet po wyłączeniu zasilania prądem.

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 programowania bramki pływającej stosowane są znacznie wyższe napięcia elektryczne (np. 10 V) niż przy normalnym trybie odczytu (np. 3,3 V). Do tego celu wykorzystywana jest dodatkowo bramka sterująca (V1/V2/V3).
W celu wymazania elektrony są ponownie wypychane z bramki pływającej poprzez przyłożenie wysokiego ujemnego napięcia przez bramkę sterującą.
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 co najmniej bajtowo/sekwencyjnie. Kasowanie (dla logicznego "0") może być wykonywane tylko blokowo. Informacje, które nie zostały zmienione, muszą zostać ponownie zaprogramowane.
Pamięci Flash mają ograniczony czas życia z powodu programowania i kasowania, który jest podawany w cyklach kasowania
Przyczyną 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 zacznie przewodzić, w komórce pamięci nie można już przechowywać żadnych 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 bramkom pływającym na tranzystor, komórki pamięci wielopoziomowej przechowują różne stany naładowania, a tym samym kilka bitów na tranzystor pamięci. Tranzystor przewodzi wtedy różnie przyłożony prąd, który jest analizowany podczas odczytu.
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 i lampa błyskowa, jak i gotowa karta microSD mogą pochodzić od różnych producentów - karta SD Panasonic na przykładowym zdjęciu ma lampę błyskową Samsunga, a kontroler został wyprodukowany w Japonii.
Urządzenia NAND flash są produkowane przez czterech producentów:
- 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. Rozwój pamięci nadal odbywa się wspólnie. SanDisk i Toshiba, wraz z Matshushita, są twórcami standardu SD, wprowadzonego w 1999 roku. Standard microSD również został stworzony przez SanDisk.
Od dłuższego czasu polegamy na marce SanDisk i jak dotąd mamy z nią bardzo dobre doświadczenia.
Samsung (zalecane)
Często polecane są również karty pamięci Samsung. Jako lider rynku w sektorze NAND flash, Samsung potrafi idealnie dopasować do siebie wszystkie elementy 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 można zagwarantować 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 należy rozważyć klasę pamięci. Klasa ta wskazuje najszybszą prędkość zapisu blok po bloku. Nie jest to prędkość zapisu dla rozproszonych zapisów o dostępie losowym, co jest bardziej znaczące 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 Odpowiednią kartę pamięci można następnie sprawdzić pod kątem kompatybilności z Raspberry Pi. Ważna uwaga: firmware Raspberry Pi był kilkakrotnie modyfikowany w celu uzyskania 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 jest numerem seryjnym karty microSD, jest to 32-bitowe pole, które powinno być odczytywane jako unsigned integer.
Strona mdt (Manufacturing Date) wskazuje, kiedy karta została wyprodukowana - rok i miesiąc.
Wartości te można porównać z wartościami podawanymi na stronach internetowych w celu wykrycia oszustw z użyciem fałszywych kart 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 nie można już zagwarantować stałej jakości.
Unikanie uszkodzeń danych podczas pracy
Karta microSD jest "twardym dyskiem" Raspberry Pi. W normalnej konfiguracji Linuksa jest ona traktowana dokładnie tak samo, jak dysk twardy - występują na niej zarówno operacje odczytu, jak i zapisu. Linux rejestruje informacje w wielu plikach dziennika i między innymi aktualizuje czasy dostępu do plików. Dane są więc często zmieniane i nadpisywane. 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ęci podręczne odczytu i zapisu w celu przyspieszenia operacji na plikach. Kiedy po prostu odłączasz zasilanie od Pi, możesz stracić informacje w pamięci podręcznej zapisu, które nie zostały jeszcze zapisane na 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.
Szczególnie systemy wbudowane - czyli takie, które zostały stworzone do konkretnego celu i są następnie instalowane w aplikacji (np. digital signage) nie muszą mieć możliwości ciągłego instalowania nowego oprogramowania i prowadzenia dokładnych logów na miejscu. Logi mogą być przesyłane przez sieć do centralnego serwera (w razie potrzeby z opóźnieniem), a w przypadku aktualizacji systemu, system może być przełączony 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 dyski RAM (w tmpfs), system może nadal zapisywać pliki logów, czy dokonywać zmian w plikach. Nakładki na dyski RAM mogą być okresowo synchronizowane ze specjalnie wyznaczonymi partycjami na karcie SD. Należy uważać na dysk RAM, aby się nie przepełnił (z powodu plików logów), no i oczywiście jest mniej pamięci RAM dostępnej dla 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 nie jest jeszcze ustawiony (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 twojego 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)
Następujące polecenie może być użyte do wyłączenia 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.
Stosując odpowiednie zasilanie, systemy tylko do odczytu z nakładkami, konsekwentną redukcję operacji 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 bootowania przez sieć, nadal zalecane jest zainstalowanie karty microSD ze specjalnym firmware, ponieważ błąd timeout w kodzie bootującym uniemożliwia stabilny start (Raspberry Pi 3B).
Powyższe objaśnienia dotyczące struktury pamięci flash odnoszą się również do pamięci USB, ponieważ pamięć flash jest w nich również zainstalowana.
(**) 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!) [...]