Monitorizando discos duros con SMART

per Victor Carceler darrera modificació 2020-04-02T11:53:08+01:00
Traducción del artículo original de Bruce Allen: http://www.linuxjournal.com/article/6983

Es un hecho que todos los discos se acaban estropeando, y es facil ver porqué. Los platos de un disco duro moderno rotan cientos de veces por segundo, manteniendo tolerancias menores que una micra entre las cabezas del disco y el medio magnético que almacena los datos. A menudo funcionan 24/71 en entornos polvorientos y sobrecalentados, desollándose en máquinas con una pesada carga o un mantenimiento pobre. Así, no es sorprendente que los usuarios experimentados estén demasiado familiarizados con los síntomas de un disco que se está muriendo. Comienzan a suceder cosas extrañas. Inexcrutables mensajes de error del kernel llenan la consola y entonces el sistema se vuelve inestable y se bloquea. Con frecuencia se pierden días enteros repitiendo el trabajo reciente, re-instalando el SO e intentando recuperar los datos. Aunque tenga un backup reciente un fallo súbito de disco es una pequeña catástrofe.

Muchos usuarios y administradores de sistemas no conocen que los sistemas SMART (Self-Monitoring Analysis and Reporting Technology) están presentes en la mayoría de los discos duros ATA y SCSI. Las unidades de disco SMART monitorizan internamente su propia salud y rendimiento. En muchos casos, el propio disco proporciona una alerta temprana de que algo está estropeado, ayudando a evitar el escenario anteriormente descrito. La mayoría de las implementaciones de SMART también permiten a los usuarios realizar sus propios tests en el disco y monitorizar un número de atributos de rendimiento y fiabilidad.

De profesión soy físico. Mi grupo de investigación ejecuta un gran cluster de computadoras con 300 nodos y 600 unidades de disco, en los que se almacenan más de 50TB de datos físicos. Me interesé por SMART hace varios años cuando me dí cuenta de que podía ayudar a reducir el tiempo de inactividad y mantener nuestro cluster funcionando con mayor fiabilidad. Por esta razón durante más o menos un año he estado manteniendo el paquete de fuente abierta llamado smartmontools, un derivado del paquete UCSC smartsuite.

En este artículo explicaré cómo utilizar la herramienta smartctl de las smartmontools y el demonio smartd para monitorizar la salud de los discos de un sistema. Consulte smartmontools.sourceforge.net para descargar y obtener las instrucciones de instalación, consulte el fichero WARNINGS para una obtener una lista de problemas con los discos y sus controladoras. Es posible encontrar documentación adicional en las páginas de manual (man smartctl y man smartd) y en la página web.

Hay versiones de smartmontools disponibles para Slackware, Debian, SuSE, Mandrake, Gentoo, Conectiva y otras distribuciones de Linux. Los productos de Red Hat contienen las versiones de smartctl y smartd de la UCSC smartsuite, pero las versiones de smartmontools se incluirán en los próximos lanzamientos2.

Para entender cómo trabajan las smartmontools, es útil conocer la historia de SMART. La especificación original de SMART (SFF-8035i) fue escrita por un grupo de fabricantes de unidades de disco. En la Revisión 2 (Abril de 1996) los discos mantenían una lista interna de hasta 30 atributos correspondientes a diferentes medidas de rendimiento y fiabilidad, tales como los ratios de error para las lecturas y búsquedas3. Cada atributo tiene un valor normalizado de un byte comprendido entre 1 y 253 y un umbral correspondiente también de un byte. Si uno o más de los valores normalizados de los atributos es menor o igual que el umbral correspondiente, entonces o bien se espera que el disco falle en menos de 24 horas o bien ha excedido su diseño o vida de uso. Algunos de los valores de los atributos se actualizan mientras el disco trabaja. Otros se actualizan sólo mediante pruebas off-line que ralentizan de forma temporal las operaciones de lectura/escritura en disco, y por lo tanto, deben ser ejecutadas mediante un comando especial. Al final de 1995, partes de SFF-8035i fueron introducidas en el estándard ATA-3.

