Czy rozmiar ma znaczenie?

W tym przypadku prawo nagłówków Betteridge’a nie ma zastosowania, odpowiedź będzie twierdząca, a wszystko za sprawą Androida.

Logo Androida
Źródło: https://en.wikipedia.org/wiki/Android_(operating_system)

Od roku korzystam z Yanosika. Jakiś czas temu zauważyłem, że niemal skończyło mi się miejsce na karcie SD. Szybkie śledztwo ujawniło, że głównym winowajcą nie są – jak przypuszczałem – zdjęcia, tylko katalog yanosik-new, który zajmował ponad 700 MB z dostępnych 2 GB na karcie (wiem, mała, taka zaszłość). Ponarzekałem na FB, usłyszałem, że zawartość katalogu można bezpiecznie usunąć – odbuduje sobie co potrzebne. Znaczy się klasyczny cache. OK, rok używany, karta mała, nie robię afery. Usunąłem.

Ostatnimi dniami coś Yanosik zaczął zgłaszać błędy w stylu aplikacja nie odpowiada – czekaj/zgłoś/zamknij. Coś mnie tknęło, żeby znowu sprawdzić zajętość karty i… bingo. Znowu brak wolnego miejsca. Co prawda zrobiłem na urlopie parę zdjęć, ale zdecydowanie nie kilkaset MB. Oczywiście znowu yanosik-new ma rozmiar ponad 700 MB… Zacząłem szukać większej karty i rozglądać się za instrukcją zmiany karty w telefonie na większą. Przy okazji obmyślając, jakich ciepłych słów użyć pod adresem autorów Yanosika, bo zużycie 700 MB w rok to jeszcze jestem jakoś w stanie zrozumieć, ale w 3 tygodnie?

Znalazłem jakąś kartę 4 GB, ale okazało się, że muszę sprawdzić, czy jest sprawna. Wymiana karty SD w urządzeniach z Androidem jest prosta – wystarczy zgrać całą zawartość na komputer, sformatować nową kartę, przegrać wszystkie dane na nową. I powinno działać. Wygląda prosto, ale stwierdziłem, że zrobię backup, poza tym i tak wygodniej wrzucić całość na chwilę na komputer, niż kopiować między czytnikami.

I tu niespodzianka. Po usunięciu miniaturek zdjęć (jakieś 200 czy 300 MB) i skopiowaniu wszystkich danych na dysku katalog zajął… 880 MB.  Czyli jakąś połowę tego, co na karcie. W tym momencie zapaliła mi się lampka ostrzegawcza. Czyżby rozmiar bloku? Katalog Yanosika ma dużo małych kilkusetbajtowych plików, więc może o to chodzi. Sprawdziłem jego rozmiar w komputerze. 130 MB, więc bez dramatu. Czyżby autorzy zrobili taki bezsensowny i niedostosowany do Androida cache?

Zacząłem drążyć temat i okazało się, że cfdisk pokazuje jako system plików FAT16. No ale jak to? I jaki jest rozmiar bloku dla FAT 16? I czy w ogóle pojemności rzędu 2 GB są obsługiwane przez taki zabytek? Szybka wyprawa do muzeum i okazało się, że owszem, FAT16 obsługuje pojemności dysku do 2 GB. A rozmiar bloku to wówczas… 32 kB. Zamiast wymieniać kartę, postanowiłem zrobić mały eksperyment: zmienić system plików na FAT32.

Zmieniłem typ partycji w cfdisk (raczej bez znaczenia) i sformatowałem kartę przy pomocy mkfs.vfat -F 32, czyli wymuszając FAT32. Skopiowałem dane z komputera, włączyłem telefon, odbudowałem cache zdjęć. Po tym zabiegu jest 930 GB wolnego, bez kasowania jakichkolwiek danych! Czyli rozmiar bloku ma w przypadku urządzeń z Androidem duże znaczenie.

Zastanawiam się tylko, jak to możliwe. Kto w XXI w. używa FAT16? Nie kojarzę gdzie była formatowana karta. Wiele wskazuje na to, że w samym telefonie. Czyżby Android był tak słabo zaprojektowany, że domyślnie formatuje karty o rozmiarze 2 GB i mniejsze na FAT16? Jeśli tak, to jak widać zupełnie bez sensu. Ciekawe też, jaki system plików jest w na wbudowanej pamięci flash. Bo o ile karty microSD są tanie (8 GB class 4 od 12 zł widzę, za mniej niż 20 zł można nawet 16 GB class 10 w sklepie kupić), więc rozważania o rozmiarze 2 GB są czysto teoretyczne, o tyle w przypadku wbudowanej pamięci nie ma możliwości zmiany jej rozmiaru – trzeba zmienić urządzenie. Gra w tym przypadku (Yanosik i jego cache plus jakieś inne dane typu zdjęcia, ale przypuszczam, że nie on jeden tak robi…) toczy się w praktyce o podwojenie miejsca…

Pewnego rodzaju obejściem problemu może być w tym przypadku opisane kiedyś przeniesienie aplikacji z pamięci wbudowanej na kartę. Oczywiście najlepiej sformatowaną na FAT32, ale to powinno już stać się automatycznie w przypadku pojemności większych niż 2 GB.

Handel po polsku – jednak się da? @XKOM_PL

