Meu entendimento é que discos rígidos e SSDs implementam alguma correção básica de erros dentro da unidade, e a maioria das configurações de RAID, por exemplo, mdadm, depende disso para decidir quando uma unidade falhou em corrigir um erro e precisa ser colocada offline. No entanto, isso depende do armazenamento ser 100% preciso no diagnóstico de erros. Não é assim, e uma configuração comum como um espelho RAID-1 de duas unidades ficará vulnerável: suponha que alguns bits em uma unidade estejam silenciosamente corrompidos e a unidade não relate um erro de leitura. Assim, sistemas de arquivos como btrfs e ZFS implementam suas próprias somas de verificação, para não confiar em firmwares de unidade de buggy, cabos SATA com falha e assim por diante.
Da mesma forma, a RAM também pode ter problemas de confiabilidade e, portanto, temos RAM de ECC para resolver esse problema.
Minha pergunta é a seguinte : qual é a maneira canônica de proteger o arquivo de troca do Linux contra corrupção silenciosa / rot de bit não detectada pelo firmware da unidade em uma configuração de dois discos (ou seja, usando drivers do kernel da linha principal)? Parece-me que uma configuração que não possui proteção de ponta a ponta aqui (como a fornecida pelo btrfs) nega um pouco a tranqüilidade trazida pela RAM do ECC. No entanto, não consigo pensar em um bom caminho:
- O btrfs não suporta arquivos de troca. Você pode configurar um dispositivo de loop a partir de um arquivo btrfs e fazer uma troca por ele. Mas isso tem problemas:
- Gravações aleatórias não funcionam bem: https://btrfs.wiki.kernel.org/index.php/Gotchas#Fragmentation
- A sugestão para desativar a cópia na gravação também desabilitará a soma de verificação - derrotando assim todo o objetivo deste exercício. Eles assumem que o arquivo de dados tem suas próprias proteções internas.
- O ZFS no Linux permite usar um ZVOL como swap, o que eu acho que poderia funcionar: http://zfsonlinux.org/faq.html#CanIUseaZVOLforSwap - no entanto, pela minha leitura, o ZFS normalmente exige muita memória e faz com que funcione em uma troca Somente a aplicação soa como algum trabalho para descobrir isso. Eu acho que essa não é minha primeira escolha. Por que você precisaria usar algum módulo de kernel out-of-tree para ter uma troca confiável está além de mim - certamente há uma maneira de fazer isso com a maioria das distribuições / kernels Linux modernos nos dias de hoje?
- Na verdade, havia um encadeamento em uma lista de discussão do kernel do Linux com patches para ativar somas de verificação no próprio gerenciador de memória, exatamente pelas razões que discuto nesta pergunta: http://thread.gmane.org/gmane.linux.kernel/989246 - infelizmente, até onde eu sei, o patch morreu e nunca chegou a montante por razões desconhecidas para mim. Que pena, parecia um bom recurso. Por outro lado, se você colocar swap em um RAID-1 - se a corrupção estiver além da capacidade de reparo da soma de verificação, você desejará que o gerenciador de memória tente ler da outra unidade antes de entrar em pânico ou o que quer que seja. provavelmente fora do escopo do que um gerente de memória deve fazer.
Em suma:
- RAM possui ECC para corrigir erros
- Os arquivos no armazenamento permanente possuem btrfs para corrigir erros
- Swap has ??? <--- esta é a minha pergunta