Quando de repente perdem energia, os SSDs MLC / TLC / QLC têm dois modos de falha:
- eles perdem as gravações em andamento e somente na DRAM;
- eles podem corromper todos os dados em repouso armazenados na página inferior da célula NAND que está sendo programada.
A primeira condição de falha é óbvia: sem proteção de energia, todos os dados que não estiverem em armazenamento estável (isto é: NAND em si), mas somente em cache volátil (DRAM) serão perdidos. O mesmo acontece com discos mecânicos clássicos (e somente isso pode causar estragos no sistema de arquivos que não emitem fsyncs apropriadamente).
A segunda condição de falha é um caso MLC + SSDs: ao reprogramar o bit de página alta para armazenar novos dados, uma perda de energia inesperada pode destruir / alterar o bit inferior (isto é: dados anteriores confirmados ) também .
A única solução verdadeira e mais óbvia é integrar um cache DRAM protegido por perda de energia (geralmente usando baterias / supercaps), como feito desde sempre por controladores RAID high-end; isso, no entanto, aumenta o custo / preço da unidade. Drives de consumidor normalmente não têm caches protegidos por perda de energia; em vez disso, eles usam uma variedade de soluções mais econômicas como:
- cache de gravação parcialmente protegido (isto é: Crucial M500 / M550 / M600 +);
- NAND altera o diário (ou seja, unidades da Samsung, consulte o atributo SMART PoR);
- regiões especiais SLC / pseudo-SLC NAND para absorver novas gravações sem dados anteriores em risco (por exemplo: Sandisk, Samsung, etc.).
Voltemos à sua pergunta: suas unidades Kingstone são ultra baratas, usando um controlador não especificado e basicamente sem especificações públicas. Não me surpreende que uma perda repentina de energia tenha corrompido dados anteriores. Infelizmente, mesmo a desativação do cache DRAM do disco (com a enorme perda de desempenho que ele comanda) não resolverá seu problema, já que os dados anteriores (isto é: data-at-rest) podem e serão corrompidos por perdas de energia não-esperadas. Se eles forem baseados no antigo controlador Sandforce, até mesmo um total de blocos de unidades pode ser esperado sob as circunstâncias "certas".
Sugiro vivamente que reveja a sua UPS e, a médio prazo, substitua estas unidades antigas.
Uma última nota sobre o PostgreSQL e outros bancos de dados Linux: eles não desativarão o cache do disco e não não serão expedidos para fazer isso. Em vez disso, eles emitem fsyncs / FUAs periódicos / obrigatórios para enviar dados importantes para o armazenamento estável. É assim que as coisas devem ser feitas, a menos que exista uma razão convincente muito (ou seja, uma unidade que esteja sobre o ATA FLUSHES / FUAs).
EDITAR: se possível, considere migrar para um sistema de arquivos de soma de verificação como ZFS ou BTRFS. No mínimo, considere o XFS, que tem soma de verificação de diário e, ultimamente, até mesmo soma de verificação de metadados. Se você for forçado a usar o EXT4, considere a possibilidade de ativar o auto-fsck na inicialização (fsck.ext4 é muito bom no reparo de corrupção).