Lanzamiento del sistema de archivos tolerante a fallos LittleFS 2.10

Se ha publicado la versión 2.10 del proyecto LittleFS, que desarrolla un sistema de archivos compacto para dispositivos embebidos y microcontroladores. Inicialmente, el sistema de archivos fue creado por la empresa ARM para el sistema operativo Mbed OS, pero luego se separó en un proyecto independiente. El código del sistema de archivos está escrito en C y se distribuye bajo la licencia BSD. La implementación de referencia de LittleFS se proporciona en forma de biblioteca en C, sobre la cual se ha creado un módulo FUSE y bindings para varios lenguajes de programación.

Características de LittleFS:

  • Bajos requisitos de recursos y soporte para operar en condiciones de tamaño limitado de RAM. En la implementación de LittleFS se utilizan únicamente buffers definidos estáticamente (sin asignación dinámica de memoria) y no se utilizan llamadas recursivas, lo que garantiza que el tamaño de la memoria operativa y las estructuras de servicio de LittleFS en el almacenamiento permanezcan constantes, independientemente de lo que se grabe en el sistema de archivos y del tamaño del almacenamiento.
  • Herramientas para el alineamiento del desgaste de los dispositivos Flash (wear leveling), que permiten minimizar la reutilización de bloques y distribuir uniformemente las operaciones de limpieza de bloques en la memoria Flash, cuyo controlador no proporciona una solución a esta tarea.
  • Una alta resistencia a fallos: el sistema de archivos considera la interrupción inesperada (apagar la energía) como una situación normal y garantiza que el almacenamiento en disco esté en un estado íntegro en cualquier momento. Para evitar la corrupción y pérdida de datos, se utiliza un mecanismo de copy-on-write (COW), donde los cambios no sobrescriben la información, sino que se guardan en un nuevo lugar.
  • Atomicidad en la realización de operaciones, como eliminación y renombrado, incluso en caso de pérdida de energía durante su ejecución. Los cambios en el archivo se escriben en el disco solo después de llamar a sync o close. Las inconsistencias causadas por operaciones que no pueden realizarse de manera atómica se resuelven mediante un manejador especial de deorphan, que recorre todo el árbol del sistema de archivos después del arranque.
  • Soporte para funciones similares a POSIX para trabajar con archivos y directorios.

El contenido de los archivos en LittleFS se presenta en listas COW CTZ, lo que proporciona un nivel de complejidad O(1) al añadir y O(nlogn) al leer. La asignación de bloques se realiza a través del escaneo del FS en busca de bloques utilizados en una área de tamaño fijo, que se almacena en forma de un vector de bits. Para simplificar el escaneo, todos los directorios son parte de una lista vinculada que abarca todo el sistema de archivos. Si se determina un error al escribir un bloque, se asigna un nuevo bloque y se transfieren los datos a este.

Entre los cambios en la nueva versión de LittleFS:

  • Se ha reestructurado el código de análisis de rutas de archivos, lo que ha permitido hacer que el comportamiento del FS se asemeje más al de los sistemas POSIX y a las expectativas de los usuarios en situaciones como la finalización de la ruta con una barra, el manejo de rutas vacías y la navegación fuera de la raíz del FS.
  • Se han añadido dos nuevos ejemplos de dispositivos de bloques ramcrc32bd y ramrsbd, en los que se ha implementado un mecanismo de corrección de errores compatible con LittleFS. Actualmente, el propio FS de LittleFS no soporta la detección y corrección de errores, y estas operaciones se trasladan al nivel de los dispositivos de bloques.
  • La función lfs_mkdir ha añadido soporte para barras finales, es decir, la llamada lfs_mkdir(«a/») ya no provoca un error.
  • En las funciones lfs_stat y lfs_getattr ahora se muestra un error cuando se utilizan barras finales si la ruta existente en el FS no es un directorio.
  • Intentar abrir un archivo con una barra final en el nombre a través de la función lfs_file_open ahora dará como resultado el error LFS_ERR_NOTDIR si el archivo no es un directorio en el FS, LFS_ERR_ISDIR si el nombre se refiere a un directorio en el FS, y LFS_O_CREAT si el archivo no existe.
  • Intentar acceder fuera de la raíz del FS, como lfs_stat(«/../a»), ahora dará como resultado un error.
  • Especificar una ruta vacía ya no es un sinónimo de acceso al directorio raíz, es decir, la llamada lfs_stat(«») dará como resultado un error.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster