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

36

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

Atualmente, ele é mdadm RAID-1 , indo para RAID-5 quando tiver mais unidades (e, em seguida, RAID-6 que estou esperando). No entanto, ouvi várias histórias sobre dados sendo corrompidos em uma unidade e você nunca percebeu devido à outra unidade sendo usada, até o momento em que a primeira unidade falha, e você encontra a segunda unidade também está parafusada (e 3ª, 4ª , Quinta unidade).

Obviamente, backups são importantes e eu estou cuidando disso também, no entanto eu sei que eu já vi scripts que pretendem ajudar contra esse problema e permitem que você verifique o seu RAID enquanto ele está rodando. No entanto, olhando para esses scripts novamente agora estou achando difícil encontrar algo que parece semelhante ao que eu corri antes e eu sinto que estou desatualizado e não entender o que mudou.

Como você verificaria um RAID em execução para garantir que todos os discos ainda estivessem sendo pré-formados normalmente?

Eu monitoro o SMART em todas as unidades e também tenho mdadm definido para me enviar um e-mail em caso de falha, mas gostaria de saber que minhas unidades ocasionalmente "verificam" a si mesmas também.

    
por djsmiley2k 08.01.2012 / 23:37

4 respostas

52

O ponto do RAID com redundância é que ele continuará o máximo que puder, mas obviamente detectará erros que o colocam 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 de 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 observando /proc/mdstat . Você também pode obter informações sobre um dispositivo RAID em /sys/class/block/md*/md/* ; veja Documentation/md.txt na documentação do kernel. Algumas /sys entradas são também graváveis; por exemplo, você pode acionar uma verificação completa de md0 com 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 ter MAILADDR root em /etc/mdadm.conf (algumas distribuições (por exemplo, Debian) configuram isso automaticamente). Em seguida, você receberá uma notificação por e-mail assim que ocorrer um erro (uma matriz degradada) .

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

  • Execute um MTA em 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ê quiser que o e-mail seja entregue localmente).
  • Redirecionar emails indo para contas do sistema (pelo menos root ) para um endereço que você lê regularmente. Esta pode ser sua conta na máquina local ou um endereço de e-mail externo. Com a maioria dos MTAs, o endereço pode ser configurado em /etc/aliases ; você deveria 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, você pode precisar executar o comando newaliases depois de editar /etc/aliases .

por 09.01.2012 / 00:37
15

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

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

Eu também tenho uma tarefa 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 êxito no disco. Sim, alguns arquivos serão lidos do cache de memória em vez do disco. Mas imagino que, se o arquivo estiver no cache de memória, ele foi lido com êxito recentemente no disco ou está prestes a ser gravado em disco, e qualquer uma dessas operações também revelará erros de unidade. De qualquer forma, executar este trabalho testa o critério mais importante de um array RAID (“Posso ler meus dados com sucesso?”) E nos três anos em que estive executando meu array, a única vez em que tive um disco foi ruim, este comando que descobriu isso.

Um pequeno aviso é que, se o seu sistema de arquivos for grande, esse comando demorará muito tempo; meu sistema leva cerca de 6hr / TiB. Eu o uso usando ionice para que o resto do sistema não pare durante a verificação da unidade:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null
    
por 30.11.2012 / 17:12
9

o pacote Debian 'mdadm' contém o arquivo

/etc/cron.d/mdadm

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

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

que irá verificar a consistência de todos os seus arrays (a menos que você defina AUTOCHECK como false em / etc / default / mdadm ). Um relatório será enviado para o usuário 'root' (certifique-se de receber esses e-mails).

    
por 09.09.2015 / 11:54
6

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

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }
    
por 23.04.2013 / 23:32

Tags