Un sector de flash NAND de repente se pone malo. ¿Qué pasa con el archivo que usa ese sector?

1

Puedo leer mucho acerca de cómo se puede controlar la memoria flash NAND en busca de sectores defectuosos, que están marcados y no se leerán o escribirán en el futuro, ¿pero sucede en el momento en que un sector va mal? Cualquier archivo que estuviera usando ese sector tendría que perderse, ¿no?

¿Qué pasa con ese archivo? ¿Simplemente desaparece por completo del sistema de archivos o permanece en la tabla de inodos pero ahora está dañado e ilegible?

Suponga que el sistema de archivos es UBIFS si eso es importante.

EDITAR: Aquí hay algunos antecedentes para por qué Hago la pregunta: Tengo algunos dispositivos con UBIFS y he visto dos instancias de desaparición de un archivo (archivo diferente y dispositivo diferente cada vez). El archivo en ambos casos simplemente ya no estaba en el sistema de archivos. Pero no tengo una buena explicación de cómo sucedió.

Quería saber si estaba dentro del ámbito de posibilidad de que un bloqueo en el flash NAND simplemente fuera "malo" (estaba pensando en el sentido de que ya no se podía escribir o leer) y tomé todo el archivo con él.

    
pregunta Caleb Paul

2 respuestas

3

La información normalmente se escribe en memorias flash usando códigos de corrección de errores hacia adelante; Además de los 2048 bits que conforman los datos para un sector, algunos valores de bits "ECC" adicionales se calcularán en función del contenido de esos 2048 bits. Cuando se lee un sector, esos valores de bit de ECC se calcularán nuevamente y se compararán con los valores que se almacenaron previamente. Si no coinciden, eso implicaría que uno o más bits cambiaron entre el momento en que se escribieron los datos y el momento en que se leyeron. Si solo un pequeño número de bits ha cambiado, es posible inferir cuáles deberían haber sido los datos correctos.

Tenga en cuenta que en el nivel de hardware sin formato, si un dispositivo almacena cuatro bits por celda, cualquier cosa que corrompa un bit dentro de una celda puede dañar otros, pero las celdas de memoria individuales son esencialmente independientes. En consecuencia, puede ser mucho más probable que una o dos celdas de memoria independientes salgan mal que más de cuatro. Si se diseña un código de corrección de errores para que más de cuatro celdas de memoria tengan que evitar la recuperación perfecta de los datos almacenados, es mucho más probable que un chip descubra que un sector se está deteriorando sin perder datos, que perder datos porque un sector salió mal.

Una pequeña y desagradable advertencia con esto, sin embargo, es que muchos chips de memoria implementan sus propios códigos de corrección de errores internamente, además de lo que se implementa en el controlador externo. Dependiendo de cómo se implementen esos códigos, pueden impedir que el controlador descubra que las celdas de memoria están comenzando a devolver datos corruptos hasta que muchos bits se hayan dañado para evitar la recuperación. Sin embargo, no conozco ninguna forma de identificar unidades de memoria flash en las que tal cosa podría ser un problema.

    
respondido por el supercat
2

Un bit, byte o sector que va mal tiene tres resultados. Es posible que la información no se pueda escribir en ese sector (error de escritura), que no sea legible (acceso de lectura / error io) o que esté dañada (podría pasar una solicitud de valor de error normal pero el acceso futuro devuelva datos confusos).

Pero nada de eso debería afectar si se ve su archivo. ¿Por qué? Debido a que un sistema de archivos utiliza un mapa de archivos e inodos para rastrear archivos a asignaciones de sectores y nombres de archivos / tipo / creación / mod / fechas de acceso / etc. Y guarda múltiples copias de eso. Esto está por encima del controlador de medios que se use, y del error o la dirección que el medio use a nivel físico.

Para que un sector defectuoso haga desaparecer un archivo, es necesario que el archivo desaparezca del mapa de archivos.

Lo que es más probable es que los archivos desaparezcan de un virus o que los errores de almacenamiento en caché no se vacíen (me refiero a expulsar correctamente el disco antes de eliminarlo de la PC).

    
respondido por el Passerby

Lea otras preguntas en las etiquetas