¿Cómo harías para probar (hasta destruir) la vida útil de una tarjeta microSD?

¿Cómo harías para probar (hasta destruir) la vida útil de una tarjeta microSD?

Estoy usando tarjetas microSD en un producto y he tenido algunas fallas por sectores defectuosos. Todavía tengo más tarjetas SD del mismo lote y quería ver si podía probarlas hasta su destrucción (es decir, hasta que un sector se desgasta) y medir cuántos datos totales se escribieron en la tarjeta antes de esa fecha.

¿Cómo puedo hacer esto?

Gracias

Respuesta1

Una técnica sencilla sería utilizar una herramienta segura de borrado de disco. Estas herramientas escriben una secuencia de datos en cada ubicación del disco. Esto probará todos los sectores de la unidad. Puede ejecutar estas herramientas de forma iterativa para asegurarse de que el disco esté muy limpio. Esta limpieza consumirá la vida útil de una tarjeta SD. Si realiza un seguimiento del número de pases que se ejecutan antes de que falle la tarjeta, sabrá cuántos datos escribió en el disco. Dicho esto, este es el mejor caso para la unidad, ya que las escrituras se distribuyen por todo el disco.

El peor de los casos sería escribir una y otra vez en el mismo sector hasta que falle. Esto daría como resultado que se escribiera la menor cantidad de datos antes de que la tarjeta comenzara a fallar. Si escribiera un solo archivo, lo eliminara y luego lo volviera a escribir repetidamente, esto debería resultar en una falla prematura de la tarjeta con la menor cantidad de datos escritos. Esto supone que la tarjeta no es inteligente y no reasigna sectores en la memoria flash como lo hace un SSD.

Ambas cosas anteriores se pueden lograr usando el comando dd en Linux o en un Live CD de Linux.

Suponiendo que el dispositivo fuera /dev/sdx, lo siguiente debería funcionar.

i=0
while :
do
  dd if=/dev/urandom of=/dev/sdx bs=1024 count=1000
  if [ $? != 0 ];then break;fi
  let i=i+1
  echo $i
done

Esto no es perfecto, pero es lo que se consigue sin necesidad de codificar el suyo propio. Escribirá 1 MB de datos aleatorios en el disco para cada iteración. Cuando dd comience a generar un error, saldrá y sabrá cuántas iteraciones pasaron antes de que fallara. El gran defecto aquí es que los datos son aleatorios. Si los bits son los mismos que antes, es posible que la memoria flash no los escriba y, como tales, no se ejerzan. Suponiendo una distribución perfecta, el resultado será el doble del número real de escrituras necesarias para fallar.

Una solución más perfecta implicaría iterar entre ceros y unos o utilizar tableros de ajedrez alternos. Sin un dispositivo /dev/one en Linux, esto requiere una solución más complicada de la que creo que se justifica aquí.

información relacionada