Tornar o cartão SD à prova de corrupção

11

Meu dispositivo Linux incorporado usa um cartão SD para salvar determinados dados de diagnóstico, muito abundantes para o flash interno.

O problema é que, se o dispositivo for desligado inesperadamente, o sistema de arquivos (FAT32) no cartão está corrompido.

Não há como evitar interrupções de energia inesperadas ou o usuário pode desativá-lo dessa maneira, e o dispositivo deve estar relativamente livre de manutenção. Pior, os dados são gravados continuamente, de modo que as corrupções são muito frequentes, e o Linux, ao detectar o FS defeituoso, o remonta silenciosamente.

Quais métodos você sugeriria para atenuar isso? A execução do fsck.vfat automaticamente na inicialização é suficiente?

Mais algumas informações:

  • O cartão não deve ser considerado removível pelo usuário. É para ser pensado como disco interno. Quaisquer dados armazenados nele serão acessíveis para download na rede ou em uma unidade USB e o sistema limpa automaticamente as entradas mais antigas. Isso significa que não precisa ser legível em seu PC comum.
  • O sistema atualmente suporta FAT, yaffs e jffs2. Adicionar outros sistemas de arquivos ao kernel é possível, mas se existirem outros caminhos, nós os preferiríamos primeiro.
  • A escrita pode ser suspensa sob demanda mesmo por vários minutos sem perda de dados.
  • perda parcial de dados ou corrupção menor é aceitável. A interrupção completa do registro não é.
  • os eventos de desligamento são completamente imprevisíveis a maior parte do tempo.
  • o sistema está sendo executado em ARM9, 200MHZ, 64MB de RAM, 32MB de flash interno e usa a maior parte da energia da CPU para sua função principal. Leve isso em consideração enquanto pensa em soluções sofisticadas e pesadas de recursos.
por SF. 11.01.2013 / 14:17

2 respostas

7

Você pode usar o driver block2mtd para usar os sistemas de arquivos transacionais jffs2 ou yaffs (2) que você parece estar empregando em outro lugar para o seu cartão SD, o que resolveria seu problema de perda de dados ou corrupção do sistema no poweroff.

Isso pode causar outros problemas, no entanto. Como é provável que o cartão SD tenha mecanismos próprios para o nivelamento de desgaste e o remapeamento do setor, eles podem interferir na implementação do jffs2 e do yaffs para fazer o mesmo, diminuindo o tempo de vida ou o desempenho do seu cartão SD. Se isso não for um problema, vale a pena tentar.

    
por 11.01.2013 / 14:41
5

Verifique se o kernel que você usa suporta flush e / ou sync flag para vfat (parece que algumas versões o ignoram, tenha cuidado!).

Ou apenas elimina completamente o sistema de arquivos se tudo puder entrar em um arquivo (como seria o caso com um fluxo de logs bruto!) ou em alguns arquivos de tamanho fixo (use partições;)

    
por 11.01.2013 / 14:41