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.

Po pierwsze, dam dogłębny przegląd tego, jak działają karty pamięci, dzięki czemu można zrozumieć możliwości i ograniczenia sprawdzania stanu zdrowia karty SD. Następnie wyjaśnię, jak chronić swoją kartę microSD poprzez zmniejszenie wspólnych problemów Raspberry Pi użytkowników doświadczenie. Będziemy również przejść do najlepszych marek kart microSD dla Raspberry Pi polecamy. Jeśli chcesz, możesz również pominąć dalej, aby po prostu uzyskać Linux polecenia, aby sprawdzić aktualny stan karty microSD.

Podstawy: Wewnątrz karty microSD

Inneres einer microSD Karte
Obraz: Ilustracja przedstawiająca wnętrze karty SD. Karta microSD ma podobną strukturę. Źródło obrazu: CC-BY-SA Korpsvart, Wikimedia Commons

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ć dokonywany bitowo lub przynajmniej bajtowo/słownie. Wymazywanie (dla logicznego "0") może być wykonywane tylko w kierunku zgodnym z ruchem wskazówek zegara. 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

TL;DR 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

TL;DR 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

TL;DR NIE zalecane

Mieliśmy złe doświadczenia z niezawodnością kart Kingston o pojemności 128 GB w jednym z krytycznych projektów. Firma Kingston nie posiada własnych fabryk i kupuje nadwyżki mocy produkcyjnych od innych producentów pamięci flash. W związku z tym 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.

Jeśli potrzebujesz profesjonalnego wsparcia dla swojego projektu/produktu opartego na Raspberry Pi, skontaktuj się z nami w celu uzyskania bezpłatnej wstępnej konsultacji..

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.

Komentarzy: 1

  1. Pete październik 13, 2021 o 8:27 pm

    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

Pozostaw komentarz