Pesquisei em toda a Internet, inclusive em vários fóruns do StackExchange, por um método viável para desfragmentar um sistema de arquivos JFFS2 e não consigo encontrar uma resposta.
O sistema em questão possui uma parte flash NAND de 256 MB. Ele está sendo acessado como um dispositivo MTD dividido em três partições. A terceira partição é onde o sistema de arquivos raiz está sendo armazenado como um sistema de arquivos JFFS2. O problema é que as gravações no sistema de arquivos raiz têm desempenho não determinístico devido aos problemas usuais do coletor de lixo JFFS2 decidir executar nos piores momentos possíveis. Quando isso acontece, o produto fica suspenso por um período de tempo desconhecido enquanto o coletor de lixo (e o pdflush) são executados.
Alterar o sistema de arquivos não é uma opção. A solução precisa ser algo que possa ser executado fora do horário comercial e que, depois de executado, resulte em um desempenho de gravação mais previsível. No momento, estou trabalhando em um programa que tentará forçar a execução do coletor de lixo e, em seguida, excluir o arquivo na esperança de que todos os nós liberados estejam subitamente mais disponíveis e façam com que as gravações tenham um melhor desempenho.
Pensamentos?
Responder1
Tente implementar seu próprio algoritmo de coleta de lixo e tente executá-lo em tempo de montagem e, quando ficar sem espaço para gravar, inicie novamente um thread de coleta de lixo separadamente.
Será muito mais fácil se você gravar seus arquivos como fragmentos, de modo que, ao apagar um bloco ou página com metade de um arquivo, você ainda possa gravá-lo em algum lugar e obter a página para uso futuro.
A parte complicada é como abrir um arquivo com vários fragmentos espalhados pelo sistema de arquivos.