Eu vi alguma documentação em um daemon que pode executar um programa / script para vários eventos BTRFS, mas não consigo mais encontrá-lo.
Como posso executar um script / programa em uma falha de unidade para uma matriz BTRFS raid1? Gostaria de executar um script em qualquer erro para agir como um aviso antecipado de uma unidade com potencial de falha, mas a falha real da unidade é mais importante. Gostaria de desmontar o sistema de arquivos nesse ponto (se não é o que o BTRFS faz de qualquer maneira) e definir um alarme.
Respostas:
Além do sistema de registro regular, o BTRFS possui um comando de estatísticas , que monitora os erros (incluindo erros de leitura, gravação e corrupção / soma de verificação) por unidade:
Então você pode criar um cronjob raiz simples:
Isso verificará a contagem de erros positivos a cada hora e enviará um e-mail. Obviamente, você testaria esse cenário (por exemplo, causando corrupção ou removendo o grep) para verificar se a notificação por email funciona.
Além disso, com sistemas de arquivos avançados como BTRFS (com soma de verificação), é recomendável agendar uma limpeza a cada duas semanas para detectar corrupção silenciosa causada por uma unidade defeituosa.
A
-B
opção manterá a limpeza em primeiro plano, para que você veja os resultados no email que o cron envia. Caso contrário, ele será executado em segundo plano e você precisará verificar os resultados manualmente, pois eles não estariam no email.Atualização : grep aprimorado, conforme sugerido por Michael Kjörling, obrigado.
Atualização 2 : notas adicionais sobre lavagem versus operações de leitura regulares (isso não se aplica apenas ao BTRFS):
Conforme apontado por Ioan, uma limpeza pode levar muitas horas, dependendo do tamanho e tipo da matriz (e outros fatores), até mais de um dia em alguns casos. E é uma verificação ativa, que não detecta erros futuros - o objetivo de uma limpeza é encontrar e corrigir erros em suas unidades naquele momento. Mas, como em outros sistemas RAID, é recomendável agendar scrubs periódicos. É verdade que uma operação de E / S típica, como a leitura de um arquivo, verifica se os dados lidos estão realmente corretos. Mas considere um espelho simples - se a primeira cópia do arquivo estiver danificada, talvez por uma unidade que esteja prestes a morrer, mas a segunda cópia, que está correta, seja realmente lida pelo BTRFS, então o BTRFS não saberá que há corrupção em uma das unidades. Isso ocorre simplesmente porque os dados solicitados foram recebidos,Isso significa que, mesmo que você leia especificamente um arquivo que sabe estar corrompido em uma unidade, não há garantia de que a corrupção será detectada por esta operação de leitura.
Agora, vamos supor que o BTRFS apenas lê a partir da boa unidade, nenhuma limpeza é executada para detectar os danos na unidade defeituosa e, em seguida, a boa unidade também falha - o resultado seria perda de dados (pelo menos o BTRFS saberia quais arquivos ainda estão corretos e ainda permitem que você os leia). Obviamente, este é um exemplo simplificado; na realidade, o BTRFS nem sempre lê de uma unidade e ignora a outra.
Mas o ponto é que scrubs periódicos são importantes porque encontrarão (e corrigirão) erros que as operações regulares de leitura não necessariamente detectam.
Drives com falha : Como essa pergunta é bastante popular, gostaria de salientar que esta "solução de monitoramento" é para detectar problemas com possíveis discos defeituosos (por exemplo, um drive que está morrendo causando erros, mas ainda acessível).
Por outro lado, se uma unidade desaparecer repentinamente (desconectada ou completamente morta, em vez de morrer e produzir erros), seria uma unidade com falha (o ZFS marcaria essa unidade como FAULTED). Infelizmente, o BTRFS pode não perceber que uma unidade acabou enquanto o sistema de arquivos está montado, conforme apontado nesta entrada da lista de emails de 09/2015 (é possível que isso tenha sido corrigido):
https://www.mail-archive.com/[email protected]/msg46598.html
Havia toneladas de mensagens de erro no dmesg a essa altura, portanto, grepping dmesg pode não ser confiável.
Para um servidor que usa BTRFS, pode ser uma idéia ter uma verificação personalizada (tarefa cron) que envie um alerta se pelo menos uma das unidades na matriz RAID se for, ou seja, não estiver mais acessível ...
fonte
grep -vE ' 0$'
seria melhor?A partir das estatísticas do btrfs-progs v4.11.1, tem a opção --check que retornará diferente de zero se algum valor não for zero, eliminando a necessidade do regex.
estatísticas do dispositivo -c /
fonte
Eu não confiaria no comando stats para notificação de erro, porque esse comando não retorna erro se uma unidade desaparecer repentinamente. Você pode testá-lo desconectando um cabo SATA ou puxando uma unidade - não recomendado em um sistema de arquivos importante.
Após uma reinicialização, o btrfs mostra unidades ausentes, mas isso pode ser tarde demais.
fonte
Não parece haver um daemon ou utilitário que relate oficialmente eventos BTRFS para manipulação do usuário. A alternativa mais próxima é monitorar o log do sistema em busca de mensagens do BTRFS e reagir de acordo.
http://marc.merlins.org/perso/btrfs/post_2014-03-19_Btrfs-Tips_-Btrfs-Scrub-and-Btrfs-Filesystem-Repair.html
O link acima fornece mais detalhes para configurar um script (
sec
pacote no Debian ou SEC ) projetado para monitoramento de log de propósito geral para atuar em mensagens de log inesperadas relacionadas ao BTRFS. Também depende de uma limpeza programada regularmente do sistema de arquivos para verificar a rotação de bits e emitir entradas de log como uma medida preventiva. Abaixo está um trecho específico para o script SEC:fonte
Parece uma tarefa para o monitoramento do sistema. Existe uma verificação que implementa a API do Nagios Plugin chamada: check_btrfs . Como você pode ver no código-fonte, ele tem uma função chamada
check_dev_stats
que verifica as estatísticas do dispositivo e será crítica se algum dos valores for diferente de zero. Ele também verifica se há problemas de alocação. O que permanece incerto é como a verificação se comporta se um disco estiver ausente ou ficar offline .PS: O plugin é empacotado no Debian: Monitoring-plugins-btrfs
fonte