¿Se puede rellenar con cero la nivelación del desgaste de las memorias USB / unidades flash?

4

Como lo entiendo, nivelar el desgaste en Memorias USB / unidades flash será:

  • Ayuda a hacer el último más largo. (reducir el "desgaste", que una celda de flash físico solo se puede escribir XX veces)
  • Sólo puede funcionar realmente si hay celdas de memoria flash sin usar para cambiar. (Cuanto más llena esté la memoria USB, menos celdas alternativas habrá para nivelar el desgaste)

En el peor de los casos, en un momento dado, he agotado todas y cada una de las memorias de la memoria USB. Entonces es menos probable que se produzca alguna nivelación de desgaste. ¿Puedo / (¿Cómo) revertiría este estado?

Quiero decir en términos de dispositivos USB lo que está vacío

0000 0000 0000 0000 (Relleno cero) me parece que es tan válido como un dato
1111 1111 1111 1111 o 1010 1110 0011 1111 o cualquier otro patrón de bits.

El firmware de la memoria USB de alguna manera necesita saber qué se considera un "no usado" Flash-cell, para que pueda usarlo de nuevo para nivelar el desgaste. ¿Pero después de que una vez haya llenado toda la memoria USB, tengo problemas para ver cómo el firmware podrá determinar qué datos pueden "sobrescribirse" ya que no contienen datos?

Así que mi pregunta es: ¿El llenado a cero puede ser una forma de restablecer la nivelación del desgaste de una memoria USB?

Aunque me temo que esto dependerá a menudo de la implementación ("firmware" y "fabricante"), sigo pensando que este enfoque podría tener una lógica para asumir que el "llenado a cero" puede restablecer la memoria USB en ciertos mejor diseñado- Memorias usb .

La lógica que imagino sería que la nivelación de desgaste del firmware reconocería que un bloque completo (es decir, 512 bytes o 2 kbytes) se establecería solo en ceros.

Bloquear antes: 1101 1011 1000 0010 ... 0001 0011
Bloquear después de: 0000 0000 0000 0000 ... 0000 0000

Cuando leo de este Bloque, me gustaría recibir, por supuesto, esta información:
Bloquear después de: 0000 0000 0000 0000 ... 0000 0000 Pero esta información podría generarse sobre la marcha almacenando ese Bloque XYZ = vacío en una determinada celda flash solo disponible para el firmware.

Si este fuera el caso, el grupo cuando "reiniciar" (mediante el llenado a cero) se habilitaría para otros fines, ya que la información se almacena en la parte de la memoria del firmware BLOCK XYZ = vacío.

He leído que debería haber algunas memorias USB que tengan ese firmware y, por lo tanto, se puedan restablecer. ¿Puede esto ser verdad? Me gustaría saber, por la pregunta, una "tendencia" tal vez respaldada por información de un fabricante destacado. Tal vez exista incluso una lista que enumere dispositivos USB que puedan restablecerse de esta manera. Para que la respuesta pueda contener un enlace a dicha lista.

También asumo que no hay "un nuevo firmware" diseñado por cada dispositivo USB producido y tal vez hay un firmware USB prominente (que se usa a menudo) que hace tal nivel de desgaste. Entonces, la pregunta podría responderse con respecto a ese firmware.

En el mejor de los casos, alguna persona inteligente podría encontrar una manera de responder a la pregunta en esa forma que contiene algunas instrucciones que nos permitieron a los usuarios (de superusuario) "averiguar" si esta nivelación de desgaste está habilitada o no.

algunos antecedentes de mi pregunta

Las memorias USB / unidades de memoria flash son una buena cosa segura. Pero el problema es que la forma en que almacenan los datos se desgasta, lo que significa que después de solo XX ¡Escribe en una celda de datos! ¡BINGO! tu palo esta muerto

Una forma de aliviar el problema (que Células de memoria flash solo se puede escribir en un número bastante pequeño de veces) es "nivelación de desgaste". Lo que importará es que, si es posible, los datos no siempre se escriban en el mismo. celdas de memoria flash .

La forma en que funciona es que, en lugar de escribir los datos siempre en las mismas celdas físicas, los datos (cuando se modifican) se escriben en otras celdas físicas nuevas. Esto reduce el "estrés" porque, en el mejor de los casos, esto seguirá así.

Para ayudar a entender algunos niveles básicos de desgaste, incluí este concepto a continuación, que muestra cómo la información de "hola", "salut", "hola" y "hi" se almacena posteriormente en una celda de datos lógica llamada datos , que en realidad se escribe en una memoria flash física diferente cada vez (por lo tanto, un pequeño "concepto" de nivelación de desgaste).


