Todo sobre la salud de la tarjeta SD / microSD en la Raspberry Pi
La tarjeta SD es - junto a la fuente de alimentación - un componente adicional crítico de la Raspberry Pi. Controlar su salud es realmente importante para asegurar un buen funcionamiento de su sistema operativo Raspberry Pi, y una buena experiencia de usuario. Este artículo le mostrará varias maneras de comprobar y supervisar la salud de su tarjeta microSD.
En primer lugar, daré una visión general en profundidad de cómo funcionan las tarjetas de memoria, para que puedas entender las posibilidades y limitaciones de comprobar el estado de salud de tu tarjeta SD. Luego explicaré cómo proteger tu tarjeta microSD reduciendo los problemas más comunes que experimentan los usuarios de Raspberry Pi. También hablaremos de las mejores marcas de tarjetas microSD para Raspberry Pi que recomendamos. Si quieres, también puedes saltar más abajo, para sólo obtener los comandos de Linux para comprobar el estado actual de la tarjeta microSD.Lo básico: El interior de la tarjeta microSD

La tarjeta microSD contiene un chip de memoria flash (a la izquierda de la imagen) y un microcontrolador (a la derecha de la imagen, normalmente basado en ARM).
Flash
La memoria flash almacena la información mediante "atrapando" electronesque se "inyectan" con alta tensión a través de un no conductor en un llamado puerta flotante(**). Los electrones forman así parte de un transistor que puede permitir o no el paso de una corriente conectada, según la carga de la puerta flotante. Teóricamente, no pueden fluir, porque la puerta flotante está aislada eléctricamente. Esto significa que la información se conserva incluso después de desconectar el suministro de corriente.
La información se lee siempre entre la fuente (S) y el drenaje (D). Los electrones introducidos en la puerta flotante aumentan, por ejemplo, la tensión de umbral del transistor, a partir de la cual fluiría la corriente. El transistor se bloquea entonces a una tensión de lectura normal (no conduce).
Para la programación de la puerta flotante se utilizan tensiones eléctricas mucho más altas (por ejemplo, 10 V) que para el funcionamiento normal de lectura (por ejemplo, 3,3 V). Para ello, se utiliza adicionalmente la puerta de control (V1/V2/V3).
Para el borrado, los electrones vuelven a salir de la puerta flotante aplicando una alta tensión negativa a través de la puerta de control.
Los componentes de la flash NAND utilizados en las tarjetas microSD agrupan los transistores de memoria individuales en páginas, y varias de las páginas en bloques. Una página tiene entre 512 y 8192 bytes, y un bloque puede contener hasta 256 páginas (por tanto, un total de 2048 kB con un tamaño de página de 8kB).
La escritura (para un "1" lógico) puede hacerse en sentido de los bits o al menos en sentido de los bytes/palabras. El borrado (para un "0" lógico) sólo puede hacerse en bloque. La información que no ha sido modificada debe ser programada de nuevo.
Las memorias flash tienen una vida limitada debido a la programación y al borrado, que se da en ciclos de borrado
La razón de la limitada vida útil es el daño de la capa de óxido aislante, que protege la puerta flotante de la fuga de carga, causada por los altos voltajes. En cuanto esta capa se vuelve conductora, no se puede retener más información en la célula de memoria.
Al margen: Células de memoria celular de varios niveles
Inicialmente, sólo había dos estados de carga (1 bit de información) por célula de memoria. Ahora, gracias a varias puertas flotantes por transistor, las células de memoria multinivel almacenan diferentes estados de carga y, por tanto, varios bits por transistor de memoria. El transistor conduce entonces la corriente aplicada de forma diferente, lo que se evalúa durante la lectura.
Por un lado, esto permite aumentar considerablemente la densidad de las células de memoria, pero por otro lado, la lectura es más lenta y las células de memoria reaccionan de forma mucho más sensible con errores de bits a las pérdidas de carga. Con las células de un solo nivel se pueden realizar entre 100.000 y 1.000.000 de ciclos de escritura y borrado, mientras que con las TLC (células de triple nivel con tres bits por célula de memoria) se pueden realizar unos 1.000 ciclos de escritura y borrado.
Por este motivo, las tarjetas SD industriales suelen tener densidades de memoria más bajas y utilizan SLC (células de un solo nivel), para mejorar la integridad de los datos.
El controlador
La tarea del controlador es gestionar el flash, y en particular realizar nivelación del desgaste y corrección de errores de lectura. El rendimiento y la longevidad de la tarjeta microSD dependen decisivamente de los algoritmos utilizados en el controlador.
La memoria flash no puede reescribirse con la frecuencia necesaria debido a los daños en la capa de óxido aislante de las puertas flotantes, como se ha descrito anteriormente. Para evitar daños en zonas individuales que se utilizan con especial frecuencia, el controlador varía la asignación física a los bloques que pueden ser direccionados lógicamente por el sistema de archivos (= nivelación de desgaste).
Esta variación de la asignación física es también la razón por la que la prueba de escritura de la tarjeta SD (escribiendo y leyendo con herramientas de bloques defectuosos, etc.) no identificará los verdaderos bloques defectuosos y le permitirá evitarlos en el nivel del sistema operativo/sistema de archivos. Sólo el controlador de la memoria flash dentro de la tarjeta microSD sabe en qué bloque se escribe o se lee en cada momento, y como se ha dicho, esto puede cambiar con el tiempo.
Los bloques defectuosos (bad blocks) ya están presentes en la memoria flash nueva. Estos bloques defectuosos se marcan en una zona especial de la memoria flash.
También se gestiona la información de corrección de errores de los bloques individuales para que los errores de lectura puedan corregirse mediante sumas de comprobación. El controlador añade los bloques con errores de lectura agrupados a la lista de bloques defectuosos y desplaza la asignación física real del bloque lógico.
La tarjeta microSD suele tener -según el fabricante- unos 10% de capacidad de reserva para intercambiar los bloques malos por "bloques de reserva" buenos.
Pequeños secretos sucios: Los problemas de la memoria flash
El borrado es sólo en sentido de las agujas del reloj
Los datos sólo pueden borrarse bloque a bloque. El borrado estresa las células de memoria y acorta su vida útil: se crean nuevos bloques defectuosos.
Bloques defectuosos de fábrica
Las memorias flash ya se envían con bloques defectuosos. En el transcurso del funcionamiento, se añaden más bloques defectuosos (bloques malos). Por lo tanto, el controlador intenta escribir/borrar los bloques de la manera más uniforme posible mediante la nivelación del desgaste.
MLC y TLC especialmente sensibles
Las células de memoria multinivel (MLC) reducen el número de ciclos de borrado y, por tanto, la fiabilidad a largo plazo.
Leer Molestar
Un fenómeno aún no mencionado por mí, pero particularmente pérfido, es Leer Molestar. Incluso cuando sólo se lee de la tarjeta, puede -sólo con la lectura- hacer que las células de memoria vecinas del mismo bloque cambien su programación. La probabilidad de que esto ocurra aumenta bruscamente después de unas 100.000 lecturas.
Por ello, para evitar la perturbación de la lectura, el controlador registra el número de accesos a un bloque para copiarlo de una sola vez en una nueva ubicación cuando se supera un umbral, y para borrar el bloque original. Después, el bloque puede volver a utilizarse.
Todas estas son cosas que un controlador tiene que compensar para hacernos creer que es una "tarjeta de memoria perfecta" por fuera, ¡mientras que por dentro parece cualquier cosa menos perfecta!
Por último, pero no menos importante, los bits escritos por los rayos X podrían borrarse involuntariamente. En este caso, sólo un diseño de la tarjeta a prueba de rayos X puede garantizar que los datos permanezcan intactos.
Fabricante y selección de una buena tarjeta
Tanto el microcontrolador y el dispositivo flash como la tarjeta microSD terminada pueden ser de diferentes fabricantes: la tarjeta SD de Panasonic de la foto de ejemplo tiene flash de Samsung, y el controlador se fabricó en Japón.
Los dispositivos flash NAND son producidos por cuatro fabricantes:
- Samsung <- líder del mercado
- Toshiba
- IM Flash Technologies (empresa conjunta de Micron Technology e Intel)
- Hynix en colaboración con Numonyx
Toshiba y Samsung producen la mayoría de los chips.
SanDisk
Recomendación TL;DR
SanDisk y Toshiba tienen una empresa conjunta para la fabricación de memorias flash. Sin embargo, en 2009, SanDisk transfirió los derechos de las fábricas a Toshiba para convertirse en una fabricante de memorias flash sin fábrica. El desarrollo de las memorias sigue haciéndose conjuntamente. SanDisk y Toshiba, junto con Matshushita, son los fundadores del estándar SD, introducido en 1999. El estándar microSD también fue creado por SanDisk.
Llevamos mucho tiempo confiando en la marca SanDisk y hemos tenido muy buenas experiencias con ella hasta ahora.
Samsung
Recomendación TL;DR
Las tarjetas de memoria de Samsung también se recomiendan con frecuencia. Como líder del mercado en el sector de las memorias NAND, Samsung puede hacer coincidir perfectamente todos los componentes de la tarjeta SD y dispone de toda la información necesaria para obtener un producto sólido.
Kingston
TL;DR NO recomendado
Hemos tenido una mala experiencia con la fiabilidad de las tarjetas Kingston de 128 GB en un proyecto crítico. Kingston no tiene sus propias fábricas y compra el exceso de capacidad a otros fabricantes de flash. Como resultado, no se puede garantizar un rendimiento constante.
Lo siguiente artículo de Bunny Huang también es interesante en este contexto.
Toshiba
Toshiba, como #2 en el mercado mundial de DRAM, también vende sus propios productos de tarjetas de memoria. SanDisk y Toshiba, junto con Matshushita, son los fundadores del estándar SD, introducido en 1999. Hasta ahora no tenemos experiencia con las tarjetas de Toshiba.
Transcend / Silicon Power
También hemos utilizado tarjetas Transcend y Silicon Power, especialmente en la gama de bajo coste. Las tarjetas son básicamente buenas, pero hemos visto mayores devoluciones / defectos con Transcend que con SanDisk. Por lo tanto, para proyectos críticos, yo recomendaría más bien SanDisk / Samsung.
Elegir una buena tarjeta de memoria
Para seleccionar una buena tarjeta de memoria, lo primero es elegir el fabricante. Recomendamos Samsung o SanDisky posiblemente Toshiba, para la lista de candidatos.
A continuación, hay que tener en cuenta la clase de memoria. Esta clase indica la velocidad de escritura más rápida bloque a bloque. No es la velocidad de escritura para las escrituras de acceso aleatorio dispersas, que es más significativa en las aplicaciones del mundo real.
Una clase superior es más cara, pero se recomienda debido al importante aumento de rendimiento. Normalmente enviamos tarjetas de clase 10.
En este resumen en eLinux.org una tarjeta de memoria adecuada puede entonces comprobarse su compatibilidad con la Raspberry Pi. Nota importante: el firmware de la Raspberry Pi ha sido modificado varias veces para mejorar la compatibilidad con las tarjetas de memoria y evitar la corrupción de datos.
Debe hacer el pedido a fuentes de confianza, por ejemplo, conseguimos nuestras tarjetas microSD de SanDisk directamente de Raspberry Pi Trading, y de grandes distribuidores alemanes de confianza. En Amazon, asegúrate de hacer el pedido directamente a Amazon, no a un minorista de Marketplace.
Algunas informaciones (cid, csd, fecha, manfid, oemid, serie) de la tarjeta microSD se puede leer con Linux para comprobar que ha recibido el fabricante correcto. Ejemplos con una tarjeta 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
La identificación del fabricante (manfid) es asignada por SD-3C LLCasí como el ID de OEM / aplicación (oemid). El oemid identifica el OEM de la tarjeta y/o el contenido de la misma.
El nombre del producto (nombre) tiene 5 caracteres (ASCII). hwrev es la revisión del hardware, y fwrev la revisión del firmware. Juntos son la revisión del producto (hwrev.fwrev).
El serie es el número de serie de la tarjeta microSD, es un campo de 32 bits que debe leerse como un entero sin signo.
El mdt (Fecha de fabricación) indica cuándo se fabricó la tarjeta: año y mes.
Los valores pueden compararse con los de las páginas web para detectar el fraude de las tarjetas microSD falsas. Recomiendo leer Artículo del blog de Bunny (uno) y este artículo (dos).
Estable hombre/oem combinaciones de una marca indican una cadena de suministro bien controlada y consistente. Por ejemplo, SanDisk tiene la siguiente combinación para todas las entradas de la Wiki de eLinux.org: man:0x000003 oem:0x5344. Otras marcas, como Transcend, varían sus proveedores, por lo que ya no se puede garantizar una calidad constante.
Evitar la corrupción de datos durante el funcionamiento
La tarjeta microSD es el "disco duro" de la Raspberry Pi. Con una configuración normal de Linux, es tratada exactamente de la misma manera que lo haría un disco duro - se producen accesos de lectura y escritura. Linux registra información en muchos archivos de registro, y entre otras cosas, actualiza los tiempos de acceso a los archivos. Por tanto, los datos se modifican y sobrescriben con frecuencia. Esto es algo para lo que las tarjetas microSD nunca fueron diseñadas en primer lugar.
Consejo #1: Apague la Raspberry Pi correctamente y utilice una buena fuente de alimentación
Tampoco desconectarías un ordenador con Windows sin más. Con los ordenadores Linux, y especialmente los Raspberry Pi con soporte para tarjetas microSD, es sólo cuestión de tiempo antes de que se produzcan daños en los datos durante los cortes de energía.
Linux tiene cachés de lectura-escritura para acelerar las operaciones con archivos. Cuando se desconecta la alimentación de la Pi, es posible que se pierda la información de las cachés de escritura que aún no se ha escrito en la microSD.
Como se mencionó anteriormente, el controlador de la microSD está cambiando activamente los datos en tiempo de ejecución para nivelar el desgaste, y evitar molestias de lectura. Esto ocurre sin el conocimiento del sistema Linux ("transparente"). Y dependiendo del fabricante, de forma más o menos conservadora. También aquí -¡especialmente durante las operaciones de escritura! - pueden producirse daños y pérdidas de datos.
Por lo tanto, debe asegurarse de que, después de apagar su Pi, el ACT-LED de la Raspberry Pi deje de parpadear, y sólo entonces tire de la energía.
Un mal suministro de energía también puede provocar problemas debido a parones (baja tensión). En caso de duda, utilice la fuente de alimentación recomendada / suministrada por Raspberry Pi Trading.
Consejo #2 Sistema de lectura con superposiciones
Un sistema de sólo lectura no protege a la tarjeta SD de las perturbaciones de lectura y, por tanto, del envejecimiento debido a los ciclos de borrado necesarios. Sin embargo, esto ocurre mucho más lentamente que cuando se escribe activamente.
Un sistema de archivos de sólo lectura también tiene otras ventajas, por ejemplo, menos comprobaciones del sistema de archivos al iniciarse.
Especialmente los sistemas embebidos, es decir, los que se han desarrollado para un fin específico y se instalan después en una aplicación (por ejemplo, la señalización digital), no necesitan necesariamente la posibilidad de instalar constantemente nuevo software y mantener registros precisos in situ. Los registros pueden enviarse a través de la red a un servidor central (con retraso si es necesario), y para las actualizaciones del sistema se puede poner en modo de mantenimiento para aplicar las actualizaciones.
Aquí hay algo de información del proyecto Debian en el que se basa Raspbian: https://wiki.debian.org/ReadonlyRoot.
Utilizando las superposiciones del disco RAM (en tmpfs), un sistema puede seguir escribiendo archivos de registro, o hacer cambios en los archivos. Las superposiciones del disco RAM podrían sincronizarse periódicamente con particiones especialmente designadas en la tarjeta SD. Hay que tener cuidado con el disco RAM para que no se desborde (debido a los archivos de registro), y por supuesto hay menos memoria RAM disponible para las actividades normales.
Utilizamos esta técnica con nuestro producto Anonymeboxdonde hay que suponer que los usuarios se limitan a desenchufarlo de la toma de corriente.
¿Busca un socio para realizar una solución sólida de sólo lectura para su proyecto de Raspberry Pi integrado? Nosotros (como pi3g e.K.) ofrecemos servicios de consultoría y desarrollopara el hardware y el software.
Consejo #3 Reducción de las operaciones de escritura
Especialmente con los núcleos más antiguos, Linux actualiza el tiempo de acceso para cada acceso a un archivo, de acuerdo con el estándar POSIX. Esto significa que cada operación de lectura da lugar automáticamente a una operación de escritura. Existe la posibilidad de establecer explícitamente noatime en /etc/fstab si no está ya establecido (Raspbian parece establecerlo automáticamente).
Más información sobre relativizar el tiempo y noatime
Desactivar el registro del sistema mediante la máscara:
systemctl mask systemd-journald.service
Creado el enlace simbólico de /etc/systemd/systemd-journald.service a /dev/null.
sudo systemctl mask rsyslog.service
Creado el enlace simbólico de /etc/systemd/system/rsyslog.service a /dev/null.
Por supuesto, deben examinarse detalladamente otros registros creados por otras aplicaciones y las consecuencias de la desactivación de estos servicios (por ejemplo, que ciertos servicios dejen de iniciarse).
Archivo de intercambio:
Si no hay suficiente RAM, Linux mueve áreas individuales de RAM en un archivo SWAP. (Considere el uso de una Raspberry Pi 4 con suficiente RAM, por ejemplo la Pi 4 / 4 GB o la Pi 4 / 8 GB para su caso de uso). Con el siguiente comando se puede comprobar el estado del archivo SWAP:
sudo systemctl status dphys-swapfile
● dphys-swapfile.service - LSB: Autogenerar y utilizar un archivo de intercambio. Cargado: cargado (/etc/init.d/dphys-swapfile) Activo: activo (salido) desde sáb 2017-07-01 19:11:57 UTC; hace 8min Proceso: 498 ExecStart=/etc/init.d/dphys-swapfile start (code=exited, status=0/SUCCESS)
El siguiente comando se puede utilizar para desactivar el SWAP:
sudo systemctl disable dphys-swapfile
Conclusión:
Las tarjetas microSD en uso continuo ponen a prueba la fiabilidad a largo plazo de los sistemas basados en Raspberry Pi.
Si se utiliza una fuente de alimentación adecuada, sistemas de sólo lectura con superposiciones, una reducción constante de las operaciones de escritura y la selección de una buena tarjeta SD de una marca conocida, se puede aumentar la estabilidad a largo plazo.
Notas
(*) NotaRaspberry Pi 3, 3B+ y 4 pueden arrancar desde medios USB, o a través de la red (Ethernet), sin tarjeta microSD.
Especialmente para un arranque a través de la red, todavía se recomienda instalar una tarjeta microSD con un firmware especial, porque un error de tiempo de espera en el código de arranque impide un arranque estable (Raspberry Pi 3B).
Las explicaciones anteriores sobre la estructura de la memoria flash también se aplican a las memorias USB, ya que la memoria flash también se instala en ellas.
(**) NotaUna alternativa cada vez más utilizada a las puertas flotantes son las memorias flash con trampa de carga, pero el principio funcional sigue siendo el mismo. La célula flash con trampa de carga permite mayores densidades de memoria.
Hola,
¿hay alguna manera de comprobar el controlador en la tarjeta SD cuántos plocks malos hay?
Comprobando esto periódicamente me gustaría construir un gráfico de tendencia.
Gracias por el trabajo.
Saludos,
Peter
eso sería imposible para una tarjeta SD normal de grado de consumidor a menos que tengas la herramienta MP para el controlador específico utilizado, que nunca está disponible.
Sería posible si la tarjeta es de grado industrial y tiene información SMART disponible (especificada en su respectiva hoja de datos), y entonces puedes escribir algún código para leer los datos SMART.
Pero esto es sólo el principio del problema. No existe un estándar industrial para la monitorización de la salud de las tarjetas SD, por lo que cada fabricante implementa el protocolo de forma diferente y no siempre se publica.
El informe SMART de algunos fabricantes sólo ofrece un porcentaje del tiempo de vida útil restante de la tarjeta, mientras que otros proporcionan información más detallada, incluyendo los bloques reservados, los bloques malos iniciales, los bloques malos posteriores, el recuento de borrado máximo, mínimo y máximo, el tiempo de vida útil P/E, etc.
Actualmente he podido leer las estadísticas de salud de tarjetas de Lexar, ADATA, ATP, Sandisk, Apacer, Metorage, Delkindevices, SiliconePower, Swissbit y algunas más.
Mi motivación es descifrar la información SMART de tarjetas industriales de segunda mano baratas producidas por Foresee, por ahora he podido descifrar la tarjeta de la serie MPS/M9M/M9H/D7D/X52/X53 y todavía estoy trabajando en algunos modelos más.
Espero que pronto haya un estándar industrial para la información inteligente de las tarjetas SD. También me pareció divertido que algunas tarjetas SD tienen mayor vida TBW que muchos SSDs lmao
Oh, me olvidé de mencionar que la mayoría (pero no todos ellos, mierda.) de las tarjetas da información SMART a través de enviar el comando CMD56 a la tarjeta con un argumento int de 32 bits, tendrá que encontrar ese número mágico de la hoja de datos y el formato de datos respectivos para leer los datos. Si tienes la hoja de datos, entonces estás básicamente hecho, echa un vistazo a la herramienta sdmon en github para el código de ejemplo.
Si el datasheet no está publicado o el número mágico no está publicado, tendrás que iterar todo el espacio de 31bit (el bit más bajo es siempre 1) de int para descifrarlo a la fuerza, y puede tomar de 12 horas a medio mes dependiendo de tu suerte. Espero que no haya ningún fabricante malvado que empiece su número mágico con 0xF_______. Por ahora todos los números mágicos que he conseguido crackear/recoger empiezan por 0x1_______.
Algunas tarjetas requieren una rutina más compleja para leer la información SMART, como Apacer, pero es bueno que proporcionen la información necesaria en la hoja de datos. Apacer también fabrica tarjetas OEM para otras marcas, así que la misma rutina se aplica.