Os sistemas de arquivos com registro em diário garantem contra corrupção após uma falha de energia?

28

Estou fazendo esta pergunta em nome de outro usuário que levantou a questão na sala de bate-papo do Ubuntu.

Os sistemas de arquivos com registro em diário garantem que nenhuma corrupção ocorrerá se ocorrer uma falha de energia?

Se esta resposta depende do sistema de arquivos, indique quais protegem contra corrupção e quais não.

Nathan Osman
fonte

Respostas:

21

Não há garantias. Um sistema de arquivos de registro em diário é mais resistente e menos propenso a corrupção, mas não imune.

Tudo o que um diário é é uma lista de operações que foram feitas recentemente no sistema de arquivos. A parte crucial é que o lançamento no diário seja feito antes das operações ocorrerem. A maioria das operações possui várias etapas. A exclusão de um arquivo, por exemplo, pode implicar a exclusão da entrada do arquivo no índice do sistema de arquivos e a marcação dos setores na unidade como livres. Se algo acontecer entre as duas etapas, um sistema de arquivos com registro em diário pode informar imediatamente e executar a limpeza necessária para manter tudo consistente. Este não é o caso de um sistema de arquivos não registrado em diário que precisa examinar todo o conteúdo do volume para encontrar erros.

Embora esse registro no diário seja muito menos propenso a corrupção do que não o registro no diário, a corrupção ainda pode ocorrer. Por exemplo, se o disco rígido estiver com mau funcionamento mecânico ou se as gravações no próprio diário estiverem falhando ou interrompidas.

A premissa básica do registro no diário é que escrever uma entrada no diário é muito mais rápido, geralmente, do que a transação real descrita. Portanto, o período entre o SO que solicita uma gravação (diário) e o disco rígido é muito menor do que em uma gravação normal: uma janela mais estreita para que as coisas dêem errado, mas ainda existe uma janela.

Leitura adicional

Andrew Lambert
fonte
Poderia, por favor, explicar um pouco por que isso é verdade? Talvez você possa dar um exemplo de como a corrupção ocorreria em um determinado cenário.
Nathan Osman
1
@ George Edison Veja minha resposta expandida.
Andrew Lambert
2
Esse último bit está incorreto; não há janela para as coisas darem errado. Como ele registra o que está prestes a fazer antes de começar a fazê-lo, a operação pode ser reiniciada após a falta de energia, independentemente do momento em que ocorre durante a operação. É uma questão de ordem, não de tempo.
Psusi
@psusi ainda existe uma janela para a gravação no diário ser interrompida. As gravações de diário podem parecer atômicas no sistema operacional, mas ainda são gravadas no disco.
Andrew Lambert
5
@ Surpreendidos, eles são atômicos porque têm números de sequência e / ou somas de verificação; portanto, o lançamento no diário é inteiramente escrito ou não. Se não for gravado inteiramente, é simplesmente ignorado após a reinicialização do sistema e nenhuma alteração adicional foi feita no fs, mantendo-se consistente.
Psusi
18

Não.

O tipo mais comum de registro no diário, chamado registro no diário de metadados, protege apenas a integridade do sistema de arquivos, não dos dados. Isso inclui xfse ext3/ ext4no data=orderedmodo padrão .

Se um sistema de arquivos sem registro no diário sofrer uma falha, ele será verificado fsckna próxima inicialização. fsckvarre todos os inodes no sistema de arquivos, procurando blocos marcados como usados, mas que não são acessíveis (ou seja, não têm nome de arquivo) e marca esses blocos como não utilizados. Isso leva muito tempo.

Com um sistema de arquivos de registro em diário de metadados, em vez de fazer um fsck, ele sabe quais blocos estava no meio da alteração, para que possa marcá-los como livres sem procurar por toda a partição.

Existe um tipo menos comum de registro no diário, chamado registro no diário de dados, que é o que ext3ocorre se você o montar com a data=journalopção

Ele tenta proteger todos os seus dados gravando não apenas uma lista de operações lógicas, mas também todo o conteúdo de cada gravação no diário. Mas, como está gravando seus dados duas vezes, pode ser muito mais lento.

Como outros salientaram, mesmo isso não é uma garantia, porque o disco rígido pode ter dito ao sistema operacional que havia armazenado os dados, quando ainda estava no cache do disco rígido.

