He buscado en Internet, incluso en varios foros de StackExchange, un método viable para desfragmentar un sistema de archivos JFFS2 y no puedo encontrar una respuesta.
El sistema en cuestión tiene una parte flash NAND de 256 MB. Se accede a él como un dispositivo MTD que está dividido en tres particiones. La tercera partición es donde se almacena el sistema de archivos raíz como un sistema de archivos JFFS2. El problema es que las escrituras en el sistema de archivos raíz tienen un rendimiento no determinista debido a los problemas habituales de que el recolector de basura JFFS2 decida ejecutarse en el peor momento posible. Cuando eso sucede, el producto se cuelga durante un período de tiempo desconocido mientras se ejecuta el recolector de basura (y pdflush).
Cambiar el sistema de archivos no es una opción. La solución debe ser algo que pueda ejecutarse fuera del horario laboral y que, una vez ejecutada, dé como resultado un rendimiento de escritura más predecible. En este momento estoy trabajando en un programa que intentará forzar la ejecución del recolector de basura y luego eliminará el archivo con la esperanza de que todos los nodos liberados estén repentinamente disponibles y mejoren el rendimiento de las escrituras.
¿Pensamientos?
Respuesta1
Intente implementar su propio algoritmo de recolección de basura e intente ejecutarlo en el tiempo de montaje, y cuando se quede sin espacio para escribir, inicie nuevamente un hilo de recolección de basura por separado.
Será mucho más fácil si escribe sus archivos como fragmentos de modo que cuando borre un bloque o una página con la mitad de un archivo, aún pueda escribirlo en algún lugar y obtener la página para uso futuro.
La parte complicada es cómo abrir un archivo con varios fragmentos distribuidos en todo el sistema de archivos.