Eu definitivamente sou NO expert e tenho pouca experiência em sistemas de arquivos em geral. Então, pegue o que eu escrevo com pitada (ou punhado de sal):)
Agora, isenção de responsabilidade: o Btrfs (pelo que eu sei) não é tolerante a falhas AINDA e precisa de trabalho sério nesse departamento. Se a minha memória serve corretamente, o ZFS deve atender melhor às suas necessidades. Eu mesmo estive considerando o btrfs, mas ainda não estou interessado em usá-lo. Incidentalmente opensuse (eu acho) prover suporte para isso, então talvez você encontre alguma informação lá.
Por favor, atualize, se você encontrar a solução em outro lugar.
Espero que eu tenha ajudado.
Para o ZFS, a integridade dos dados é obtida usando-se uma soma de verificação (baseada em Fletcher) ou um hash (SHA-256) em toda a árvore do sistema de arquivos. [17] Cada bloco de dados é verificado e o valor da soma de verificação é salvo no ponteiro para aquele bloco - em vez de no próprio bloco. Em seguida, o ponteiro do bloco é verificado, com o valor sendo salvo em seu ponteiro. Essa soma de verificação continua até a raiz do sistema de arquivos no nó raiz, que também é soma de verificação, criando assim uma árvore Merkle. [17] A corrupção de dados em vôo ou leituras / gravações fantasmas (os checksums de dados gravados / lidos corretamente, mas na verdade errados) não são detectáveis pela maioria dos sistemas de arquivos, pois armazenam a soma de verificação com os dados. O ZFS armazena a soma de verificação de cada bloco em seu ponteiro de bloco pai para que o conjunto inteiro se valide. [18]
Quando um bloco é acessado, independentemente de serem dados ou metadados, sua soma de verificação é calculada e comparada com o valor da soma de verificação armazenada do que "deveria" ser. Se as somas de verificação coincidirem, os dados serão passados pela pilha de programação para o processo que solicitou. Se os valores não corresponderem, o ZFS poderá recuperar os dados se o pool de armazenamento tiver redundância por meio do espelhamento ZFS ou do RAID. [19] Se o pool de armazenamento consistir em um único disco, é possível fornecer essa redundância especificando "cópias = 2" (ou "cópias = 3"), o que significa que os dados serão armazenados duas vezes (três vezes) no disco, diminuindo efetivamente (ou, para "cópias = 3", reduzindo para um terço) a capacidade de armazenamento do disco. [20] Se houver redundância, o ZFS buscará uma cópia dos dados (ou a recriará por meio de um mecanismo de recuperação de RAID) e recalculará a soma de verificação, o que resultará na reprodução do valor originalmente esperado. Se os dados passarem por essa verificação de integridade, o sistema poderá atualizar a cópia defeituosa com dados em bom estado para que a redundância possa ser restaurada.