A perda inesperada de energia pode prejudicar uma instalação do Linux?

22

Estou desenvolvendo um aplicativo em uma placa embarcada Linux (executa Debian), por exemplo, Raspberry Pi, Beagle Board / Bone ou olimex. As placas funcionam em um ambiente em que a eletricidade é cortada inesperadamente (é muito complicado colocar PSU etc.) e isso acontecia todos os dias duas vezes. Gostaria de saber se os cortes de energia inesperados causariam falha / problema no sistema operacional Linux? Se é algo que eu deveria me preocupar, o que você sugeriria para evitar danos no sistema operacional contra cortes de energia inesperados?

PS. O aplicativo precisa gravar alguns dados no meio de armazenamento (cartão SD), acho que não seria adequado montá-lo como somente leitura.

Avanço
fonte
1
Fique longe do ext2 (use ext3 ou superior) nos sistemas de arquivos que você modifica bastante e deve estar bem na maior parte do tempo.
LawrenceC
A menos que você tenha muito cuidado ao especificar seus cartões SD, os cartões não garantem nada se você cortar a energia inesperadamente. O cartão pode estar no meio de uma mudança no nível de desgaste, levando a uma corrupção estranha e inesperada - que pode até estar em uma partição diferente!
derobert
Não sei exatamente como fazê-lo, mas você pode considerar a possibilidade de fazer suas transações de aplicativos principais com base. Dessa forma, você pode ter seu arquivo atual e um backup. Você aplica as transações ao seu arquivo atual e, se isso falhar, pode restaurar o arquivo atual do backup e reaplicar as transações. Se você alternar entre atual e backup usando links simbólicos ou trocando nomes de arquivos, isso poderá ocorrer muito rapidamente, com muito menos chance de erro do que com a cópia. Após uma atualização bem-sucedida, seu arquivo atual se torna seu backup e o backup se torna o atual.
Joe
Contínuo. Isso quase funciona. O novo arquivo atual também precisaria das transações aplicadas, exigindo o processamento das transações duas vezes, por isso tenho certeza de que há uma maneira melhor. De qualquer forma, ainda pode ser muito mais rápido e seguro do que copiar o arquivo inteiro, se for grande.
21413 Joe Joe

Respostas:

14

Cortes de energia inesperados podem causar corrupção nos dados do sistema de arquivos - por exemplo, se um processo começou a gravar em um arquivo, mas ainda não terminou de escrevê-lo, o arquivo pode terminar apenas pela metade. Agora imagine se o corte de energia acontecer quando você estiver no meio de uma atualização do kernel ...

Como o l0b0 escreveu, o uso de um sistema de arquivos com registro em diário ajudará, pois será capaz de acompanhar o que realmente foi feito. Além às informações wikipedia que l0b0 ligada, você pode estar interessado em /unix/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failure bem .

Você, como programador, obviamente precisa considerar cuidadosamente como lidar com a gravação em arquivos, para que se torne um processo atômico (ou seja, totalmente feito ou não, mas nunca pela metade). É uma questão bastante complexa.

Jenny D
fonte
10
O processo geral no código para proteção contra interrupções de gravação que corrompe um arquivo é que, em vez de modificar diretamente file.name, você escreve um arquivo totalmente novo file.name.newversion e, em seguida, usa os comandos delete / rename para substituir a versão antiga pelo novo. Você precisa adicionar o código de limpeza para se recuperar de uma interrupção a cada etapa; mas essa abordagem sempre deixa uma boa cópia do arquivo no disco. Isso pode afetar o seu design, uma vez que ele executa mal a atualização de grandes arquivos únicos ou faz alterações frequentes em um único arquivo.
precisa
11

Para ajudar a minimizar a possibilidade de corrupção do sistema operacional, provavelmente é melhor ter partições "sistema" e "dados" separadas no cartão SD. Dessa forma, você pode montar a partição "system" somente leitura e usar um FS altamente resiliente na partição "data".

Além disso, a maioria dessas placas possui requisitos de energia muito baixos, portanto, é possível um backup de bateria. A placa "LiPo rider" do Raspberry Pi pode ser usada como um no-break básico para fornecer um desligamento limpo em caso de perda de energia.

Stu
fonte
5

Isso dependeria de

  1. se você estiver usando um sistema de arquivos com diário e
  2. quão bem os aplicativos são capazes de lidar com o processamento abortado.

Considere, por exemplo, um aplicativo que processa um arquivo e grava os resultados à medida que são computados (uma linha de saída por linha de entrada) em outro arquivo. Se a energia for cortada durante o processamento e o mesmo aplicativo for executado após a reinicialização, ele não poderá simplesmente reiniciar o processamento desde o início do arquivo de entrada - isso significaria que o arquivo de saída conteria informações duplicadas.

Pode ser muito difícil dizer algo definitivo sobre um sistema complexo hipotético, mas o software Linux mais estável parece capaz de lidar com falhas de maneira bastante agradável.

l0b0
fonte
1

Como ninguém mencionou nenhum sistema de arquivos específico: os sistemas de arquivos mais modernos (ext3, ext4, ntfs) são capazes de lidar com falhas muito melhor do que os sistemas de arquivos mais antigos (ext2, ext, fat32) devido ao registro no diário .

Supondo que o disco rígido não trava e não mente , uma falha de energia completa não deve corromper o sistema de arquivos. Arquivos individuais que estavam sendo gravados ainda podem estar corrompidos; portanto, se você estava no meio da atualização do sistema operacional quando ocorreu a falha de energia, ainda é possível desativar o sistema operacional.

BlueRaja - Danny Pflughoeft
fonte