Generalnie nie mam w zwyczaju opisywać każdego sklepu (chyba, że ostro skopią…), w którym kupuję, ale dla x-kom.pl zrobię wyjątek, bo mnie urzekli aktywnością na Twitterze. Chyba pierwsza polska firma, która robi sensowny i nienachalny marketing w social media (tu: Twitter), więc w nagrodę trochę konstruktywnej – mam nadzieję – krytyki (czepialstwa).

tl;dr – warto obserwować na Twitterze, dobre promocje, działają nieźle i szybko, choć pewne rzeczy, raczej kosmetyczne, można poprawić.

Zaczęło się od tego, że któryś ze znajomych podzielił się statusem o którejś promocji. I okazała się ona być sensowna. Znaczy faktycznie upust do dobrej ceny, a nie „mamy 30% drożej niż konkurencja, to obniżmy cenę o 25% i zróbmy szum”. Rzuciłem okiem, stwierdziłem, że warto dodać do obserwowanych, bo może kiedyś coś mi się przyda, a recenzje klientów dość entuzjastyczne. Poza tym, jest interakcja z użytkownikami i raczej niewiele „pustych” statusów typu „co u was słychać?”. Chociaż – po sprawdzeniu – takie też się pojawiają, ale normalnie nie rzuca się w oczy, więc strawna ilość.

Wczoraj nadszedł ten dzień, że pojawiły się w promocji karty microSD Sandisk 16GB class 10. Za 19,99 zł, czyli cena, w której normalnie można kupić class 4. Sprawdziłem dziś na popularnym portalu Aukcyjnym i najtańsze takie karty były po 24 zł. Pomyślałem, że do Banana Pi jak znalazł i kupiłem. No to obiecane wrażenia z zakupu.

Kupno w sklepie internetowym wymaga rejestracji. Nie przepadam, ale taki jest de facto standard, więc nie narzekam. Na plus – zgoda na wysyłkę info o promocjach nie jest obowiązkowa. Na minus – konieczne jest podanie numeru telefonu, który – uprzedzę fakty – do niczego nie jest tak naprawdę potrzebny.

Po finalizacji zamówienia pojawia się informacja, że mail został wysłany. I żeby sprawdzać folder Spam. Zwłaszcza to drugie dziwi, bo istnieją sposoby, żeby takie rzeczy nie miały miejsca. Dla leniwych: są serwisy, przy użyciu których rozwiązuje się ten problem rzutem pieniądza, także polskie. Kolejna rzecz na minus – na maila czeka się długo. Na tyle długo, że zacząłem się dopytywać na Twitterze, ile. I nie, nie chodzi o greylisting. Ani nie wymagam od poczty dotarcia w kilkanaście sekund (choć prawda jest taka, że z większości serwisów maile mam na skrzynce w małe kilkadziesiąt sekund).

Łącznie dostałem cztery maile, wszystkie z jednego adresu (OK!):

  1. Potwierdzenie rejestracji
  2. Twoje zamówienie zostało przyjęte
  3. Twoje zamówienie oczekuje na realizację
  4. Twoje zamówienie zostało przekazane do realizacji

Pierwszego nie trzeba komentować – po prostu potwierdzenie rejestracji. Drugi, wysłany 8 minut(!) później, potwierdza przyjęcie do zamówienia i mówi, że „W kolejnej wiadomości otrzymasz szczegółowe informacje na temat sposobu jego realizacji”. Ciekawostką jest trzeci „Twoje zamówienie nr xxx zostanie skompletowane najszybciej jak to możliwe. Poinformujemy Cię o tym w kolejnej wiadomości. Jeśli terminy dostawy produktów Ci nie odpowiadają, możesz anulować zamówienie klikając na ten link”. Kupiłem dwie sztuki z odbiorem w salonie, dostępna była jedna. Fajnie, że mogę zrezygnować z zamówienia, ale szkoda, że nie ma informacji, ile będę tak naprawdę czekał (brak nawet przybliżonego czasu). Ostatni mail zawiera informację o tym, że zamówienie można odebrać. I został wysłany 25h od złożenia zamówienia, czyli bardzo dobry wynik.

Co mi się nie podoba? Tematy maili. Pierwsze dwa są OK, ale trzeci i czwarty są IMO mylące. Jak dla mnie to zamówienie „oczekuje na realizację”  czy też „jest realizowane” od momentu przyjęcia zamówienia. Nazwałbym to po prostu „opóźnienie w realizacji zamówienia”, bo taka jest wymowa. I dodał orientacyjny termin. Ostatnie – zupełnie nie wiem, czemu nie „zamówienie gotowe do odbioru” ew., jeśli to wspólne dla wysyłek pocztą „zamówienie zrealizowane”.

I tu dochodzi ostatni element, czyli SMS. Po pierwsze, został on wysłany po ostatnim mailu. Minutę, ale jednak. Po drugie, nie zawierał numeru zamówienia. Po trzecie: nic nie wniósł całego procesu. Numer telefonu mógłby być niewymagany, tak naprawdę.

Wyszło, że narzekam. Ale nie narzekam, wręcz przeciwnie. Jest szybko (25h od zamówienia do odbioru w moim mieście) i sprawnie, ceny dobre. Miła odmiana po tym, co opisywałem ostatnio, choć przyznaję, że Chińczycy stawiają poprzeczkę wysoko, jeśli chodzi o ceny, czas realizacji i obsługę klienta (w tym bezpieczeństwo transakcji). Podsumowanie: dobre ceny (przynajmniej na promocjach), szybka realizacja. Będę kibicować i korzystać.

Raspberry Pi, Raspbian i problemy z kartami microSD

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?