Eu tenho um sistema executando o linux que deve ser executado sem supervisão por longos períodos de tempo. O sistema usa cartão CF industrial para armazenamento. Na maioria das vezes, não há gravações para piscar, embora de vez em quando alguns dados / configurações possam ser modificados. O sistema deve ser resistente a falhas de energia.
Eu gostaria de usar ext4 para isso. Qual é a melhor maneira de configurar o ext4 para esse tipo de instalação? Tendo em mente que:
- O desempenho não é um problema (especialmente o desempenho de gravação)
- Em caso de perda de energia, o sistema sempre deve inicializar em um estado limpo, mesmo que isso signifique que os dados gravados nos últimos segundos sejam perdidos
- Se for possível evitar o fsck, melhor ainda.
(Estou ciente dessa pergunta relacionada: Evite a corrupção de dados na unidade ext4 / Linux com perda de energia )
Eu prefácio isso dizendo que, no que me diz respeito, EXT (em todas as suas encarnações) é um sistema de arquivos bastante horrível - eu já vi casos mais " interessantes " de corrupção do sistema de arquivos no número relativamente pequeno de Linux / EXT {2,3,4} sistemas que administrei do que no número relativamente grande de sistemas de arquivos Not-EXT que tive ocasião de usar.
Se possível, tente escolher um sistema de arquivos mais robusto. Você vai agradecer a si mesmo quando o inevitável acontecer.
Dito isto e todos os meus preconceitos pessoais expostos e deixados de lado, o EXT4 tem três recursos que posso pensar que podem ajudá-lo:
O
registro em diário EXT4 pode ser um sistema de arquivos com registro em diário, se você desejar. Ative o recurso de registro no diário (e defina especificamente o modo de registro no diário de dados como
journal
viatune2fs
ou como uma opção de montagem).Isso gera um impacto no desempenho, pois todos os dados devem ser gravados no diário EXT antes de serem "confirmados" no sistema de arquivos (cada gravação ocorre basicamente duas vezes), mas garante que você sempre possa recuperar o máximo que a repetição do diário o conseguir sem nenhum problemas
SYNC
montagens hronousQuando a segurança é fundamental, montar um sistema de arquivos com a
sync
opção é sempre uma boa idéia. Isso força todas as gravações no disco imediatamente - novamente, isso é um problema de desempenho, mas é uma boa idéia se você espera falhas de energia ou estranhos aleatórios arrancando o cartão CF.Limite o máximo de sistemas de arquivos graváveis Este não é um EXT específico, mas a filosofia Linux muito comum de "apenas criar uma grande partição raiz e despejar tudo nela" é, francamente, estúpida . Criar uma estrutura de sistema de arquivos apropriado (
/
,/var
,/usr
,/home
, etc ...), e montar como muitos dos sistemas de arquivos somente leitura possível.Isso costumava ser um conselho comum para sistemas unix por questões de segurança, mas no seu caso, ele traz um benefício adicional: você não pode corromper um sistema de arquivos se não puder gravá-lo.
fonte
sync
após cada gravação - montagens síncronas não (ou pelo menos não devem) retornar de uma chamada de gravação do sistema de arquivos até que os dados estejam no disco. A chamadasync
liberará todas as gravações pendentes, mas ainda há uma janela (ainda que curta) entre quando a gravação retorna e sua chamada parasync
retornos durante a qual os dados ainda não podem ser gravados no disco.data=journal
(o que descrevi acima),data=ordered
(os metadados são registrados no diário. Os dados são confirmados no disco antes que os metadados sejam confirmados no sistema de arquivos) edata=writeback
(que efetivamente não é o registro no diário / proteção de dados - Bad Things pode acontecer após uma falha, como lixo no meio de arquivos). Eu acredito queordered
é o padrão na maioria das distribuições Linux nos dias de hoje ...EXT4 não soa como a melhor escolha para o seu sistema; Eu sugeriria olhar para um sistema de arquivos estruturado em log. Eles funcionam tratando os dados como um fluxo constante de atualizações de gravação em um fluxo virtual, com um ponteiro que aponta o 'cabeçalho' mais recente. As atualizações ocorrem gravando dados e metadados no armazenamento e atualizando o ponteiro. No caso de uma falha após a gravação, mas antes da atualização do ponteiro, os dados mais recentes são perdidos, mas o sistema de arquivos é consistente.
Dois sistemas de arquivos candidatos são LogFS e NILFS . Ambos estão disponíveis no kernel Linux principal.
fonte
Estou intrigado com o dispositivo que está construindo. Você está atrás da confiabilidade de um dispositivo incorporado enquanto usa um sistema de arquivos que não é realmente adequado.
Ext4 (e família) é um bom sistema de arquivos de uso geral com (eu acho) muitos bilhões de horas de uso em hardware e casos de uso variados. No entanto, o que você pede realmente não se encaixa no ext4. Os indicadores do voretaq7 e Giovanni ajudarão a tirar o melhor proveito do uso do ext4, se necessário, mas a resposta real é usar algo mais adequado às suas necessidades. Steve deu a você algumas opções. Se você continuar puxando energia de um ext4 FS, acabará tendo uma bagunça.
Se esse é um sistema único que você está construindo, você deve optar por usar algo mais adequado ou aceitar que haverá problemas em algum momento. Pode haver apenas uma falta de energia em 100 ou 1 em 1000. Isso pode ser bom o suficiente para você correr o risco e o dispositivo provavelmente pode funcionar por um longo tempo (anos) sem qualquer intervenção manual.
Se este é um produto que você pretende implantar / trazer amplamente para o mercado, você tem a opção de usar algo mais adequado. Ou você toma a decisão comercial de oferecer suporte a uma porcentagem dos dispositivos que serão bloqueados todos os anos e precisa de substituição ou intervenção manual para recuperá-los.
fonte