A partir del estándard ATA-4, el requisito de que los discos mantengan una tabla de atributos interna se abandonó. En su lugar, los discos símplemente retornan una respuesta OK o NO OK a la consulta sobre su salud. Una respuesta negativa indica que el firmware del disco ha determinado que el disco probablemente fallará. El estándard ATA-5 añadió un registro de errores ATA y comandos para ejecutar tests de autodiagnóstico para el disco al conjunto de comandos SMART.

Para hacer uso de estas características de los discos, necesita conocer cómo utilizar las smartmontools para examinar los atributos de los discos (la mayoría de los discos mantienen retrocompatibilidad con SFF-8035i), consultar el estado de la salud del disco, ejecutar tests de autodiagnóstico, examinar el registro de autodiagnóstico del disco (con los resultados de los 21 últimos tests de autodiagnóstico) y examinar el registro de errores ATA del disco (con detalles sobre los útimos 5 errores de disco). Aunque este artículo está centrado en los discos ATA, es posible encontrar documentación adicional sobre los dispositivos SCSI en la página web de las smartmontools.

Para comenzar, ejecute el comando smartctl -a /dev/hda, utilizando el camino adecuado a su disco, como root. Si SMART no está activado en el disco, será necesario activarlo primero mediante la opción -s on. Entonces verá una salida similar a la salida mostrada en el los Listados 1-5.

La primera parte de la salida (Listado 1) muestra información sobre el modelo/firmware del disco, en este ejemplo es un IBM/Hitachi GXP-180. Smartmontools tiene una base de datos de tipos de disco. Si su disco está en la base de datos, será posible interpretar los valores crudos4 de los atributos de forma correcta.

Listado 1. Salida de smartctl -i /dev/hda

Device Model:     IC35L120AVV207-0
Serial Number: VNVD02G4G3R72G
Firmware Version: V24OA63A
Device is: In smartctl database [for details use: -P show]
ATA Version is: 6
ATA Standard is: ATA/ATAPI-6 T13 1410D revision 3a
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

La segunda parte de la salida (Listado 2) muestra el resultado de una consulta sobre la salud. Este es el Informe Ejecutivo Resumido5 en una línea sobre la salud del disco; el disco que se muestra aquí ha superado la prueba. Si el estado de salud de su disco es FAILING, realice inmediatamente una copia de respaldo de sus datos. El resto de esta sección de salida proporciona información sobre las aptitudes del disco y el tiempo estimado para la realización de un test de autodiagnóstico corto y largo.

Listado 2. Salida de smartctl -Hc /dev/hda

SMART overall-health self-assessment test result: PASSED

General SMART Values:
Off-line data collection status: (0x82) Offline data collection activity
was completed without error.
Auto Off-line Data Collection:
Enabled.
Self-test execution status: ( 0) The previous self-test routine
completed without error or no
self-test has ever been run.
Total time to complete off-line
data collection: (2855) seconds.
Offline data collection
capabilities: (0x1b) SMART execute Offline immediate.
Automatic timer ON/OFF support.
Suspend Offline collection upon new
command.
Offline surface scan supported.
Self-test supported.
No Conveyance Self-test supported.
No Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 1) minutes.
Extended self-test routine
recommended polling time: ( 48) minutes.

