Nota: Esta é uma pergunta de acompanhamento para Existe uma maneira de proteger o SSD contra corrupção devido à perda de energia? . Eu tenho boas informações lá, mas basicamente centrada em três áreas, "obter um UPS", "obter unidades melhores", ou como lidar com a confiabilidade do Postgres.
Mas o que eu realmente quero saber é se há algo que eu possa fazer para proteger o SSD contra corrupção de metadados, especialmente em gravações antigas. Para recapitular o problema. É um sistema de arquivos ext4 em SSDs de nível de consumidor Kingston com cache de gravação ativado e estamos vendo esses tipos de problemas:
- arquivos com as permissões erradas
- arquivos que se tornaram diretórios (por exemplo, toggle.wav agora é um diretório com arquivos nele)
- diretórios que se tornaram arquivos (não tenho certeza do conteúdo ..)
- arquivos com dados embaralhados
O problema é menor com essas coisas acontecendo em dados que estão sendo gravados enquanto a unidade fica inativa ou pouco antes. É um problema, mas é esperado e posso lidar com isso de outras maneiras.
A maior surpresa e problema é que há corrupção de metadados acontecendo no disco em áreas que não foram gravadas recentemente (ou seja, uma semana ou mais antes).
Estou tentando entender como isso pode acontecer no nível do disco/controlador. O que está acontecendo? O SSD periodicamente "reequilibra" e move blocos, mesmo que eu esteja escrevendo em outro lugar? Assim:
E então há uma perda de energia quando D está sendo reescrito. Pode haver peças sobrando no bloco 1 e algumas no bloco 2. Mas não sei se funciona assim. Ou talvez haja algo mais acontecendo ..?
Em resumo - gostaria de entender como isso pode acontecer e se há algo que eu possa fazer para mitigar o problema no nível do sistema operacional.
Nota: "obter SSDs melhores" ou "usar um UPS" não são respostas válidas aqui - estamos tentando avançar nessa direção, mas tenho que viver com a realidade no terreno e encontrar o melhor resultado com o que temos agora. Se não houver solução com esses discos e sem UPS, acho que essa é a resposta.
Referências:
A corrupção do sistema de arquivos pós-perda de energia súbita na partição ext3 de uma unidade SSD é "comportamento esperado"? Isso é semelhante, mas não está claro se ele estava enfrentando os tipos de problemas que estamos.
EDIT: Eu também tenho lido problemas com ext4 que podem ter problemas com perda de energia. Os nossos são registrados, mas não sei de mais nada.
Evite a corrupção de dados na unidade ext4/Linux em caso de perda de energia
http://www.pointsoftware.ch/en/4-ext4-vs-ext3-filesystem-and-why-delayed-allocation-is-bad/
Sua melhor aposta é desabilitar o cache de gravação no disco, dizendo ao disco para não fazer cache de gravação (veja as opções hdparm e smartctl e espere que o disco as honre) e fazer com que o sistema operacional não faça buffer de gravações com opções de montagem como sync e dirsync .
Para saber como a corrupção de metadados pode ocorrer após uma falha de energia inesperada, dê uma olhada na minha outra resposta aqui.
A desativação do cache pode reduzir significativamente a probabilidade de perda de dados em trânsito; no entanto, com base em seus SSDs, os dados em repouso correm o risco de serem corrompidos. Além disso, ele comanda uma enorme perda de desempenho (vi SSDs de mais de 500 MB/s para gravar a meros 5 MB/s depois de desabilitar o cache DRAM privado).
Se você não pode confiar em seus SSDs, a única "solução" (ou melhor, solução alternativa) é usar um sistema de arquivos de soma de verificação de ponta a ponta como ZFS ou BTRFS e uma configuração RAID1/espelho: dessa maneira, qualquer -a corrupção de (meta)dados do dispositivo pode ser recuperada do outro lado do espelho executando um check/scrub.