state 1:
[CELL1: e-m-p-t-y] [CELL2:e-m-p-t-y] [CELL3: e-m-p-t-y]


=> write data "hello"


state 2:
[CELL1: hello]     [CELL2:e-m-p-t-y] [CELL3: e-m-p-t-y]
 data=CELL1

=> update data to "salut"


state 3:
[CELL1: hello]     [CELL2: salut]    [CELL3: e-m-p-t-y]
 data=CELL2

=> update data to "hola"

state 4:
[CELL1: hello]     [CELL2: salut]    [CELL3: hola]
 data=CELL3

=> update data to "hi"

state5
[CELL1: hi]     [CELL2: salut]    [CELL3: hola]
 data=CELL1 


Observa cómo después de escribir 4 veces. datos Cada celda en promedio solo fue escrita 1.33 veces. Observe también que la información de qué celda contiene la "lógica datos "también debe almacenarse y actualizarse (lo que requiere que el firmware realice esta contabilidad, usando algo de memoria reservada para esto también)

humanityANDpeace
fuente

Respuestas:

3

Algunas unidades flash pueden verificar si los datos escritos son todos ceros y simplemente desasignar esa región en lugar de programar la memoria flash. Aunque no sé qué tan común es.

Actualmente estoy trabajando en el controlador MMC (no puedo decirle de quién es un secreto :-)) y su firmware comprueba el contenido de los datos, no en escritura, sino más tarde durante el borrado y el GC. Se desmarca todas las regiones cero encontradas.

En cuanto a cómo

"averigüe" si esta nivelación de desgaste está habilitada o no.

Puede tratar de comparar la velocidad de lectura del bloque de datos con cero rellenado previamente y del bloque de datos con relleno aleatorio (es mejor apagar la unidad después de escribir para evitar el uso de la memoria caché). Si su unidad de memoria flash comprueba el contenido de los datos entrantes y simplemente desmarca la región escrita, la lectura de esta región debería ser mucho más rápida, ya que el controlador puede omitir la lectura real de la memoria flash (que es una operación prolongada).

Anon
fuente
Dado que un bloque 2k (que parece ser una unidad de tamaño común para un bloque) de datos puede ser todo ceros, se podría reducir de una manera que podría remuestrear TRIM y la información (incluso todo el cero es información) se puede almacenar en un 1 byte más información en la memoria. Esos bloques "cero" podrían usarse para el ciclismo de desgaste. Por supuesto, el bloque no se puede utilizar para escribir datos, ya que esto aumentaría virtualmente la memoria y fallaría una vez que los bloques se llenen nuevamente con datos. Pero el logik para un intercambio especial de un patrón determinado ("todo cero es solo un patrón en 2k") podría usarse para aumentar la protección contra el desgaste.
humanityANDpeace
1

¿Pero después de que una vez haya llenado toda la memoria USB, tengo problemas para ver cómo el firmware podrá determinar qué datos pueden "sobrescribirse" ya que no contienen datos?

TRIM tiene la intención de resolver este problema, al proporcionar un mecanismo donde el sistema operativo puede decirle a la unidad que no está esperando que un sector contenga datos. TRIM es una especificación de SAS / SATA y no una especificación de USB, por lo que no funciona para las unidades flash USB, desafortunadamente.

Sin TRIM, no es seguro que la unidad asuma que los datos no son necesarios.

¿El llenado a cero puede ser una forma de restablecer la nivelación del desgaste de una memoria USB?

Claro, si el firmware funciona de esta manera. No hay forma de saberlo sin el código fuente del firmware o la documentación del desarrollador. Los chips flash funcionan en páginas y bloques. El chip puede borrar solo bloques completos a la vez (128 KB, por ejemplo), que constan de muchas páginas (por ejemplo, 2 KB) que son generalmente más grandes que los sectores de disco duro tradicionales que emulan las unidades USB (512 bytes).

Tal vez exista incluso una lista que enumere dispositivos USB que puedan restablecerse de esta manera. Para que la respuesta pueda contener un enlace a dicha lista.

Es muy probable que, dado que las unidades flash USB sean muy baratas en estos días, realmente no valga la pena para el fabricante proporcionar esta información.

También asumo que no hay "un nuevo firmware" diseñado por cada dispositivo USB producido y tal vez hay un firmware USB prominente (que se usa a menudo) que hace tal nivel de desgaste. Entonces, la pregunta podría responderse con respecto a ese firmware.