Para obter mais informações, consulte o artigo Sistema de arquivos de diário da Wikipedia e a seção Modo de dados da documentação ext4 .

Mikel
fonte
1
+1 para a distinção entre corrupção do sistema de arquivos e corrupção de dados. Essa pequena distinção é bastante confusa na prática.
SplinterReality
Desculpe minha total ignorância, mas data=journalcomo recurso não faz sentido algum?
22411 Boehj
Novamente, o sistema operacional sabe quando a unidade armazena em cache os dados e o força a liberá-los quando necessário, a fim de manter um fs coerente. É claro que seu arquivo de dados pode ser perdido ou corrompido se o aplicativo que o gravou quando a energia falhou não o fez com cuidado, e isso se aplica se você usa ou não dados = diário.
Psusi
@psusi não importa o quão cuidadoso o programa está em escrever os dados, a abundância de discos rígidos silenciosamente corromper os dados sobre LEITURA stackoverflow.com/q/34141117/3338098
user3338098
@ user3338098, as unidades que corrompem dados silenciosamente são terrivelmente quebradas e nunca devem ser usadas, e são uma conversa totalmente diferente da corrupção causada pelo software que faz a coisa errada.
Psusi
8

Um sistema de arquivos não pode garantir a consistência do sistema de arquivos se ocorrer uma falha de energia, porque não sabe o que o hardware fará.

Se um disco rígido armazena em buffer os dados para gravação, mas informa ao sistema operacional que os gravou e não oferece suporte às barreiras de gravação apropriadas, gravações fora de ordem podem ocorrer onde uma gravação anterior não atingiu o prato, mas uma posterior tem. Veja esta resposta com falha no servidor para obter mais detalhes.

Além disso, a posição da cabeça em um disco rígido magnético é controlada com eletroímãs. Se a energia falhar no meio de uma gravação, é possível que alguns dados continuem sendo gravados enquanto as cabeças se movem, corrompendo os dados em blocos que o sistema de arquivos nunca pretendeu ser gravado.

camh
fonte
O firmware da unidade não é inteligente o suficiente para suspender a gravação ao recolher a cabeça?
Nathan Osman
@ George: Vai depender da unidade. Há muita coisa por aí e você não sabe o quão bem sua unidade (barata) faz as coisas.
Camh
1
O disco rígido informa ao sistema operacional se ele usa um cache de gravação por trás e o sistema operacional toma medidas para garantir que eles sejam descarregados na ordem correta. Também as unidades são projetadas para que, quando a energia falhar, elas parem de escrever. Eu já vi alguns casos em que o setor que está sendo escrito no momento da perda de energia fica corrompido porque não concluiu a atualização do ecc (mas pode ser reescrito facilmente), mas nunca ouvi falar de setores aleatórios sendo corrompidos por perda de energia.
Psusi
3

O ZFS, que é próximo, mas não exatamente um sistema de arquivos de registro no diário, garante, por design, contra corrupção após uma falha de energia.

Não importa se uma gravação em andamento é interrompida no meio, como nesse caso, sua soma de verificação certamente estará incorreta, portanto o bloco será ignorado. Como o sistema de arquivos é copiado na gravação, os dados corretos anteriores (ou metadados) ainda estão no disco e serão usados.

jlliagre
fonte
2

A resposta é, na maioria dos casos, não:

  • Como já mikel disse, a maioria dos sistemas de arquivos de registro em diário pode proteger apenas os metadados do arquivo (informações como o nome de um arquivo, seu tamanho, suas permissões etc.), não os dados do arquivo (o conteúdo do arquivo). Isso está acontecendo porque a proteção dos dados do arquivo resulta em um sistema de arquivos muito lento (na prática inútil).
  • Como o diário também é um tipo especial de arquivo armazenado no disco rígido, ele pode ser danificado após uma falha de energia. Portanto, se o diário estiver corrompido, o sistema de arquivos não poderá concluir nenhuma transação incompleta que estava ocorrendo quando ocorreu a falha de energia.
sakisk
fonte
Quais eventos podem levar a um diário corrompido? A única coisa que eu conseguia pensar eram setores defeituosos - há mais alguma coisa?
Nathan Osman
É isso mesmo, falhas de hardware são o caso usual.
Sakisk