Jakieś siedem tygodni temu pisałem, że padła mi karta microSD (Kingston) w Raspberry Pi. Wymieniłem na nową (Goodram). Zamontowana oszczędnie, tj. bez journala i z symlinkiem /var/lib/transmission-daemon/info kierującym na dysk twardy. Wczoraj robię aktualizację systemu, a tu nagle:
Preparing to replace libssl1.0.0:armhf 1.0.1e-2+rvt+deb7u7 (using .../libssl1.0.0_1.0.1e-2+rvt+deb7u10_armhf.deb) ...
Unpacking replacement libssl1.0.0:armhf ... dpkg: error processing /var/cache/apt/archives/libssl1.0.0_1.0.1e-2+rvt+deb7u10_armhf.deb (--unpack):
error creating directory `./usr/share/doc/libssl1.0.0': Input/output error
Segmentation fault Segmentation fault -bash: mbrtowc.c:92: __mbrtowc: Assertion `status == __GCONV_OK || status == __GCONV_EMPTY_INPUT || status == __GCONV_ILLEGAL_INPUT || status == __GCONV_INCOMPLETE_INPUT || status == __GCONV_FULL_OUTPUT' failed.
Piękne, prawda? Oczywiście kluczowy jest input/output error. Fsck, są błędy, naprawiony filesystem. Coś mnie tknęło i sprawdziłem badblocks (badblocks -sv). Tak jest, błędy w okolicy 90% karty (dead link). Sztuk prawie 30. Wygląda, że karta Goodram wytrzymała w komfortowych warunkach raptem 7 tygodni. Masakra.
Z tego wszystkiego zacząłem sprawdzać, co pisze na dysk (iotop -ao). Wyniki (sortowane po ilości zapisów, czas działania kilka godzin) są ciekawe:
3192 be/4 root 8.00 K 4.03 M 0.00 % 0.00 % rsyslogd -c5
2184 be/4 root 240.00 K 880.00 K 0.00 % 0.00 % nmbd -D
3341 be/4 ntp 248.00 K 188.00 K 0.00 % 0.00 % ntpd -p /var/run/ntpd.pid -g -u 102:104
5256 be/4 root 0.00 B 160.00 K 0.00 % 0.00 % [kworker/u2:2]
2911 be/4 root 208.00 K 88.00 K 0.00 % 0.00 % -bash
Jak widać, głównie rsyslog. I raczej nie ma tego wiele.
I tu zaczyna się część najciekawsza. Pamiętacie uszkodzoną kartę Kingstona? Przygotowałem się do pozbycia się jej, poleciał shred. Stwierdziłem, że uruchomię badblocks na niej. I… niespodzianka. Teraz nie zgłasza błędów. Ani w teście odczytu (domyślny), ani w niedestrukcyjnym teście zapisu (badblocks -nvs). Naprawiło się?
Zaczynam podejrzewać jakiegoś buga z przejściówką microSD -> SD (ale są dwie różne, bo każda karta miała swoją), gniazdem w rpi (ale działało OK, poza tym i badblocks, i fsck robię w laptopie). Zagadka.
Ostatecznie zmniejszyłem rozmiar partycji ext4 na karcie Kingstona i działa do tej pory bez problemu. Czyli jakieś 3 tygodnie bezproblemowego działania, bo wpis zacząłem tworzyć 12 czerwca.
UPDATE: Zwariowałem. Goodram, który ewidentnie miał błędy, bo nie tylko badblocks je wykazywał, ale nawet shred puszczony przed wyrzuceniem powodował błędy IO i nie mógł dobrnąć do końca (a próbowałem nie raz), teraz działa. Nagrałem Raspbiana dla Banana Pi, test badblockiem i… czysto. WTF?
Normalnie powiedziałbym byś startował z SD a rootfs trzymał na HDD. Ale to R/Pi a tam nie wiem czy USB można ufać.
To może problem z elektroniką sterującą. Nikt pewnie nie przewidział, że to może pracować tak długo bez restartu. 🙂
niebezpiecznik.pl/post/hackowanie-kart-microsd-czyli-jak-nadpisac-ich-firmware-aby-zainstalowac-rootkita/
Buga w przejściówce nie znajdziesz, bo to tylko kawałek plastyku ze stykami. Po prostu z powodu rozmiarów karty MicroSD są mniej trwałe niż jakiekolwiek inne pamięci.
Pobieżnie przeglądając sieć trafiłem na sporo narzekań na trwałość karty w RPi. Zaleca się używać kart z tej listy z jednoczesnym przerzuceniem się na używanie karty w trybie tylko do odczytu, albo po prostu przerzucić się na korzystanie z USB.
@Hrw Jest dokładnie taki plan – /boot na karcie microsd (bo z USB rpi się – wg mojej wiedzy – nie umie bootować) a / na dysku. Czy też podobnie jak mam w Dockstarze, partycja root w RO a wybrane katalogi na dysku. Tak czy inaczej to poczeka sobie na nowy dysk, na którym zrobię jakiś linuksowy filesystem. Obecnie jest prowizorka z NTFS. I pewnie poczeka od razu na Banana Pi. I dostanie nową kartę. Póki co – działa.
@Sebastian Tylko w takim wypadku powinno wracać do normy po restarcie. Albo nie wracać w ogóle. Podejrzewam jeszcze temperaturę.
@Monter J.w. – temperatura i rozszerzalność materiałów. Albo degradacja powierzchni styku w czasie. Tylko, jakby, na degradację za wcześnie. I nie powinna ustąpić.
Chyba miałeś na myśli „wystąpić”.
Mam dwa czytniki MicroSD – takie, jak ten (jeden ma logo HC, drugi nie) i swego czasu z racji pałętających się po szufladzie kart tego typu pochodzących z telefonów ale o małej pojemności postanowiłem wykorzystać je wraz z czytnikami jako chwilowe pendrive do testowania. Na jeden wgrałem sobie GeeXboX, na drugim postanowiłem pobawić się Debianem Live. Podczas wgrywania obrazu nic się nie działo, ale po odpaleniu kompa z takiego „pendrive” raz się wszystko zawiesiło i komputer przestał widzieć urządzenie. Przekładka do innego portu nic nie dała. Już myślałem, że karta padła ale gdy na następny dzień sprawdziłem ją jeszcze raz działała jakby nigdy nic. Zupełnie jakby (wspomniana przez Ciebie) temperatura lub ilość operacji odczyt/zapis (u mnie) spowodowały jakąś blokadę/przerwę w połączeniu. Nie mam niestety pod ręką żadnego desktopa z linuchem żeby zapuścić badblocks’a. Tak, czy siak, wygląda na to, że ciężko na tych kartach polegać.
Zdecydowanie „ustąpić”. Po prostu Kingston został zaorany shredem, poleżał i… jak go później wziąłem, to działa normalnie. Czyli problem ustąpił. 🙂
Z czystej ciekawości, przy montowaniu karty włączałeś jakieś optymalizacje dla ssd? Trim, noatime, długi writeback?
W wiki archa lib debiana było wprost napisane, by przy partycjonowaniu karty zostawić sobie fragment wolny, że wtedy to lepiej działa. O ile dobrze kojarzę, chodziło o problem z wydłużającym się czasem zapisu gdy kończy się miejsce. Ale, jak widzę, u Ciebie to się sprawdza.
@mt3o Tylko noatime jest dla / Nie pamiętam czy dodałem czy przyszło z Raspbianem. Trim AFAIK nie ma sensu, bo to urządzenie musi wspierać, czego karty microSD AFAIK nie robią.
Potwierdzam problemy z SD w RPi. RPi wykorzystuję zawodowo w jednym z urządzeń, na chwilę obecną działa tego kilkadziesiąt sztuk. Przerobiłem wiele marek i pojemności kart sd i microsd, zawsze były problemy, wcześniej czy później pojawiają się błędy. Zmieniałem parametry fs, utrzymywałem temperaturę na stałym poziomie, monitorowałem napięcie zasilania i wiele innych. Nic nie pomaga, dopiero modyfikacja root i boot fs na readonly przyniosła poprawę, ale nie w 100% i tak zdarzyły się pojedyncze pady. Generalnie jestem mocno zawiedziony RPi, aktualnie migruję na inne platformy mikrokomputerków.
Mi kiedyś karta SD rozpołowiła się po niedługim czasie – serwis Goodram odrzucił reklamację – uszkodzenie mechaniczne – NIE POLECAM. Szkoda, bo to polska firma.