Muszę przetestować odporność jakiegoś kodu do odczytu / zapisu dla niektórych osadzonych urządzeń. Jak mogę poświęcić kilka kart SD i rozbić kilka znanych sektorów w celu kontrolowanego badania?
Jedyne, co mogę wymyślić, to zastąpienie jednego sektora kilka milionów razy. Zastanawiam się, czy można utworzyć skrypt Badblocks dla Linuksa, aby kilkakrotnie kilkakrotnie uruchamiał swój niszczycielski test na jednym sektorze.
sd-card
bad-sectors
bad-blocks
Gabe Krause
źródło
źródło
Odpowiedzi:
Alternatywne podejście, które może być przydatne.
Jeśli kod działa pod Linuksem, być może możesz go przetestować za pomocą „wadliwego” urządzenia logicznego.
dmsetup
potrafi tworzyć urządzenia zwracające błędy We / Wy. Po prostu zbuduj urządzenie za pomocąerror
i / lubflakey
celu. Odman 8 dmsetup
:Uwaga:
flakey
użycie celu jest tutaj udokumentowane . Podstawowy przykład tutaj .O ile mi wiadomo, błąd we / wy zostanie natychmiast zgłoszony, więc różni się on od rzeczywistego zachowania karty SD, w którym można spodziewać się opóźnienia, przeciągnięcia itp. Niemniej jednak uważam, że to podejście może być przydatne w niektórych przypadkach, przynajmniej do szybkiego wykonania wstępny test lub coś takiego.
źródło
dmsetup
polecenie konfiguracjierror
urządzenia, które zawsze zwraca błędy odczytu: stackoverflow.com/questions/1870696/…Ten facet zhakował mikrokontroler wewnątrz kart SD używanych do oznaczania złych bloków: https://www.bunniestudios.com/blog/?p=3554
Możesz zrobić to samo i dowolnie oznaczyć bloki jako wadliwe.
.
.
.
źródło
Zwykle to nie działa, ponieważ najnowsze karty SD (lub eMMC) używają statycznego i dynamicznego wyrównywania zużycia, co oznacza, że inteligentny kontroler interpretuje instrukcję zapisu i mapuje ją do jednego z najmniej używanych sektorów flash.
Jedyne, co możesz zrobić, to skontaktować się ze swoimi dostawcami i poprosić o ich arkusz danych; mogą istnieć pewne (specyficzne dla dostawcy) sposoby odzyskania stanu ich algorytmu wyrównywania zużycia. To potencjalnie pozwoli ci zapytać o stan / użycie bazowej pamięci flash. Lub możesz mieć pecha, a to może nie istnieć.
Jeśli Twoim celem jest naprawdę zniszczenie pamięci flash, wszystko, co możesz zrobić, to uruchomić ogromne cykle odczytu i zapisu oraz stale sprawdzać, czy dane, które odczytujesz, są nadal spójne. Np. Utwórz dwa duże pliki, przechowuj ich sumy kontrolne i odczytuj / zapisuj je w celu weryfikacji ich sumy kontrolnej. Im większy błysk, tym dłużej potrwa ten proces.
źródło
Możesz zwiększyć zużycie tranzystora, zwiększając temperaturę pracy. Użyj cykli kasowania zapisu na rozgrzanym układzie scalonym (70–120 ° C); będzie się zużywał szybciej.
źródło
Przedmowa: Ta opcja wymaga dodatkowych modyfikacji programowych i sprzętowych, ale pozwoliłaby na kontrolowane odczyty najprawdopodobniej przezroczyste dla hosta.
Karta SD ma wiele opcji we / wy, ale można nią sterować za pomocą interfejsu SPI. Jeśli weźmiesz kartę SD i zmodyfikujesz ją tak, abyś mógł podłączyć piny do mikrokontrolera (takiego jak Arduino), możesz mieć Arduino naśladujące kartę SD i być przezroczyste dla urządzenia odczytującego kartę SD. Twój kod na mikrokontrolerze może celowo zwrócić złe dane, gdy zajdzie taka potrzeba. Ponadto można umieścić kartę SD w mikrokontrolerze, aby odczyt mógł przejść przez mikrokontroler do karty SD, aby umożliwić gigabajty testowania.
źródło
Chciałbym pójść na eBay / aliexpress i kupić najtańszą kartę SD, jaką mogę znaleźć w Chinach, która jest „zbyt piękna, aby mogła być prawdziwa”. Często pochodzą z wadliwych sektorów lub w oprogramowaniu są znacznie większe niż w rzeczywistości. Tak czy inaczej, powinieneś skończyć z wadliwą kartą SD do testowania.
źródło
Dawno, dawno temu, wiele lat temu zapłacono mi za odzyskanie zestawu zdjęć dyplomowych i filmów z karty SD dla raczej zrozpaczonej matki. Po dokładnej inspekcji karta została w jakiś sposób fizycznie uszkodzona z widocznym pęknięciem w zewnętrznej obudowie i miała kilka wadliwych sektorów, w szczególności kilka wczesnych, krytycznych sektorów, co sprawiło, że nawet najbardziej niezawodne programy odzyskiwania w tym czasie całkowicie nie odczytały karty . Ponadto narzędzia danych kryminalistycznych kosztują wówczas fortunę.
Skończyło się na uzyskaniu identycznej karty SD marki / rozmiaru i napisaniu własnego niestandardowego narzędzia zrzutu i przywracania danych surowych, aby skopiować dane ze złej karty na dobrą. Za każdym razem, gdy narzędzie uderza w zły sektor, kilkakrotnie ponawia próbę przed zapisaniem wszystkich zer dla tego sektora i zamiast poddawać się i zatrzymywać, ignoruje awarię i przechodzi do następnego sektora. Próbowano ponowić próbę, ponieważ zauważyłem również, że niektóre sektory nadal mają około 40% skuteczności odczytu. Gdy dane znalazły się na nowej karcie SD, narzędzia do odzyskiwania, które zawiodły wcześniej, działały bezbłędnie przy minimalnej utracie / uszkodzeniu danych. Ogółem odzyskano około 98% wszystkich plików. Odzyskano również wiele elementów, które zostały wcześniej usunięte, ponieważ nic nigdy nie jest faktycznie usuwane - tylko oznaczone jako takie i powoli nadpisywane. To, co zaczęło się jako nieco nudne ćwiczenie odzyskiwania danych, stało się jednym z moich bardziej pamiętnych i interesujących projektów rozwoju oprogramowania osobistego. Gdybyś się zastanawiał, matka była zachwycona.
W każdym razie ta historia pokazuje, że możliwe jest fizyczne uszkodzenie karty SD, tak że dane są nadal dostępne, ale mają sektory, które ledwo funkcjonują i wszystko, co próbuje je odczytać, ma z tym trudności. Plastikowe karty SD wydają się być dość cienkie, więc załamanie lub przecięcie niektórych tanich może załatwić sprawę. Twój przebieg może się różnić.
Możesz również zapytać w niektórych miejscach odzyskiwania danych w Twojej okolicy. Ponieważ specjalizują się one w odzyskiwaniu danych z różnych urządzeń, które uległy awarii lub awarii, powinny mieć przydatne informacje / porady, a nawet mieć pod ręką niektóre wcześniej zapisane karty SD (np. Do celów szkoleniowych), które można uzyskać od nich.
źródło
dd
w dzisiejszych czasach zachowywał się podobnie. Nie jestem jednak pewien.Ta odpowiedź jest rozwinięciem komentarza @Ruslan
Możliwa alternatywa:
Nie jestem pewien, czy działa to na twoje potrzeby, ale może faktycznie wystarczy fizycznie uszkodzić kartę, co może być znacznie szybsze.
źródło
Możesz spróbować wprowadzić niestabilny zasilacz lub sygnalizację wyższego napięcia.
Powszechny błąd w rodzinie urządzeń, które znam, ma silną korelację między uszkodzeniem karty SD a przerywanym stykiem baterii.
źródło
Niektóre starsze karty SD o niskiej pojemności (16 MB) używają układów flash w pakietach w stylu TSOP / TSSOP. Warsztat zdolny do przeróbki SMT (jeśli wykonujesz pracę osadzoną, możesz mieć tę umiejętność na miejscu, w przeciwnym razie sprawdź, czy małe firmy wykonujące naprawę telefonu / laptopa na poziomie płyty głównej) może oddzielić i ponownie podłączyć ten układ, aby można go było czytać i pisać surowe (w tym kody ECC) z programatorem urządzeń.
Pamiętaj jednak, że będziesz głównie testował:
aw najgorszym przypadku
Jeśli chcesz tylko sprawdzić, jak zachowuje się z nieregularnym zachowaniem z jakiejkolwiek przyczyny z karty SD, prawdopodobnie najlepiej po prostu wprowadzić zakłócenia elektryczne do linii interfejsu (np. Umieszczając przełącznik magistrali FET pomiędzy, a losowo chwilowo przełączając do źródła bezsensownych sygnałów (o odpowiednich poziomach elektrycznych).
źródło
Powiązane z odpowiedzią OlafM, ale inne: możesz zaprogramować własny mikrokontroler, aby mówił protokół karty SD, a następnie emulować dowolne zachowanie, jakie chcesz.
źródło
Obszar FAT32 Master Boot Record jest prawdopodobnie najbardziej podatny na nadużycia, ponieważ na poziomie logicznym zawsze musi znajdować się w tym samym miejscu. (Być może rozwiązuje to problem miękkiego mapowania uszkodzonych sektorów, ale jestem nieco sceptyczny, że jest to realizowane na całym sprzęcie.) Możesz więc uruchomić
sfdisk
w pętli i sprawdzić, czy możesz to w ten sposób zniszczyć.Ale błagam cię, abyś zrobił wszystko, co możliwe, aby poprawić niezawodność sprzętu, zamiast próbować obsługiwać zły sprzęt w oprogramowaniu. Problem polega na tym, że karty SD zawodzą na różne dziwne sposoby. Stają się nieczytelne, stają się nie do zapisania, dają złe dane, tracą czas podczas operacji itp. Próba przewidzenia wszystkich przyczyn niepowodzenia karty jest bardzo trudna.
Oto jedna z moich ulubionych awarii, „tryb dużych zbiorów danych”:
Karty SD są towarowymi produktami konsumenckimi, które podlegają ogromnej presji kosztowej. Części zmieniają się szybko, a arkusze danych są trudne do zdobycia. Podrobiony produkt nie jest niespotykany. W przypadku taniego miejsca do przechowywania są trudne do pokonania, ale chociaż dyski SSD traktują niezawodność priorytetem, priorytetem dla kart SD jest szybkość, pojemność i koszt (prawdopodobnie nie w tej kolejności).
Pierwszą linią obrony jest użycie lutowalnej części eMMC z prawdziwym arkuszem danych renomowanego producenta zamiast wymiennej karty SD. Tak, kosztują więcej za GB, ale część będzie produkowana przez dłuższy czas, a przynajmniej wiesz, co dostajesz. Przylutowanie części pozwala również uniknąć wielu potencjalnych problemów (karty wyrwane podczas zapisu, słaby kontakt elektryczny itp.) Z kartą wymienną.
Jeśli Twój produkt wymaga wymiennego miejsca do przechowywania lub po prostu jest za późno, aby cokolwiek zmienić, zastanów się nad wydaniem dodatkowych pieniędzy na karty klasy „przemysłowej” lub traktuj je jak przedmioty jednorazowego użytku. To, co robimy (pod Linuksem), to
fsck
karta podczas rozruchu i sformatuj ją, jeśli zostaną zgłoszone jakiekolwiek błędy, ponieważ formatowanie jest dopuszczalne w tym przypadku użycia. Potemfsck
to znowu. Jeśli po ponownym sformatowaniu nadal zgłasza błędy, zmieniamy go na RMA i zastępujemy sprzęt nowszym wariantem korzystającym z eMMC.Powodzenia!
źródło
Być może nie jest to kierunek, w którym chciałeś, ale stwierdziłem, że usunięcie mojej karty SD podczas odczytu radia lub laptopa gwarantuje, że karta SD uległa awarii około 1/5 lub 1/10 razy. Wygląda na to, że karty nie radzą sobie dobrze po usunięciu zasilania podczas odczytu i prawdopodobnie pisze. Po przeczytaniu poniższych komentarzy Roberta Calhouna, sądzę, że może to szkodzić FAT. Chociaż nie wiem, dlaczego samo czytanie powoduje awarię - nie powinno być żadnego pisania?
źródło
Jeśli twoja karta SD ma format FAT32, możesz edytować heksadecymalnie 2 tłuszcze i oznaczać sektor jako zły za pomocą poprawnego kodu hex. To tylko sztuczka, jeśli chcesz przetestować logicznie oprogramowanie, które ma znaleźć zły sektor w tym konkretnym miejscu; nie zaszkodzi również karcie SD, sformatowanie przywróci ją do normalnego stanu.
źródło
--make-bad-sector
Flaga wygląda obiecująco! Nie wiem jednak, czy to zadziała tylko w systemie Linux, który początkowo uruchamia to polecenie. Mam nadzieję, że to polecenie whdparm --make-bad-sector 20000 /dev/sd#
jakiś sposób spowoduje uszkodzenie sektora 20000 i zostanie wykryte jako złe na moim wbudowanym urządzeniu sprzętowym, które nie działa pod Linuksem. jakieś pomysły?W jednym sektorze - nie, ponieważ kod wyrównywania zużycia wewnątrz karty SD ponownie zamapuje logiczne bloki w dowolnym miejscu.
Ale można łatwo uruchomić
badblocks -w
w pętli, dopóki nie powoduje pewne złe bloki pojawiają. Coś takiego powinno działać:zakładając, że badblocks zwraca 0, jeśli nie wykryto złych bloków, a w przeciwnym razie ≠ 0 (strona podręcznika nie mówi i nie sprawdziłem kodu źródłowego).
źródło
Zwykle w przypadku kart SD / usSD wprowadzają poziom zużycia, więc może to być dość trudne. W zależności od typu (komórka jednowarstwowa, wielowarstwowa, TLC, 3D-NAND itp.) Cykl zapisu wymagany do przerwania go na tyle, aby wyczerpał pulę sektorów, może znajdować się w wielu TB.
Właściwie przetestowałem to z 4 GB, 64 GB i 256 GB Pro Duo, SSD i napędem thumbdrive, 64 GB K --- s --- przy użyciu 4 mikronów 16 GB układy trwały około 3,84 TB, zanim zawiodło z pojedynczym błędem miękkim w obszarze FAT . Wykorzystanie 256 GB trwało nieco krócej, ale oszacowałoby bez bezpośredniego dostępu do układu, prawdopodobnie napisało może 5 TB, zanim ostatecznie uległo uszkodzeniu MBR, ale nie było jasne, czy kontroler spowodował, że działał solidnie w trybie USB3, ale USB2 miał więcej błędów podczas odczytu i było też bardzo gorąco. 4 GB Duo nie działa w czytniku podczas kopiowania danych, ponownie nie można być pewnym, ale równa się to może 6 lat użytkowania, a aparat wyświetlał również komunikaty „Odzyskiwanie”. Przypadkowo zmieniające się napięcie zasilania podczas zapisu spowoduje, że będzie on działał DUŻO szybciej. Mój 128 GB microSD nie działa po około 2 latach użytkowania z podobnymi objawami,
Usunięto niepotrzebne uwagi na temat eksperymentów rentgenowskich.
źródło