Todo sobre la salud de la tarjeta SD en la Raspberry Pi

Estado de la tarjeta SD

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 comunes que experimentan los usuarios de Raspberry Pi. También entraremos en las mejores marcas de tarjetas microSD para Raspberry Pi que recomendamos.

Si lo desea, también puede saltar más abajo, para obtener sólo los comandos de Linux para comprobar el estado actual de la tarjeta microSD.

Lo básico: El interior de la tarjeta microSD

En el interior de una tarjeta microSD
Imagen: Ilustración del interior de una tarjeta SD. La tarjeta microSD tiene una estructura similar. Fuente de la imagen: CC-BY-SA Korpsvart, Wikimedia Commons

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 mantiene incluso después de desconectar la 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 programar la puerta flotante se necesitan tensiones eléctricas considerablemente más altas (por ejemplo, 10 V) que para el funcionamiento normal de lectura (por ejemplo, 3,3 V). Para ello, además, la puerta de control (V1/V2/V3) desempeña un papel fundamental.

Para borrarlo todo, la puerta de control expulsa electrones de la puerta flotante aplicando una tensión negativa alta.

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 realizarse en sentido de bits o al menos en sentido byte/palabra. El borrado (para un "0" lógico) sólo puede hacerse en el sentido de las agujas del reloj. Si queda información sin alterar, hay que programarla de nuevo.

Las memorias flash tienen una vida útil limitada debido a la programación y el borrado, que calculamos en ciclos de borrado.

La razón de su limitada vida útil es el daño sufrido por la capa de óxido aislante, que protege la puerta flotante de las fugas de carga, provocadas por los altos voltajes. En cuanto esta capa se vuelve conductora, la célula de memoria no puede contener más información.

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. Durante la lectura, el sistema evalúa cómo la corriente aplicada es conducida de forma diferente por el transistor.

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 como el dispositivo flash y la tarjeta microSD terminada pueden ser de distintos fabricantes: la tarjeta SD Panasonic de la foto de ejemplo tiene flash Samsung. El controlador se fabricó en Japón.

Hay cuatro fabricantes que producen dispositivos flash NAND:

  • 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 (recomendado)

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. Siguen colaborando en el desarrollo de memorias. SanDisk y Toshiba, junto con Matshushita, son los fundadores de la norma SD, introducida en 1999. SanDisk también creó el estándar microSD.

Llevamos mucho tiempo confiando en la marca SanDisk y hemos tenido muy buenas experiencias con ella hasta ahora.

Samsung (recomendado)

También recomendamos las tarjetas de memoria Samsung. Como líder del mercado en el sector de flash NAND, Samsung puede adaptar perfectamente entre sí todos los componentes de la tarjeta SD y dispone de toda la información necesaria para obtener un producto sólido.

Kingston (NO recomendado)

Tuvimos una mala experiencia con la fiabilidad de las tarjetas Kingston de 128 GB en un proyecto crítico. Kingston no tiene fábricas propias y compra el exceso de capacidad a otros fabricantes de memorias flash. Como resultado, no hay garantía de 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, la clase de memoria es importante. Esta clase indica la velocidad de escritura más rápida bloque a bloque. No es la velocidad de escritura para escrituras de acceso aleatorio dispersas, que es más significativa en 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.orgpuede comprobar la compatibilidad de una tarjeta de memoria adecuada con su Raspberry Pi. Nota importante: modifican constantemente el firmware de Raspberry Pi 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 se lee como un entero sin signo.

El mdt (Fecha de fabricación) indica cuándo se fabricó la tarjeta: año y mes.

Puedes comparar los valores con páginas web para detectar fraudes por 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 la calidad constante no es algo seguro.

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, funciona como un disco duro normal - se producen accesos tanto de lectura como de 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 cambian 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 desconectas la alimentación de la Pi, puedes perder la información de las cachés de escritura que no ha llegado a 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 integrados, es decir, los que sirven a un propósito específico en una aplicación (por ejemplo, señalización digital) no necesitan necesariamente la posibilidad de instalar constantemente nuevo software y mantener registros precisos in situ. Se pueden enviar los registros a través de la red a un servidor central (con retraso si es necesario), y para las actualizaciones del sistema se puede poner el sistema 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 superposiciones de disco RAM (en tmpfs), un sistema puede seguir escribiendo archivos de registro o realizar cambios en los archivos. Puedes sincronizar las superposiciones del disco RAM periódicamente con particiones especialmente designadas en la tarjeta SD. Debes 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 aún no lo has configurado (Raspbian parece configurarlo 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, 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)

Puede utilizar el siguiente comando para desactivar 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.

Utilizando la fuente de alimentación adecuada, sistemas de sólo lectura con superposiciones, reducción constante de las operaciones de escritura y seleccionando una buena tarjeta SD de una marca conocida, se puede aumentar la estabilidad a largo plazo.

Si necesita apoyo profesional para su proyecto/producto basado en Raspberry Pi, póngase en contacto con nosotros para una consulta inicial gratuita.

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, recomendamos instalar una tarjeta microSD con un firmware especial, ya que 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 también se basan en la memoria flash.

(**) 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.

Si quieres saber más sobre las tarjetas SD con tu Raspberry Pi, echa un vistazo a nuestros numerosos artículos sobre el tema aquí.

5 Comentarios

  1. Pete el octubre 13, 2021 a las 8:27 pm

    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

    • unintell el noviembre 9, 2022 a las 3:55 pm

      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

      • unintell el noviembre 9, 2022 a las 4:03 pm

        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.

  2. [...] Salud de la tarjeta SD (¡incluye las mejores prácticas para cuidar tu tarjeta SD!) [...]

  3. [...] Todo sobre la salud de la tarjeta SD / microSD en la Raspberry Pi [...]

Deja un comentario