Le micro SD sono delle memorie molto comode, senza dubbio: sono compatte, economiche ma tutto sommato possono raggiungere capienze abbastanza elevate e, se di buona qualità, anche velocità apprezzabili.
Il loro problema è che però essendo delle memorie flash si rovinano man mano che ci si scrive. Odio questa cosa in tutte le mie memorie flash, inclusa l’unità SSD del mio PC e per ovviare almeno un po’ ho tutta una serie di directory montate in RAM.
Solitamente quando lo dico ai miei amici, la reazione è di darmi del paranoico e di dirmi che sebbene io mi preoccupi, in realtà non vado a cambiare niente. Però, checché loro ne dicano, mi si è rovinata una memoria flash: la micro SD della Raspberry Pi.
Era una Samsung EVO da 8GB, comprata un paio di anni fa per usarla con il vecchio Y530, ma non era stata molto stressata, almeno fino a ottobre, quando ho cominciato a usarla con il computerino.
Da un po’, di tanto in tanto la Raspberry crashava e avevo sempre pensato fossero i driver beta per il Realtek RTL8811AU, finché un giorno non si è più accesa. Il LED rosso di alimentazione rimaneva acceso, lo switch ethernet rilevava la scheda connessa, ma i LED della scheda di rete erano spenti. Collegandomi alla console UART, i messaggi del boot erano abbastanza regolari, almeno fino a circa 8 secondi dall’avvio, quando si interrompevano del tutto. Non era un kernel panic perché comunque il normale echo della consolle funzionava, ma il sistema non faceva nient’altro.
Ho provato a fare un fsck sulla partizione di root, ettenendo questi errori (Debian nella risposta del comando si riferisce all’etichetta del file system):
fsck from util-linux 2.29.1 e2fsck 1.43.4 (31-Jan-2017) Debian: ripristino del journal Super-blocco needs_recovery flag is clear, but journal has data. Eseguire journal comunque? sì fsck.ext4: impossibile impostarei i flag del superblocco a Debian Debian: ********** ATTENZIONE: Il file system contiene ancora errori ************
Oltre che dar modo di apprezzare l’orrenda traduzione, il comando non è riuscito a fare altro.
Insospettito, ho provato a piallare la tabella delle partizioni, sia da GParted che da dd, ma la scrittura sulla micro SD risultava semplicemente impossibile: non dava alcun errore, ma di fatto nulla veniva scritto. Ho provato a cambiare anche adattatore e lettore, poi ho provato anche a scrivere sulla partizione FAT da Windows, ma invano.
Quindi con 11,90€ ho comprato una nuova micro SD, questa volta della Lexar, sperando non succeda più un problema simile in futuro. Altrimenti recupererò qualche vecchio hard disk IDE, un box USB e una SD classe 4 da usare solo per il boot 😜 .
Adesso, in ogni caso, ho preso alcune precauzioni: per prima cosa mi sono assicurato che /tmp
sia montata in RAM, poi ho ridotto lo swappiness, in modo che sia usato solo in casi di estrema necessità.
Infine mi sono accorto che c’è un errore che verrebbe spammato troppo spesso col kernel ufficiale Debian, quindi l’ho messo in blacklist su rsyslog: ho creato un file chiamato /etc/rsyslog.d/01-i2c.conf
con questo contenuto:
:msg,contains,"i2c transfer failed" ~
Purtroppo non ho pensato di provare il file system F2FS, se non dopo aver già fatto tutto il resto, però magari con una futura formattazione proverò.
Link utili
- SSDOptimization: alcune note dal wiki di Debian su come ottimizzare il sistema per le memorie flash
- How to Manage Swap Usage in Linux: alcune note sulla gestione dello swap e sulla swappiness