Cada unidad flash USB tiene un microcontrolador (microcontrolador = CPU + ROM o firmware). Puede abrir la unidad de memoria flash y buscar en función de los números en el chip para intentar averiguar el tipo. Probablemente hay un número limitado de estos en comparación con el número total de unidades flash producidas, pero no me sorprendería que hubiera muchas variaciones de algunos tipos de núcleo. Ciertamente no hay ningún firmware estándar único ni nada de eso.

Existen utilidades de chip que le permiten reprogramar el microcontrolador en algunos de estos para crear CD-ROM virtuales y en ciertos tipos de unidades flash. Esta es un área muy indocumentada y es difícil encontrar información sobre ella. No he tenido mucha suerte.

Pero el problema es que la forma en que almacenan los datos se desgasta, lo que significa que después de solo XX ¡Escribe en una celda de datos! ¡BINGO! tu palo esta muerto

No, solo esa celda. Los SSD (y las tarjetas SD y las unidades de memoria flash) están sobreajustados, lo que significa que tienen más flash de lo anunciado en el paquete. Este flash adicional se usa como área "de repuesto" para cubrir los bloques que se desgastan. También cubre los defectos del fabricante: ningún flash tiene bloques de trabajo 100% garantizados, excepto el primer bloque.

LawrenceC
fuente
En tu último párrafo dices "No, solo esa celda". ... antes de indicar que la mayoría de las memorias flash / USB funcionan en bloques 2k. ¿Qué quieres decir con celular? pérdida de 1 byte (= 1 celda) o pérdida de 2k bytes (= 1 celda = 1 2kblock)? Además, creo que usted afirma que muchas de las verdaderas no son realmente distinguibles por el usuario en cuanto a su calidad y, por lo tanto, las soluciones más inteligentes como algún tipo de TRIM o la técnica de restablecimiento de campo cero (como se indica en otra respuesta) no están incentivadas ...
humanityANDpeace
Bueno, solo un byte en la página puede ser malo (es decir, no cambiará a 1 cuando se borre), pero como es probable que los algoritmos funcionen en la página o incluso en el nivel de bloque, esto resultará en la pérdida efectiva de la página o del bloque.
LawrenceC
0

El almacenamiento USB no es mecánico (como las primeras cuentas en una cuadrícula) ni magnético (como en una cinta) ni óptico (como los CD), sino eléctrico. Considere cada ubicación como una pequeña celda de batería que se descarga con el tiempo (mucho tiempo). Toda escritura causa degradación. El llenado a cero solo empeorará las cosas. El chip en sí tiene un controlador que usa nivelación de desgaste o no lo hace; un usuario no puede cambiar esto. En términos simples, la nivelación del desgaste solo garantiza que las diferentes partes del USB obtengan una parte justa de la carga de requisitos de almacenamiento.

pnuts
fuente
gracias. No entiendo por qué me explicas que no es mecánico / magnético. (Mi pregunta seguramente no fue tan tonta como para provocar que no lo sabría ya). La pregunta es en realidad acerca de los aspectos específicos de la "nivelación de desgaste" y cómo un relleno de cero (suponiendo que cierto firmware) podría reiniciar el dispositivo. Simplemente no puedo aceptar que una vez escrito en todos los bloques, una "nivelación de desgaste" estúpida nunca se recuperaría. Por lo tanto, creo que debe haber algo así como un "TRIM" o reinicio (a través de relleno cero) para "buenos sticks USB"
humanityANDpeace
@humanityANDpeace Si 1 o 0 es como Sí o No a las respuestas 20 preguntas - Se usan las "vidas" por igual. Tomándote por un idiota, ten en cuenta que las respuestas aquí pretenden ser de utilidad para muchos más que simplemente el que hizo la pregunta. Pero la vida se puede prolongar asegurándose de que el dispositivo USB se encienda con la suficiente frecuencia.
pnuts
Gracias por explicar la parte (que las preguntas están dirigidas a un público más amplio) y lamento haberlo tomado mal. De hecho, me gusta mucho que haya habido al menos un intento de responder a la pregunta. ¿Este "encendido USB a menudo" está relacionado con el problema de "la altura aumenta la vida útil de las celdas de memoria flash", o cómo te refieres? Gracias
humanityANDpeace
@humanityANDpeace Disculpas por el retraso. No estoy seguro de lo que quiere decir con "aumento de la vida útil de las celdas de memoria" y siento que, en cualquier caso, no aborda realmente el OP (ni tampoco mi comentario sobre el encendido se encendió con la frecuencia suficiente, pero eso empeora la digresión). Tal vez empezar de nuevo con una nueva publicación?
pnuts