Qual opção de montagem usar no sistema de arquivos ext3 para minimizar a perda ou corrupção de dados?

15

Eu tenho uma configuração incorporada usando um initramfs para o sistema de arquivos raiz, mas usando uma partição ext3 personalizada montada em uma unidade IDE compacta flash. Como a integridade dos dados diante da perda de energia é o fator mais importante em toda a instalação, usei as seguintes opções para montar (abaixo está a entrada do meu /etc/fstabarquivo

<file system> <mount pt> <type> <options>                         <dump><pass>
/dev/sda2     /data      ext3   auto,exec,relatime,sync,barrier=1 0     2

Eu vim por essas opções lendo na internet. O que me preocupa é que o conteúdo de /proc/mountsforneça o seguinte:

/dev/sda2 /data ext3 rw,sync,relatime,errors=continue,user_xattr,acl,
barrier=1,data=writeback 0 0

Pelo que entendi da leitura ao redor, é que eu quero usar a data=journalopção para minha montagem, pois isso oferece a melhor proteção contra corrupção de dados. No entanto, na página de manual para opções específicas do ext3 mount, diz o seguinte sobre a opção de write-back:

A ordem dos dados não é preservada - os dados podem ser gravados no sistema de arquivos principal após a confirmação dos metadados no diário.
Dizem que esta é a opção de maior rendimento. Ele garante a integridade interna do sistema de arquivos , mas pode permitir que dados antigos apareçam nos arquivos após uma falha e recuperação do diário.

Estou muito confuso sobre isso - a página de manual parece sugerir que, para a integridade do sistema de arquivos, eu quero especificar a data=writebackopção, mountmas a maioria das outras referências que encontrei (incluindo alguns livros publicados sobre o linux incorporado) sugerem que eu deveria estar usando data=journal. Qual seria a melhor abordagem para eu usar? A velocidade de gravação não é um problema: a integridade dos dados é.

mathematician1975
fonte
1
Fornece algumas orientações sobre dados = diário . Eu estaria inclinado a usá-lo sobre qualquer outra coisa, já que o RH suporta apenas esse tipo de pedido.
Slm
2
@sim, na verdade, diz data=ordered: p
sourcejedi

Respostas:

7

Não se deixe enganar pelo fato de que apenas writebackmenciona internal filesystem integrity.
Com ext3, se você usa journal, orderedou writeback, metadados do sistema de arquivos é sempre apoiado e que meios a integridade do sistema de arquivo interno.

Os modos de dados oferecem uma maneira de controlar como os dados comuns são gravados no sistema de arquivos.
No writebackmodo, as alterações de metadados são primeiro registradas no diário e um bloco de confirmação é gravado. Após a atualização do diário, os metadados e as gravações de dados podem continuar. data=writeback pode ser um risco grave à segurança: se o sistema travar ao anexar a um arquivo, depois que os metadados forem confirmados (e blocos de dados adicionais alocados), mas antes que os dados sejam gravados (blocos de dados substituídos por novos dados), depois do diário a recuperação desse arquivo pode conter blocos preenchidos com dados de arquivos excluídos anteriormente - de qualquer usuário 1 .

Portanto, se a integridade dos dados é sua principal preocupação e a velocidade não é importante, data=journalé o caminho a percorrer.

don_crissti
fonte
4

Como você já notou, o ponto principal é que você não pode impedir seu sistema de arquivos de todo tipo de falha.

O que você pode fazer:

  1. No lado do software, você pode usar fdatawrites após cada operação importante (veja esta postagem de 2003 de Theodore T'so, um dos principais desenvolvedores de Linux FS Kernel. Ainda é verdade. Há também uma sobre uma grande perda de dados oculta nas versões antigas do ext4)
  2. Reduza o intervalo de confirmação para 1 segundo ( confirmação = 1 ) (consulte este artigo do LWN, trata-se de ext4, mas contém informações realmente úteis sobre ext3). NB: Não deve ser necessário, com sincronização .
  3. Como o documento RHEL apontado pelo sim disse, use * data_err = abort * e data = ordenado
  4. noatime reduzirá operações inúteis no sistema de arquivos
  5. Como você já percebeu, a barreira = 1 é uma boa maneira de minimizar a perda de dados (consulte esta postagem )
  6. E a sincronização também é, obviamente, uma das opções "Não quero perder meus dados".

No final, as opções de montagem paranóica podem ser assim:

auto,exec,relatime,sync,barrier=1,commit=1,data=ordered,data_err=abort,noatime,

E você também pode garantir a integridade dos dados com um fsck automático a cada inicialização.

Coren
fonte
2

Tente alterar qual parte da página de manual você exibe:

Escreva de volta

A ordem dos dados não é preservada - os dados podem ser gravados no sistema de arquivos principal após a confirmação dos metadados no diário. Dizem que esta é a opção de maior rendimento. Ele garante a integridade interna do sistema de arquivos, mas pode permitir que dados antigos apareçam nos arquivos após uma falha e recuperação do diário.

Como don_crissti apontou, os outros modos não têm o "porém".

depquid
fonte