Como verificar os RAIDs 'mdadm' durante a execução?

41

Estou começando a obter uma coleção de computadores em casa e, para apoiá-los, tenho minha caixa Linux "servidor" executando uma matriz RAID.

É atualmente mdadm RAID-1, indo RAID-5uma vez eu tenho mais unidades (e então RAID-6eu estou esperando). No entanto, ouvi várias histórias sobre dados corrompidos em uma unidade e você nunca percebeu que a outra unidade estava sendo usada, até o momento em que a primeira unidade falha e você descobre que sua segunda unidade também está danificada (e 3ª, 4ª , 5ª unidade).

Obviamente, os backups são importantes e eu também cuido disso, mas sei que já vi scripts que pretendem ajudar contra esse problema e permitem que você verifique seu RAID enquanto ele estiver em execução. No entanto, procurando esses scripts novamente agora, acho difícil encontrar algo que pareça com o que corri antes e sinto que estou desatualizado e não entendo o que mudou.

Como você verificaria um RAID em execução para garantir que todos os discos ainda estejam sendo executados normalmente?

Monitoro o SMART em todas as unidades e também me mdadmenviei um e-mail em caso de falha, mas eu gostaria de saber que minhas unidades ocasionalmente também se "verificam".

djsmiley2k - CoW
fonte
Parece que você já está no caminho certo, basta configurar um cron para enviar os resultados do smartctl para suas unidades.
Laebshade

Respostas:

56

O ponto do RAID com redundância é que ele continuará o máximo possível, mas obviamente detectará erros que o colocarão em um modo degradado, como um disco com falha. Você pode mostrar o status atual de uma matriz com mdadm -D:

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

Além disso, o status de retorno mdadm -Dé diferente de zero se houver algum problema, como um componente com falha (1 indica um erro que o modo RAID compensa e 2 indica uma falha completa).

