Fiz a pergunta no #btrfs IRC, eles disseram should be ok if your hw isn't "buggy"
onde não significa "buggy" your hw has correct flush/barrier semantics
.
TL; DR: Isso significa que o btrfs está protegido contra corrupção de dados devido à perda de energia de maneira semelhante ao ZFS.
Aqui está o porquê: A idéia geral por trás do ZFS e do btrfs é semelhante. Ambos usam árvores Merkle como uma estrutura de dados . As gravações podem exigir a atualização de vários blocos no (s) disco (s). O sistema de arquivos está lidando com isso gravando os novos dados em blocos vazios (mesmo que um arquivo existente esteja sendo modificado, portanto, não é necessário modificar os blocos que refletem o estado antigo) e construindo uma nova árvore atualizada. Depois que todo o trabalho pesado é feito e os dados + a árvore atualizada foram gravados no disco, o ponteiro do cabeçalho é atualizado para a nova árvore, tornando visível a alteração.
Aqui está como as coisas devem se comportar ao gravar em um arquivo:
- Grave dados para liberar blocos no disco.
- Faça uma cópia da árvore Merkle *, atualize-a de acordo com as alterações escritas em (1).
- Peça ao hardware para liberar os dados no disco - o hardware grava todos os dados pendentes.
- Atualize o ponteiro da cabeça para a nova árvore Merkle.
- Blocos antigos gratuitos que não são mais necessários.
Se a energia for perdida após (4), a transação será concluída. Se a energia for perdida durante as etapas (1) a (3), o sistema de arquivos apresentará o estado antigo (os dados gravados na etapa (1) são perdidos, mas o sistema de arquivos é consistente). Observe que não há necessidade de verificar se há erros no sistema de arquivos, o que significa que o sistema está disponível imediatamente, o que é uma grande vantagem (a verificação de sistemas de arquivos grandes pode levar muito tempo!).
Aqui está um exemplo de como as coisas podem dar errado com o hardware "buggy":
- Grave dados para liberar blocos no disco.
- Faça uma cópia da árvore Merkle *, atualize-a de acordo com as alterações escritas em (1).
- Peça ao hardware para descarregar os dados para o disco - o hardware confirma a conclusão, mas não libera todo o caminho (por exemplo, os dados podem permanecer no cache de write-back do disco).
- Atualize o ponteiro da cabeça para a nova árvore Merkle. Esses dados são gravados no disco antes de outros dados pendentes (por exemplo, porque a cabeça do disco está no local correto).
- Os dados gravados nas etapas (1) e (2) são gravados no disco.
- Blocos antigos gratuitos que não são mais necessários.
O sistema de arquivos se tornará inconsistente se perder energia entre (4) e (5) ou ao executar a etapa (5). Como conseqüência, a árvore Merkle e / ou os dados podem ser gravados apenas parcialmente, tornando o sistema de arquivos inconsistente.
Na prática, você deve ter um cuidado especial ao usar os controladores RAID . Eles geralmente desabilitam os caches de write-back no disco e usam seu próprio cache de write-back. Existem duas maneiras comuns de as coisas darem errado aqui:
* Estou simplificando as coisas aqui. Na verdade, não é necessário copiar a árvore inteira. Apenas as partes que foram alteradas precisam ser adicionadas - as partes restantes podem ser compartilhadas entre a árvore antiga e a nova .
zpool clear -F
comando