Configuração ext4 “segura” para sistemas executando sem supervisão

18

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 )

Grodriguez
fonte

Respostas:

11

Eu trabalhei na construção de um sistema para automação em barcos, e havia um pré-requisito: a cada momento a energia podia ser reduzida e tudo deveria voltar a funcionar corretamente.

Minha solução foi criar um sistema initramfs baseado no Gentoo, com apenas uma pasta rw para aplicativos e configurações (esta é a abordagem usada por todos os fornecedores de roteadores / firewalls). Esta solução adiciona uma camada adicional de complexidade ao lidar com atualizações do sistema, mas garante que o sistema SEMPRE inicialize.

Com relação à sua pergunta específica, você deve manter o diário EXT4 habilitado para ter fsck mais rápido (de alguns segundos), usar a opção data = montagem do diário , diminuir a opção de confirmação ou usar a opção de sincronização para manter os buffers sempre vazios.

Refs: http://www.kernel.org/doc/Documentation/filesystems/ext4.txt

Giovanni Toraldo
fonte
Boa! Se o aplicativo não gravar muitos dados, você ficará satisfeito com a opção de sincronização.
Giovanni Toraldo
11
O melhor lugar para se olhar é a documentação do kernel do Linux: kernel.org/doc/Documentation/filesystems/ext4.txt Habilitar data = journal e commit = nrsec para minimizar qualquer possível perda de dados (* == padrão)
Giovanni Toraldo
As confirmações cronometradas são definitivamente úteis - acredito que você pode reduzir apenas intervalos de 1 segundo (embora com uma penalidade de desempenho MAIOR para operações com uso intensivo de gravação), mas se você não puder pagar 1 segundo de perda de dados, terá problemas maiores;)
voretaq7
2
um dos principais efeitos positivos do registro no diário é que a recuperação de um travamento é uma questão de reproduzir as alterações não confirmadas mais recentes, muito mais rápidas do que verificar inconsistências no volume inteiro. Se esse é o seu maior problema, você deve usar o EXT4 padrão e ser feliz.
Giovanni Toraldo
11
@Grodriguez "perder" dados pode ser qualquer coisa entre "Arquivo não existe mais" e "Por que existe um pedaço do kernel dentro do meu banco de dados?" - Tudo depende do que está "perdido" :)
voretaq7
12

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 journalvia tune2fsou 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

  • SYNCmontagens hronous
    Quando a segurança é fundamental, montar um sistema de arquivos com a syncopçã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.

voretaq7
fonte
A funcionalidade de montagens totalmente síncronas não é equivalente a simplesmente chamar syncapó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 chamada syncliberará todas as gravações pendentes, mas ainda há uma janela (ainda que curta) entre quando a gravação retorna e sua chamada para syncretornos durante a qual os dados ainda não podem ser gravados no disco.
precisa saber é o seguinte
Qual sistema de arquivos você recomenda? Você pode quantificar suas experiências?
Mark Wagner
@embobo, minhas experiências são inteiramente anedóticas: nunca testei o estresse da família de sistemas de arquivos EXT, mas um incidente que se destaca em minha mente é quando um servidor Squid sofre com "Para onde foram todos os meus inodes?!?" - o sistema de arquivos foi pisoteado e, de alguma forma, subsequentemente marcado como limpo, mas cada inode foi deixado de alguma forma em um estado reivindicado, mas nunca referenciado. O fsck para consertar essa bagunça em particular foi positivamente EPIC (acabamos criando um novo FS). Foi nesse dia que perdi toda a confiança na família EXT de sistemas de arquivos.
precisa saber é o seguinte
@Grodriguez Re: Journaling, as três opções são 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) e data=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 que orderedé o padrão na maioria das distribuições Linux nos dias de hoje ...
voretaq7
2
Além de "Limitar o máximo de sistemas de arquivos graváveis": No debian wiki é um guia para fazer exatamente isso com muitos exemplos de daemons que precisam de tratamento especial. Também deve ser válido para a maioria das outras distris: wiki.debian.org/ReadonlyRoot
krissi
7

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.

Steve Smith
fonte
1

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.

goo
fonte