Sistema de archivos estructurado en forma de registro para su uso con dispositivos de memoria flash
El sistema de archivos Flash versión 2 o JFFS2 es un sistema de archivos estructurado en forma de registro para su uso con dispositivos de memoria flash . [1] Es el sucesor de JFFS . JFFS2 se ha incluido en el núcleo de Linux desde el 23 de septiembre de 2001, cuando se fusionó con la línea principal del núcleo de Linux como parte del lanzamiento de la versión 2.4.10 del núcleo. JFFS2 también está disponible para algunos cargadores de arranque , como Das U-Boot , Open Firmware , eCos RTOS, RTEMS RTOS y RedBoot . El uso más destacado de JFFS2 proviene de OpenWrt . [2]
Se han desarrollado al menos tres sistemas de archivos como reemplazos de JFFS2: LogFS , UBIFS y YAFFS .
Características
Se introdujo JFFS2:
- Compatibilidad con dispositivos flash NAND . Esto implicó una cantidad considerable de trabajo, ya que los dispositivos NAND tienen una interfaz de E/S secuencial y no se pueden asignar a la memoria para su lectura.
- Enlaces físicos. Esto no era posible en JFFS debido a limitaciones en el formato en disco.
- Compresión. Hay cinco algoritmos disponibles: zlib , rubin, lzma, rtime y lzo .
- Mejor rendimiento. JFFS trató el disco como un registro puramente circular, lo que generó una gran cantidad de E/S innecesarias. El algoritmo de recolección de basura en JFFS2 hace que esto sea prácticamente innecesario.
Diseño
Al igual que con JFFS, los cambios en los archivos y directorios se "registran" en flash en los nodos , de los cuales hay dos tipos:
- inodes : un encabezado con metadatos de archivo, seguido de una carga útil de datos de archivo (si la hay). Las cargas útiles comprimidas están limitadas a una página.
- Nodos directos : entradas de directorio que contienen cada una un nombre y un número de inodo. Los enlaces duros se representan como nombres diferentes con el mismo número de inodo. El número de inodo especial 0 representa un desvío.
Al igual que con JFFS, los nodos comienzan como válidos cuando se crean y se vuelven obsoletos cuando se crea una versión más nueva en otro lugar.
Sin embargo, a diferencia de JFFS, no hay un registro circular. En cambio, JFFS2 trabaja en bloques , una unidad del mismo tamaño que el segmento de borrado del medio flash. Los bloques se llenan, uno a la vez, con nodos de abajo hacia arriba. Un bloque limpio es aquel que contiene solo nodos válidos . Un bloque sucio contiene al menos un nodo obsoleto . Un bloque libre no contiene nodos. [3]
El recolector de basura se ejecuta en segundo plano y convierte los bloques sucios en bloques libres . Para ello, copia los nodos válidos en un nuevo bloque y omite los obsoletos . Una vez hecho esto, borra el bloque sucio y lo etiqueta con un marcador especial que lo designa como bloque libre (para evitar confusiones si se corta la energía durante una operación de borrado). [3]
Para que la nivelación del desgaste sea más uniforme y evitar que los borrados se concentren demasiado en sistemas de archivos mayoritariamente estáticos, el recolector de basura ocasionalmente también consumirá bloques limpios . [3]
Desventajas
Debido a su diseño estructurado en registros, las desventajas de JFFS2 incluyen las siguientes: [3]
- Todos los nodos deben seguir siendo escaneados en el momento del montaje . Esto es lento y se está convirtiendo en un problema cada vez más grave a medida que los dispositivos flash aumentan su escala hasta el rango de los terabytes . Para superar este problema, se introdujo el Erase Block Summary (EBS) en la versión 2.6.15 del kernel de Linux. El EBS se coloca al final de cada bloque y se actualiza cada vez que se escribe en el bloque, resumiendo el contenido del bloque; durante los montajes, se lee el EBS en lugar de escanear bloques completos.
- Escribir muchos bloques pequeños de datos puede incluso generar tasas de compresión negativas, por lo que es esencial que las aplicaciones utilicen buffers de escritura grandes.
- No existe una forma práctica de saber cuánto espacio libre utilizable queda en un dispositivo, ya que esto depende tanto de qué tan bien se puedan comprimir los datos adicionales como de la secuencia de escritura.
Véase también
Referencias
- ^ "Subsistema de dispositivo de tecnología de memoria (MTD) para Linux". www.linux-mtd.infradead.org . Consultado el 15 de mayo de 2021 .
- ^ "El diseño Flash de OpenWrt - Wiki de OpenWrt". Wiki.openwrt.org . 18 de enero de 2010 . Consultado el 4 de marzo de 2014 .
- ^ abcd "Software Profile: Journaling Flash File System, Version 2 (JFFS2)" (PDF) . micron.com. 2011. Archivado desde el original (PDF) el 2014-03-07 . Consultado el 2014-03-04 .
Enlaces externos
- Sitio web de JFFS2
- JFFS: El sistema de archivos Flash de Journalling, de David Woodhouse (PDF)
- Lista de correo oficial de JFFS2
- Preguntas frecuentes sobre JFFS2