Investigué un poco y escuché sobre el comportamiento al final de la vida útil de la tarjeta SD (no estoy seguro de cómo llamarlo) donde las tarjetas SD y microSD se vuelven de solo lectura para evitar la pérdida de datos. Cuando oí hablar de él por primera vez, pensé que era terriblemente inteligente. Ahora no estoy tan seguro.
Algunos antecedentes: tenía una microSD que duró 2 años de uso intensivo de Raspberry Pi antes de ponerse en modo de protección contra escritura. Usé dd para mover todo el sistema operativo y el sistema de archivos a mi tarjeta de reemplazo. A los pocos días de uso, me di cuenta de que esta tarjeta también se había protegido contra escritura. Pensé que había tenido mala suerte, hasta que mi segunda tarjeta de respaldo hizo lo mismo casi de inmediato.
Esto me preocupó, así que desde entonces dejé reposar la frambuesa. Pero he empezado a preguntarme cómo sabe la tarjeta SD que debe protegerse contra escritura. Si lleva un recuento de los ciclos de escritura y usé dd para crear una imagen de todo el disco, entonces es posible que haya dañado mis tarjetas SD engañándolas haciéndoles pensar que eran viejas. Pero no puedo encontrar la implementación del comportamiento al final de la vida en ninguna parte. Alguien sabe como funciona? Me gustaría intentar deshacerlo, pero la protección contra escritura parece estar implementada en un nivel muy bajo. Ni siquiera puedo acceder a /dev/sdX usando sudo.
Si estoy en lo cierto y mantiene algún tipo de recuento del ciclo de escritura, esto es más que un poco frustrante. Significa que la tarjeta SD en realidad no ha muerto, es sólo una medida de precaución. Si bien esto es bueno, me gustaría usarlo hasta el final, ya que hago copias de seguridad periódicamente.
Con eso como mi larga experiencia, ¿alguien sabe cómo se implementa el comportamiento al final de la vida y hay alguna manera de deshacer una activación accidental del comportamiento?
Respuesta1
La mayoría de los fabricantes no publican su mecanismo de nivelación de desgaste, lo que hace imposible determinar los mejores y peores escenarios de esperanza de vida (probablemente esa sea la razón porque con ese conocimiento uno podría destruir dicha tarjeta en poco tiempo).
SanDisk proporcionó alguna información hace bastante tiempo (https://web.archive.org/web/20150326122100/http://ugweb.cs.ualberta.ca/~c274/resources/hardware/SDcards/WPaperWearLevelv1.0.pdf). Si bien esto probablemente haya cambiado o se haya perfeccionado, los conceptos básicos aún deberían aplicarse:
Cada chip de memoria está dividido en bloques. Un bloque es un conjunto de celdas de memoria organizadas como sectores. (...) La unidad mínima para una operación de escritura o lectura es una página (o sector). La unidad mínima para una operación de borrado es un bloque. Los bloques físicos se agrupan lógicamente en zonas. (...) La nivelación del desgaste se realiza dentro de una zona. El firmware actual no distribuye el desgaste por toda la capacidad de la tarjeta. Cada zona tiene aproximadamente un 3 % de “bloques de repuesto” adicionales más allá de lo asignado para cumplir con la capacidad lógica de la tarjeta flash. Este grupo de bloques se conoce comúnmente como "Borrar grupo".
Incluso si el desgaste se distribuye por toda la tarjeta, el principio sigue siendo el mismo.
Cuando una tarjeta detecta que un bloque ha llegado al final de su vida útil, elimina ese bloque de los bloques que están disponibles para operaciones de escritura. El resultado es una reducción del tamaño del grupo de borrado. Esto no afecta la capacidad de la tarjeta vista por el anfitrión. Cuando el pool de bloques disponibles para operaciones de escritura se haya agotado debido al desgaste, la tarjeta llegará al final de su vida útil para operaciones de escritura.
Debido a que la capacidad de la tarjeta no se reduce y el nivel de desgaste en la tarjeta del consumidor no reescribe los datos almacenados (como en los SSD), algunos tipos de escritura pueden desgastar rápidamente la tarjeta. Un tipo escribe solo en un sector que requiere que se escriba todo el bloque. Dependiendo de su sistema operativo, dd
es posible que utilice un tamaño de bloque predeterminado 512
que puede ser mucho menor que el tamaño de bloque de la tarjeta y, por lo tanto, generar una gran amplificación de escritura. Un ejemplo: cuando el tamaño del bloque de las tarjetas SD es de 16 kB y un sector es de 512 bytes, la cantidad de desgaste se puede aumentar en este caso hasta el factor 31. Esta podría ser la razón por la cual su segunda tarjeta falló antes de tiempo.
La información de desgaste no se copia porque es parte del hardware de la tarjeta SD y, por lo tanto, esta información no se puede leer ni restaurar por medios normales. Lo mismo se aplica a la protección contra escritura, ya que el propio controlador de la tarjeta SD lo impide. Entonces, no, si no estamos hablando de protección contra escritura por hardware (interruptor mecánico en tarjetas SD) o software (montaje de solo lectura), este proceso no es reversible.
Respuesta2
Se supone que las tarjetas tienen algo de espacio adicional para usarlas para nivelar el desgaste, pero parece que tal vez las que tienes son tontas y no tienen bloques de repuesto y son de solo lectura porque has escrito en cada bloque. la unidad. Copiar los archivos en lugar de usar dd
, o usar e2image -ar
para copiar un sistema de archivos ext[234] evitará escribir innecesariamente en cada bloque no utilizado en el disco, lo que puede ayudar.