Persistencia e integridad de datos en memorias Flash

Ingeniería Técnica De Telecomunicación, Sistemas De Telecomunicación

César Martín Cristóbal

¿Qué son las memorias Flash?

  • Una evolución de la memoria EEPROM
  • Basadas en transistores MOS de puerta flotante
  • Se dividen en dos clases:
    • NOR:
      • Acceso aleatorio
      • Almacenar sofware que es ejecutado
    • NAND:
      • Modo secuencial
      • Almacenamiento masivo

Motivación

  • El uso de las memorias Flash está bastante extendido
    • Uso general
    • Aplicaciones industriales
  • Pueden almacenar información sensible e importante
  • Problema: cada bloque de memoria soporta unos ciclos de escritura/borrado

Objetivos

  • Determinar el tamaño de sector en hardware y software
  • Determinar cómo funciona la tabla de nombres
  • ¿El controlador mueve datos entre bloques para alargar la vida de los mismos?
    • ¿Un borrado implica cambios "físicos"?
    • ¿El montar y desmontar un dispositivo implica movimiento de datos?
  • Determinar la vida útil (ciclos de vida) de un sector
  • Ver qué información queda después en un sector roto

Estado de la tecnología

  • Para realizar los experimentos hemos contado con dos equipos
  • El controlador es un Alcor AU6989ANHL, privativo de empresa
  • La memoria es una BIWIN BW29F64G08CBABA
    • De tipo Micron 20nm MLC Flash
    • Tienen la capacidad de guardar más de un bit de información
  • Formateadas con FAT32
    • Sistema de archivos desarrollado para MS-DOS
    • Utiliza direcciones de cluster de 32 KiB
    • Tamaño de bloque de 4K

Utilidades

  • Comandos Linux
    • dd, df, hexdump, md5sum, iotop, ls -l | wc -l, od -x
  • Bash:
    • Intérprete de órdenes
  • Shell:
    • Marco que ejecuta comandos
    • chmod u+x script.sh
  • Git:

¿Cómo trabajar desde fuera de la ETSiT?

  • SSH
    • Protocolo de shell remota segura
    • Autenticación público/privada
    • $ ssh-keygen -t rsa -b 2048
    • Añadir .pub en .ssh/authorized_keys
  • Tunelando con ssh
    • $ ssh -L 2222:donatello:22 -L 2221:leonardo:22 usuario@gf.tel.uva.es
    • $ ssh usuario@localhost -p2221 -X
  • Screen

Tamaño del bloque de memoria

  • El tamaño de bloque del sistema de archivos es de 4K
  • Experimentos:
    • Buscar resto de ficheros sobreescritos
    • Buscar diferencias al copiar un byte
    • Cuánto se separan dos archivos
      • Separación de 4096 bytes
    • Persistencia de datos

Tamaño del bloque de memoria

Tabla de nombres con la referencias a los archivos

Tamaño del bloque de memoria

Dato CC en la posición 7692288

Tamaño del bloque de memoria

Dato BB en la posición 7696384

Tabla de nombres

  • Se guarda el registro de los ficheros
  • Cada fichero ocupa en memoria 4K
  • Tras crear 32.767 el dispositivo se llenó
    • La tabla de nombres empieza en el byte 7831552
    • Cada tabla ocupa 4096 bytes
    • El tamaño reservado para datos por "página" es de 256K
    • Solo había ocupados 130M
      • Suponemos que se llenó la tabla de nombres
  • Mejoramos el script y hasta llegar a crear 65.535 ficheros

Tabla de nombres

Tabla de nombres llena con 65.535 archivos

Movimiento de datos entre sectores

  • El controlador puede reordenar los datos
    • Se conoce como wear levelling
  • El montado y desmontado implica movimiento de datos
    • md5sum
  • Comparar las imágenes de antes y después
    • Tiene una limitación
    • Con bless no era viable
    • meld no conseguía calcular las diferencias
    • diff -y calcula diferencias pero incorrectamente
    • Desarrollamos un programa en C que compara un binario bit a bit

Vida útil

  • Pruebas con el script flash_b2.sh
  • Las memorias tienen bloques reservados
  • Pruebas más largas:
    • 50.356.021 ciclos de escritura/borrado
    • Errores de entrada/salida y dejase de estar accesible
  • Mejoramos el script
    • mount - umount

Vida útil

Estado inicial de la prueba

Vida útil

Conclusiones

  • El tamaño de bloque de memoria que impone el sistema de ficheros se mantiene a nivel físico
  • El montado y desmontado del dispositivo no genera cambios
  • Analizar las diferencias entre imágenes no es una tarea tribial
  • Son más frágiles los componentes que acompañan a la memoria que la propia memoria
  • Es necesario encontrar un procedimiento más eficientes para "flashear" memorias

Líneas futuras

  • Mejorar el script para determinar la vida útil
  • El moviento de datos entre sectores de forma más eficaz
    • Comparar imágenes binarias de gran tamaño
  • La recuperación de datos
    • Prototipo con una FPGA y un lector de chips
  • Diseñar un grabador con una FPGA

¡Muchas gracias!