La tercera parte de la salida (Listado 3) muestra la tabla de hasta 30 atributos (de un conjunto máximo de 255) del disco. Recuerde que los atributos ya no son parte del estándard ATA, pero la mayoría de los fabricantes todavía los soportan. Aunque SFF-8035i no define el significado o interpretación de los atributos, muchos tienen de facto una interpretación estándard. Por ejemplo, en este disco el decimotercer atributo (ID #194) representa su temperatura interna.

Listado 3. Salida de smartctl -A /dev/hda

Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000b 100 100 060 Pre-fail Always - 0
2 Throughput_Performance 0x0005 155 155 050 Pre-fail Offline - 225
3 Spin_Up_Time 0x0007 097 097 024 Pre-fail Always - 293 (Average 270)
4 Start_Stop_Count 0x0012 100 100 000 Old_age Always - 10
5 Reallocated_Sector_Ct 0x0033 100 100 005 Pre-fail Always - 0
7 Seek_Error_Rate 0x000b 100 100 067 Pre-fail Always - 0
8 Seek_Time_Performance 0x0005 125 125 020 Pre-fail Offline - 36
9 Power_On_Hours 0x0012 100 100 000 Old_age Always - 3548
10 Spin_Retry_Count 0x0013 100 100 060 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 10
192 Power-Off_Retract_Count 0x0032 100 100 050 Old_age Always - 158
193 Load_Cycle_Count 0x0012 100 100 050 Old_age Always - 158
194 Temperature_Celsius 0x0002 189 189 000 Old_age Always - 29 (Lifetime Min/Max 23/33)
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0
197 Current_Pending_Sector 0x0022 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0008 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x000a 200 200 000 Old_age Always - 0

Los estudios han mostrado que tan solo haciendo descender 5ºC la temperatura de un disco se reduce de forma significativa el ratio de fallos, aunque esto es una cuestión menor para la última generación de unidades con cojinetes de fluidos6. Uno de los pasos más simples y menos costosos que usted puede dar para asegurar la fiabilidad del disco es añadir un ventilador-refrigerador que sople aire refrescante directamente en, o através de, los discos del sistema.

Cada atributo tiene un valor crudo (RAW_VALUE) de seis bytes y un valor normalizado (VALUE) de un byte. En este caso, el valor crudo guarda tres temperaturas: la temperatura del disco en grados Celsius (29), más su mínimo (23) y máximo (33) durante la vida del disco. El formato de los datos crudos depende del fabricante y no está especificado por ningún estándard. Para reflejar la fiabilidad del disco, el firmware del disco convierte el valor crudo en un valor normalizado entre 1 y 253. Si este valor normalizado es menor o igual que el umbral (THRESH), se dice que el atributo ha fallado, tal y como indica la columna WHEN_FAILED. La columna está vacía porque ninguno de estos atributos ha fallado. También se muestra el menor (WORST) de los valores normalizados; siendo el menor de los valores alcanzado desde que se activó SMART en el disco. El tipo (TYPE) del atributo indica si el fallo del atributo indica que el dispositivo ha alcanzado el final de la vida para la que fue diseñado (Old_age) o si se trata de un fallo inminente (Pre-fail). Por ejemplo, el tiempo de  spin-up7 (ID #3) es un artributo prefallo. Si este (o cualquier otro atributo prefallo) falla, se esperará una avería del disco en menos de 24 horas.

Los nombres/significados de los atributos y la interpretación de sus valores crudos no están especificados en ningún estándard. A veces diferentes fabricantes utilizan el mismo ID de atributo para diferentes propósitos. Por esta razón, la interpretación de un atributo específico puede modificarse con la opción -v de smartctl; consulte la página de manual para los detalles. Por ejemplo, algunos discos utilizan el atributo 9 para almacenar el tiempo que el disco ha estado funcionando en minutos; la opción -v 9,minutes de smartctl corrige la interpretación del atributo. Si su modelo de disco se encuentra en la base de datos de smartmontools, estas opciones -v se fijan de forma automática.

La siguiente parte de la salida de smartctl -a (Listado 4) es un registro de los errores de disco. Este disco particular no ha tenido ningún error y el registro está vacío. Típicamente, uno se debe preocupar solo cuando los errores comienzan a aparecer en grandes cantidades. Un error ocasional transitorio que no es recurrente normalmente es benigno. La página web de smartmontools tiene varios ejemplos de salida de smartctl -a mostrando algunas entradas en el registro de errores ilustrativas. Los errores se encuentran timbrados con el tiempo de vida del disco en horas cuando ocurrió el error, y el comando ATA individual en el que sucedió el error está timbrado con el tiempo en milisegundos después del encendido del disco. Esto muestra si los errores son recientes o antiguos.

Listado 4. Salida de smartctl -l error /dev/hda

SMART Error Log Version: 1
No Errors Logged

La parte final de la salida de smartctl (Listado 5) es un informe de los tests de autodiagnóstico ejecutados en el disco. Se muestran dos tipos diferentes de pruebas de autodiagnóstico, la corta y la larga. (Los discos ATA-6/7 también pueden tener tests de transporte8 y selectivos.) Los tests se pueden ejecutar con los comandos smartctl -t short /dev/hda y smartctl -t long /dev/hda y no corrompen los datos del disco. Normalmente, un test corto sólo tarda un minuto o dos en completarse, y un test largo tarda aproximadamente una hora. Estos tests no interfieren con el funcionamiento normal del disco, así que los comandos se pueden utilizar sobre discos montados en un sistema en ejecución. En los nodos de nuestro cluster, se ejecuta un test largo mediante una tarea en el cron cada mañana de Domingo. Todas las entradas del Listado 5 corresponden a tests que se han completado sin errores; la columna LifeTime muestra la edad (en tiempo encendido) del disco cuando se ejecutó el test. Si un test encuentra un error,  la dirección LBA (Logical Block Address) muestra dónde ocurrió el error en el disco. La columna Remaining muestra el porcentaje remanente del test cuando se encontró el error. Si usted sospecha que algo malo le sucede al disco, le recomiendo de forma encarecida ejecutar un test largo para encontrar los problemas.

Listado 5. Salida de smartctl -l selftest /dev/hda

SMART Self-test log, version number 1
Num Test_Description Status Remaining LifeTime(hours)
LBA_of_first_error
# 1 Extended off-line Completed 00% 3525 -
# 2 Extended off-line Completed 00% 3357 -
# 3 Short off-line Completed 00% 3059 -

El comando smartctl -t offline puede utilizarse para ejecutar off-line tests. Los tests off-line no introducen entradas en el registro de tests. Están presentes desde el estándard SFF-8035i, y actualizan los valores de los atributos que no se actualizan de forma automática durante el funcionamiento normal del disco (vea la columna UPDATED en el Listado 3). Algunos discos soportan tests off-line automáticos, activado por smartctl -o on, que automáticamente ejecuta un test off-line cada pocas horas.

El estándard SMART proporciona un mecanismo para ejecutar tests de disco y para monitorizar aspectos del rendimiento del disco. Su principal deficiencia es que no proporciona un mecanismo directo para informar al SO o usuario cuando se encuentra un problema. De hecho, dado que con frecuencia el estado de los discos SMART no se monitoriza, muchos problemas suceden sin que se detecten hasta que conducen a un fallo catastrófico. Por supuesto, usted puede monitorizar los discos con regularidad utilizando la herramienta smartctl, tal y como he descrito, pero hacerlo así es un incordio.

El resto del paquete smartmontools es el demonio smartd que realiza un monitorizado regular para usted. Monitoriza los datos SMART del disco buscando indicios de problemas. Puede configurarse para enviar un e-mail a los usuarios o administradores de sistemas o para ejecutar scripts arbitrarios si se detectan problemas. Por defecto, cuando smartd se inicia, registra los discos del sistema. Luego comprueba su estado cada 30 minutos buscando atributos fallidos, estado de salud fallido o un creciente número de errores ATA o fallos en el registro de tests y registra esta información con SYSLOG en /var/log/messages por defecto.

Usted puede controlar y ajustar el comportamiento de smartd utilizando el fichero de configuración /etc/smartd.conf. Este fichero se lee cuando smartd arranca, antes de quedarse en segundo plano. Cada línea contiene directivas pertenecientes a un disco diferente. El fichero de configuración en los nodos de nuestro cluster tienen el siguiente aspecto:

# /etc/smartd.conf config file
/dev/hda -S on -o on -a -I 194 -m sense@phys.uwm.edu
/dev/hdc -S on -o on -a -I 194 -m sense@phys.uwm.edu

La primera columna indica el dispositivo a monitorizar. La opción -o on activa los tests off-line automáticos, y -S on activa el autoguardado automático de los atributos. La directiva -m está seguida de una dirección e-mail a la que se enviarán los mensajes de alarma, y la directiva -a ordena a smartd que monitorize todas las características SMART del disco. En esta configuración, smartd registra cambios en todos los valores normalizados de los atributos. La directiva -I 194 significa que se deben ignorar los cambios en el atributo #194, dado que las temperaturas del disco cambian con frecuencia, y es molesto tener todos los cambios registrados con regularidad.

Normalmente smartd se inicia con el mecanismo init normal de UNIX. Por ejemplo, en las distribuciones Red Hat, /etc/rc.d/init.d/smartd start y /etc/rc.d/init.d/smartd stop pueden utilizarse para encender y apagar el demonio.

Puede encontrarse más información sobre smartd y su fichero de configuración en la página de manual (man smartd), y pueden encontrarse resúmenes con los comandos smartd -D y smartd -h. Por ejemplo, la directiva de los tests -M envía un e-mail de prueba de alarma para confirmar que los errores de alarma se entregan de forma correcta. Otras directivas proporcionan flexibilidad adicional, como monitorizar cambios en los valores crudos de los atributos.

Qué debe hacer usted si un disco muestra indicios de problemas? Qué pasa si un test de autodiagnóstico falla en el disco o el estado de la salud SMART muestra un fallo? Comience sacando sus datos fuera del disco y a otro sistema tan pronto como sea posible. Segundo, ejecute algunos tests de autodiagnóstico extendidos y vea si el problema persiste en el mismo LBA. Si es el caso, probablemente algo malo le ocurre al disco. Si el disco tiene el estado de salud SMART fallido y está bajo garantía, el fabricante normalmente lo cambiará. Si el disco falla en los tests de autodiagnóstico, muchos fabricantes proporcionan programas especializados en la salud del disco, por ejemplo, PowerMax de Maxtor o Drive Fitness Test de IBM. Algunas veces estos programas realmente pueden reparar el disco al remapear los sectores dañados. Con frecuencia muestran un código de error especial que puede ser utilizado para obtener un disco de reemplazo.

Este artículo cubre cuestiones básicas de smartmontools. Para aprender más, lea las páginas de manual y la página web, y después escriba a la lista de correo de soporte si necesita más ayuda. Recuerde, smartmontools no es un substituto para las copias de seguridad de sus datos. SMART no puede predecir todos los fallos de disco, pero con frecuencia proporciona pistas de que algo no concuerda y ha ayudado a mantener muchos clusters de ordenadores funcionando con fiabilidad.

Varios desarrolladores están portando smartmontools a FreeBSD, Darwin y Solaris, y nosotros hemos añadido recientemente extensiones para permitir a smartmontools monitorizar y controlar los discos ATA conectados a controladoras RAID de terceros. Si quiere contribuir al desarrollo de smartmontools, escriba a la lista de correo de soporte. Estamos especialmente interesados en información sobre la interpretación y el significado de los atributos SMART y los valores crudos dependientes del fabricante.

Bruce Allen es un profesor de Física en la Universidad de Wisconsin - Milwaukee. Realiza investigación en ondas gravitacionales y el universo muy primitivo, y ha construido varios grandes clusters Linux para analizar datos.

 

Notas de traducción:

  1. 24/7 hace referencia a 24 horas al día durante 7 días a la semana, es decir siempre. Funcionando de manera ininterrumpida.
  2. El artículo original tiene fecha del 1 de enero de 2004
  3. read and seek
  4. raw: crudo o bruto, sin procesar. En este contexto se refiere a los valores de los atributos antes de normalizarse.
  5. En el original: Executive Summary Report
  6. En el original: fluid-drive bearing
  7. spin-up time: Tiempo que tarda el disco en alcanzar la velocidad de rotación adecuada para su funcionamiento
  8. Conveyance en el original