Created: 2015-09-10 19:32 | Updated: 2015-09-10 19:32 |
Uma surpresa que nenhum administrador de sistemas e mesmo o usuário final quer é se deparar com um disco rígido inoperante. Operações de backup e espelhamento de discos, entre outras, ajudam em muito, mas chegar num final de dia de trabalho e se deparar com um crash de disco é muito chato e dispendioso, porque normalmente a restauração (reinstalação de tudo) é um processo demorado.
No Linux, podemos usar as ferramentas contidas no pacote Smartmontools para ajuar a detectar possíveis problemas no disco rígido com alguma antecedência, de forma que a substituição possa ser planejada.
Observe que a ideia não é tornar o disco rígido infalível, já que isto é claramente impossível, a ideia é simplesmente poder planejar as substituições.
No Debian a instalação é trivial:
apt-get install smartmontools
A primeira coisa a saber é o nome do dispositivo associado ao disco rígido. Nas distribuições Linux, normalmente, os discos rígidos com interface IDE são chamados hdX, enquanto que os discos com interface SATA ou SCSI estão associados aos dispositivos sdX.
Nos exemplos a seguir, vamos considerar que o disco rígido em questão é /dev/sda.
Para obter informações sobre o disco rígido:
smartctl --info /dev/sda
Observe que nos comandos sempre são utilizados os nomes dos dispositivos sem o número da partição. Isto se deve ao fato de que estamos verificando o estado do disco rígido como um todo.
A saída do comando será similar à seguinte:
smartctl 5.40 2010-07-12 r3124 [i686-pc-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF INFORMATION SECTION ===
Device Model: SAMSUNG HD322GM
Serial Number: S2SXJ50B805543
Firmware Version: 1AR10101
User Capacity: 320,072,933,376 bytes
Device is: Not in smartctl database [for details use: -P showall]
ATA Version is: 8
ATA Standard is: ATA-8-ACS revision 6
Local Time is: Thu Aug 20 09:15:47 2015 BRT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
As duas informações importantes para a nossa questão são as duas últimas do exemplo: se o suporte ao SMART está disponível e se ele está habilitado.
Para verificar a saúde do disco rígido, pode ser utilizado o seguinte comando:
smartctl -s on -a /dev/sda
O parâmetro "-s on" pode ser omitido se o suporta ao SMART já estiver habilitado.
A saída do comando é bastante longa, mas a parte que interessa agora é a seguinte:
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
O resultado pode ser tanto PASSED como FAILED, sneod que, para o último caso, a falha de hardware é iminente e a substituição do disco rígido deve ser realizada com urgência.
A próxima parte da saída do comando a ser avaliada é a que contém os atributos:
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 100 100 051 Pre-fail Always - 19
2 Throughput_Performance 0x0026 252 252 000 Old_age Always - 0
3 Spin_Up_Time 0x0023 084 082 025 Pre-fail Always - 5042
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 1008
5 Reallocated_Sector_Ct 0x0033 252 252 010 Pre-fail Always - 0
7 Seek_Error_Rate 0x002e 252 252 051 Old_age Always - 0
8 Seek_Time_Performance 0x0024 252 252 015 Old_age Offline - 0
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 8626
10 Spin_Retry_Count 0x0032 252 252 051 Old_age Always - 0
11 Calibration_Retry_Count 0x0032 252 252 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1017
13 Read_Soft_Error_Rate 0x003a 100 100 000 Old_age Always - 0
191 G-Sense_Error_Rate 0x0022 100 100 000 Old_age Always - 12
192 Power-Off_Retract_Count 0x0022 252 252 000 Old_age Always - 0
193 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 1018
194 Temperature_Celsius 0x0002 064 063 000 Old_age Always - 29 (Lifetime Min/Max 12/37)
195 Hardware_ECC_Recovered 0x003a 100 100 000 Old_age Always - 0
196 Reallocated_Event_Count 0x0032 252 252 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 252 252 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0030 252 252 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0036 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x002a 100 100 000 Old_age Always - 2
240 Head_Flying_Hours 0x0032 100 100 000 Old_age Always - 8626
241 Total_LBAs_Written 0x0032 098 094 000 Old_age Always - 3333525
242 Total_LBAs_Read 0x0032 096 093 000 Old_age Always - 6259400
254 Free_Fall_Sensor 0x0032 252 252 000 Old_age Always - 0
Basicamente, a tabela lista os valores para uma série de atributos definida pelo fabricante do dispositivo, bem como os respectivos valores de limiar de falha. Esta tabela é automaticamente atualizada pelo firmware do disco rígido.
As colunas são as seguintes:
ID#: ID do atributo, usualmente um valor decimal (ou em hexadecimal) entre 1 e 255;
ATTRIBUTE_NAME: Nome do atributo, conforme definido pelo fabricante;
FLAG: Flag definido pelo fabricante. Normalmente podemos ignorá-lo;
VALUE: Esta é uma das mais importantes informações da tabela e indica o valor "normalizado" do atributo, podendo variar de 1 a 253, sendo que o valor 253 significa a melhor condição e 1 a pior condição. Dependendo do atributo e do fabricante, o valor inicial é ajustado para 100 ou 200;
WORST: Corresponde ao menor valor já registrado para o atributo;
THRESH: O menor valor que a coluna WORST pode antingir antes do atributo ser considerado em falha;
TYPE: Tipo do atributo: pode ser tanto Pre-fail ou Old-age). Um atributo Pre-fail é considerado um atributo crítico que participa da avaliação geral executada pelo SMART e é determinante no resultado dos testes. Se um atributo do tipo Pre-fail estover em falha, o drive é considerado como "propenso a falha iminente". Por outro lado, um atributo do tipo Old_age é considerado, para fins do SMART, como um atributo não crítico;
UPDATED: Indica a frequência na qual o atributo é atualizado. Offline indica que testes offline estão sendo executados no drive;
WHEN_FAILED: Este valor será ajustado para "FAILING_NOW" (se VALUE for menor ou igual a TRESH), "In_the_past" (se WORST for menor ou igual a TRESH) ou "-" (se nenhuma das condições anteriores). No caso de FAILING_NOW, faça o backup imediatamente, principalmente se o atributo for do tipo Pre-fail. O valor "In_the_past" indica que o atributo já falhou antes, mas esteve OK no último teste. O valor "-" indica que o parâmetro nunca falhou;
RAW_VALUE: É um valor bruto definido pelo fabricante do qual o valor na coluna VALUE é derivado.
A melhor forma de manter as coisas sobre controle é monitorá-las constantemente e de forma automática. O Smartd pode fazer isto também da seguinte forma.
Primeiro, edite o arquivo /etc/default/smartmontools para informar ao sistema operacional que o smartd deve ser iniciado durante a inicialização do sistema e também para informar o intervalo entre verificações, em segundos. No exemplo a seguir o smartd foi habilitado e o intervalo foi ajustado para 2 horas (7200 = 26060):
start_smartd=yes
smartd_opts="--interval=7200"
Agira, edite o arquivo de configuração do smartd (/etc/smartd.conf), procure por uma linha que inicie com DEVICESCAN e comente-a. Depois, adicione as seguintes linhas:
/dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03)
/dev/sda -m email@domínio.com.br -M exec /usr/share/smartmontools/smartd-runner
/dev/sda -m email@domínio.com.br -M test
Observe que estas linhas referem-se apenas a um disco rígido. Caso haja mais discos rígidos no sistema, repita as linhas alterando o nome do dispositivo.
Atenção: como veremos a seguir, a última linha será utilizada apenas como teste e deverá ser removida (ou comentada) logo após os testes.
Vejamos o que estas configurações fazem (para maiores informações, leia as páginas de manual):
/dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03)
Esta linha diz ao smartd para efetuar as seguintes operações no dispositivo /dev/sda:
Ativa uma série de parâmetros no dispositivo (-a);
Habilita o teste offline (-o on)
Habilita o atributo Autosave (-S on)
Agenda a execução dos testes (-s) seguindo o formato (T/MM/DD/d/HH) onde:
T: Tipo do teste (S para short, L para long);
Qualquer parâmetro especificado com ponto (.) indica todos. No exemplo (S/../.././02|L/../../6/03) indica a execução do teste rápido (short) todos os dias às duas horas da manhã ou o teste longo a ser executado aos sábados às três horas da manhã).
A linha:
/dev/sda -m email@domínio.com.br -M exec /usr/share/smartmontools/smartd-runner
Indica que, em caso de problemas, deverá ser enviado um e-mail para o destinatário email@domínio.com.br e será executado o programa smartd-runner.
A linha:
/dev/sda -m email@domínio.com.br -M test
Indica que deve ser enviado um e-mail de teste para o destinatário email@domínio.com.br assim que o smartd for iniciado.
Observe que, para que o e-mail seja enviado, é necesário que o sistema operacional esteja corretamente configurado para envio de e-mails.
Para testar, reinicie o smartd:
invoke-rc.d smartd restart
Você deve receber um e-mail de teste do Smartd.
Uma vez que as configurações tenha funcionado, podemos remover ou comentar a linha de envio de e-mail de teste:
/dev/sda -m email@domínio.com.br -M test
Ou ainda, como eu sugiro fazer, altera a linha da seguinte forma:
/dev/sda -m email@domínio.com.br -M daily
Isto fará com que, no caso do smartd detectar algum problema, ele enviará um e-mail diariamente para o usuário enquanto o problema persistir. Isto pode parecer muito chato, mas garanto que é melhor do que chegar no trabalho e descobrir que há uma reinstalação de emergência a ser feita...
A seguir são apresentados os arquivos de configuração de um servidor Linux com Smartd e SSMTP configurado para envio de e-mails. O servidor em questão conta com dois discos rígidos instalados (sda e sdb).
Arquivo /etc/ssmtp/ssmtp.conf:
root=postmaster
mailhub=mail
hostname=vctsrv001.vector
FromLineOverride=YES
AuthUser=USUARIO@DOMINIO.com.br
AuthPass=SENHA_DO_USUARIO
RewriteDomain=DOMINIO.com.br
Arquivo /etc/ssmtp/revaliases:
root:USUARIO@DOMINIO.com.br:smtp.DOMINIO.com.br:PORTA
www-data:USUARIO@DOMINIO.com.br:smtp.DOMINIO.com.br:PORTA
Arquivo /etc/default/smartmontools:
start_smartd=yes
smartd_opts="--interval=7200"
Arquivo /etc/smartd.conf:
/dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03)
/dev/sda -m USUÁRIO@DOMÍNIO.com.br -M exec /usr/share/smartmontools/smartd-runner
/dev/sda -m USUÁRIO@DOMÍNIO.com.br -M daily
/dev/sdb -a -o on -S on -s (S/../.././02|L/../../6/03)
/dev/sdb -m USUÁRIO@DOMÍNIO.com.br -M exec /usr/share/smartmontools/smartd-runner
/dev/sdb -m USUÁRIO@DOMÍNIO.com.br -M daily