Ultimamente, tenho lido sobre cache de gravação, NCQ, bugs de firmware, barreiras etc. em relação às unidades SATA, e não tenho certeza de qual é a melhor configuração que tornaria meus dados seguros em caso de falta de energia.
Pelo que entendi, o NCQ permite que a unidade reorganize as gravações para otimizar o desempenho, mantendo o kernel informado sobre quais solicitações foram gravadas fisicamente.
O cache de gravação faz com que a unidade atenda a uma solicitação muito mais rapidamente, porque não espera que os dados sejam gravados no disco físico.
Não sei como o NCQ e o cache de gravação se misturam aqui ...
Os sistemas de arquivos, especialmente os de diário, precisam ter certeza de quando uma solicitação específica foi anotada. Além disso, o processo de espaço do usuário usa fsync () para forçar a liberação de um arquivo específico. Essa chamada para fsync () não deve retornar até que o sistema de arquivos tenha certeza de que os dados estão gravados no disco.
Há um recurso (FUA, Force Unit Access), que eu vi apenas nas unidades SAS, que força a unidade a ignorar o cache e gravar diretamente no disco. Para todo o resto, existem barreiras de gravação, que é um mecanismo fornecido pelo kernel que pode disparar um fluxo de cache na unidade. Isso força todo o cache a ser gravado, não apenas os dados críticos, retardando o sistema inteiro se for abusado, com fsync () por exemplo.
Depois, existem unidades com bugs de firmware ou que deliberadamente ficam sobre quando os dados foram gravados fisicamente.
Dito isto .. existem várias maneiras de configurar as unidades / sistemas de arquivos: A) NCQ e cache de gravação desativados B) Apenas NCQ ativado C) Apenas cache de gravação ativado D) O NCQ e o cache de gravação ativados
Estou assumindo que as barreiras estão ativadas .. BTW, como verificar se elas estão realmente ativadas?
Em caso de perda de energia, durante a gravação ativa no disco, meu palpite é que a opção B (NCQ, sem cache) é segura, tanto para o diário do sistema de arquivos quanto para os dados. Pode haver uma penalidade de desempenho.
A opção D (NCQ + cache), se estiver usando barreiras ou FUA, seria segura para o diário do sistema de arquivos e aplicativos que usam fsync (). Seria ruim para os dados que estavam aguardando no cache, e cabe ao sistema de arquivos detectá-lo (soma de verificação), e pelo menos o sistema de arquivos não estará (espero) em um estado instável. Em termos de desempenho, deve ser melhor.
Minha pergunta, no entanto, permanece ... Estou perdendo alguma coisa? Existe alguma outra variável a ser levada em consideração? Existe alguma ferramenta que possa confirmar isso e que minhas unidades se comportem como deveriam?