O kernel Linux 6.2 incluirá melhorias no RAID5/6 no Btrfs

Melhorias no Btrfs são propostas para inclusão no kernel Linux 6.2 para corrigir o problema de "buraco de gravação" na implementação do RAID 5/6. A essência do problema se resume ao fato de que, se ocorrer uma falha durante a gravação, é inicialmente impossível entender qual bloco em qual dos dispositivos RAID foi gravado corretamente e em qual a gravação não foi concluída. Se você tentar reconstruir um RAID nesta situação, os blocos correspondentes aos blocos subscritos poderão ser corrompidos porque o estado dos blocos RAID está fora de sincronia. Esse problema ocorre em qualquer array RAID1/5/6 onde não são tomadas medidas especiais para combater esse efeito.

Em uma implementação RAID como RAID1 em btrfs, esse problema é resolvido usando checksums em ambas as cópias, se houver incompatibilidade, os dados são simplesmente restaurados a partir da segunda cópia. Essa abordagem também funciona se algum dispositivo começar a fornecer dados incorretos em vez de falhar completamente.

Porém, no caso do RAID5/6, o sistema de arquivos não armazena somas de verificação para blocos de paridade: em uma situação normal, a exatidão dos blocos é verificada pelo fato de que todos estão equipados com uma soma de verificação, e o bloco de paridade pode ser recriado a partir dos dados. Contudo, no caso de gravação parcial, esta abordagem pode não funcionar em determinadas situações. Neste caso, ao restaurar o array, é possível que os blocos que caíram no registro incompleto sejam restaurados incorretamente.

No caso do btrfs, esse problema é mais relevante se a gravação produzida for menor que a faixa. Nesse caso, o sistema de arquivos deve executar uma operação de leitura-modificação-gravação (RMW). Se encontrar blocos de gravação em andamento, a operação RMW poderá causar corrupções que não serão detectadas, independentemente das somas de verificação. Os desenvolvedores fizeram alterações nas quais a operação RMW verifica a soma de verificação dos blocos antes de realizar esta operação e, se necessário, a recuperação de dados também realiza uma verificação da soma de verificação após a gravação. Infelizmente, em uma situação de gravação de uma faixa incompleta (RMW), isso leva a uma sobrecarga adicional no cálculo de somas de verificação, mas aumenta significativamente a confiabilidade. Para RAID6, tal lógica ainda não está pronta, porém, para tal falha no RAID6, é necessário que a gravação falhe em 2 dispositivos ao mesmo tempo, o que é menos provável.

Além disso, podemos observar as recomendações dos desenvolvedores sobre o uso de RAID5/6, cuja essência é que no Btrfs o perfil de armazenamento de metadados e dados pode ser diferente. Neste caso, você pode usar o perfil RAID1 (espelho) ou mesmo RAID1C3 (3 cópias) para metadados, e RAID5 ou RAID6 para dados. Isso garante proteção confiável de metadados e ausência de “buraco de gravação”, por um lado, e uso mais eficiente do espaço, típico do RAID5/6, por outro. Isso evita a corrupção nos metadados e a corrupção dos dados pode ser corrigida.

Pode-se notar também que para SSDs em Btrfs no kernel 6.2, a execução assíncrona da operação de “descarte” (marcação de blocos liberados que não podem mais ser armazenados fisicamente) será ativada por padrão. A vantagem deste modo é o alto desempenho devido ao agrupamento eficiente de operações de "descarte" em uma fila e processamento posterior da fila por um manipulador de segundo plano, devido ao qual as operações normais de FS não ficam lentas, como é o caso do síncrono " descarte" à medida que os blocos são liberados e o SSD pode tomar decisões melhores. Por outro lado, você não precisará mais usar utilitários como o fstrim, pois todos os blocos disponíveis serão limpos no FS sem a necessidade de varreduras adicionais e sem desacelerar as operações.

Fonte: opennet.ru

Adicionar um comentário