Estamos trabalhando em um pequeno sistema Linux incorporado (2.6.35-ish) com um dispositivo NAND interno pequeno para o sistema operacional e aplicativos (250-500Meg) e um cartão SD com cartões SDHC SDHC de 8Gb para dados.
A energia da unidade pode ser cortada a qualquer momento.
O sistema deve armazenar dados nos cartões SD. Esses dados são muito importantes ... é todo o objetivo do sistema. Os sistemas geralmente são totalmente desconectados de qualquer rede em locais remotos e os dados são recuperados via sneakernet a cada 4-8 semanas.
Atualmente, simplesmente temos o VFAT nos cartões SD. Isso foi principalmente para que os primeiros clientes de teste pudessem copiar dados manualmente com facilidade em seus laptops Win7.
No entanto, agora estou preocupado que seja apenas uma questão de tempo até que uma queda de energia na hora errada cause perda de dados.
Qual é a melhor maneira de configurar esse sistema para evitar a perda de dados? O JFFS2 parece o que eu gostaria em termos de como ele grava dados (e as necessidades de desempenho não são altas), mas parece bastante desajeitado usar o block2mtd etc. Também não tenho certeza de como o nível de desgaste da placa irá interagir com isso.
Qual é a melhor forma de fazer isso?
EDITAR
Agora, estou pensando em deixar o sistema de arquivos VFAT e alocar arquivos de tamanho diário por vez, preenchidos com 0xFF, que devem limitar bastante a exposição a falhas no ciclo de energia. Eu só podia acrescentar registros dentro desses blocos pré-criados, e espero que os cartões SD não sejam tão estúpidos que apagem / usem gravações de nível nas regiões 0xFF.
Posso usar noatime, mas existe um nomtime VFAT equivalente para impedir gravações no campo de horário modificado? Eu precisaria de alguma maneira para impedir qualquer atualização de metadados até que o arquivo de um novo dia seja criado.
EDIT 2
Alguém na troca de pilhas de eletrônicos me lembrou que também existem dados de ECC no NAND, então não há como evitar a necessidade de apagar.
Então, o JFFS2 via block2mtd seria apropriado nessa situação?
EDIT 3
É pior do que eu pensava. Os cartões SD que eu tenho irão apagar os blocos de dados, mesmo se você escrever exatamente o mesmo conteúdo no disco. Os bloqueios de apagamento têm 64 KB e são muito grandes para atrasar totalmente as gravações. Armazenarei até 128 KB de dados no flash NAND (no qual posso controlar o comportamento de gravação), em um tipo de diário, e depois gravarei blocos de 128 KB em um arquivo alinhado a 128 KB em uma partição VFAT no cartão SD (em caso outros cartões SD possuam bloqueios de apagamento de 128 KB).
sync
comando após cada gravação no cartão SD, ele gravaria os bits imediatamente após você alterá-los / criá-los sem armazená-los na RAM, para que suas alterações estejam no cartão e não passou pela perda de energia.
sync
provavelmente pioraria as coisas, pois aumenta a fração de tempo em que os metadados estão no meio da atualização.