Você também pode obter um resumo rápido de todo o status do dispositivo RAID olhando /proc/mdstat. Você também pode obter informações sobre um dispositivo RAID /sys/class/block/md*/md/*; veja Documentation/md.txtna documentação do kernel. Algumas /sysentradas também são graváveis; por exemplo, você pode ativar uma verificação completa md0com echo check >/sys/class/block/md0/md/sync_action.

Além dessas verificações pontuais, o mdadm pode notificá-lo assim que algo ruim acontecer. Certifique-se de que você tem MAILADDR rootem /etc/mdadm.conf(algumas distribuições (por exemplo, Debian) configurá-lo automaticamente). Você receberá uma notificação por email assim que ocorrer um erro (uma matriz degradada) .

Certifique-se de receber e-mails enviados para raiz na máquina local (algumas distribuições modernas omitem isso, porque consideram que todos os e-mails passam por provedores externos - mas o recebimento de e-mail local é necessário para qualquer administrador de sistema sério). Testar esta enviando raiz um mail: echo hello | mail -s test root@localhost. Geralmente, uma configuração de email adequada requer duas coisas:

  • Execute um MTA na sua máquina local. O MTA deve ser configurado pelo menos para permitir a entrega de correio local. Todas as distribuições vêm com MTAs adequados, escolha qualquer coisa (mas não o nullmailer, se você desejar que o email seja entregue localmente).
  • Redirecione as mensagens que vão para as contas do sistema (pelo menos root) para um endereço que você lê regularmente. Pode ser sua conta na máquina local ou um endereço de email externo. Na maioria dos MTAs, o endereço pode ser configurado /etc/aliases; você deve ter uma linha como

    root: djsmiley2k
    

    para entrega local ou

    root: [email protected]
    

    para entrega remota. Se você escolher entrega remota, verifique se o seu MTA está configurado para isso. Dependendo do seu MTA, pode ser necessário executar o newaliasescomando após a edição /etc/aliases.

Gilles 'SO- parar de ser mau'
fonte
Você pode explicar por que o nullmailer não deve ser usado? É por causa dos motivos mencionados em unix.stackexchange.com/questions/1449/… ? Qual MTA você recomendaria?
Cameron Martin
O @CameronMartin Nullmailer encaminha apenas o correio para uma máquina remota, não faz entrega local. Você pode usá-lo se tiver um servidor SMTP em algum lugar que aceite mensagens da sua máquina, mas não se estiver entregando as mensagens localmente. Eu editei minha resposta para esclarecer.
Gilles 'SO- stop be evil'
19

Você pode forçar uma verificação de toda a matriz enquanto estiver online. Por exemplo, para verificar a matriz /dev/md0, execute como root:

echo check > /sys/block/md0/md/sync_action

Também tenho um trabalho cron que executa o seguinte comando uma vez por mês:

tar c /dir/of/raid/filesystem > /dev/null

Não é uma verificação completa da própria unidade, mas força o sistema a verificar periodicamente que (quase) todos os arquivos podem ser lidos com sucesso no disco. Sim, alguns arquivos serão lidos no cache da memória em vez do disco. Mas acho que se o arquivo estiver no cache de memória, ele foi lido com sucesso recentemente, ou está prestes a ser gravado no disco, e qualquer uma dessas operações também descobrirá erros de unidade. De qualquer forma, a execução desse trabalho testa o critério mais importante de uma matriz RAID ("Posso ler meus dados com êxito?") E nos três anos em que administrei minha matriz, na única vez em que tive um disco com defeito, foi este comando que o descobriu.

Um pequeno aviso é que, se o seu sistema de arquivos for grande, esse comando levará muito tempo; meu sistema leva cerca de 6 horas / TiB. Eu o executo usando ionicepara que o restante do sistema não pare durante a verificação da unidade:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null
stharward
fonte
Observe que ionicesó funcionará se você usar o planejador de E / S CFQ (padrão).
Totor
Portanto, isso pode ser óbvio para a maioria, mas não é para mim - como a execução de um script cuja saída é redirecionada para devnull realmente o notifica de algo? É o caso de que, se o "tar" encontrar algum erro, ele será propagado até o daemon mdadm, que (presumivelmente) enviará um email a você?
Ljwobker # 4/15
Minha pergunta para você, é como você pega os erros de alcatrão se ele está sendo executado em um trabalho cron? Onde isso gera? Eu teria pensado que seria adicionar um redirecionamento para stderr para um arquivo que pode ser monitorado periodicamente ou a cauda dele que está sendo impresso para o console de abrir uma janela de terminal :)
Madivad
1
@ljwobker Desculpe por reviver um tópico antigo. Eu acho que a intenção do comando tar aqui é tentar ler todo o conteúdo do volume. Isso verifica se o volume inteiro ainda está legível e dá ao md a chance de detectar um disco defeituoso.
Mikepj
1
Se for proveniente de um cronjob, o cron enviará normalmente toda a saída diretamente para o local mailto =, se estiver definido, caso contrário, para o root. No entanto ... eu estou querendo saber se dd seria melhor do que o alcatrão, para despesas gerais mais baixas?
djsmiley2k - Cow
11

o pacote 'mdadm' do Debian e Ubuntu contém o arquivo

/etc/cron.d/mdadm

que por sua vez, no primeiro domingo de cada mês, executará o comando

/usr/share/mdadm/checkarray --cron --all --idle --quiet

isso verificará a consistência de todas as suas matrizes (a menos que você defina AUTOCHECK como false em / etc / default / mdadm ). Um relatório será enviado ao usuário 'raiz' (verifique se você recebeu esses e-mails).

am70
fonte
8

Eu uso essa função simples para verificar /proc/mdstat:

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }
jasonwryan
fonte
arrumado! eu gosto do estilo :) .. isso é exatamente o que eu estava procurando para colocar no MOTD :) obrigado!
Jirislav #