martes, 14 de octubre de 2008

SMART

Este artículo es principalmente una traducción del que me han publicado en Debian Package of the Day y que llegó luego a DebianTimes.




Uno de los paquetes que instalo manualmente en toda nueva instalación es smartmontools. Tengo cierta experiencia administrando ordenadores y redes, y es un hecho que los piratas informáticos y los fallos de los programas (bugs) no son la mayor causa de problemas en instalaciones pequeñas y medianas. Lo es el hardware.


Luego tenemos aparatos que pueden fallar, y Murphy dice que si algo puede fallar, fallará. El asunto no es evitar los fallos físicos, lo que es imposible, sino detectarlos rápidamente o incluso prevenirlos.


Particularmente para los discos duros, la herramienta encargada es smartctl del paquete smartmontools. Los discos IDE (si no son de la era de los dinosaurios) tienen una herramienta integrada de autoanálisis llamada SMART que significa“Self-Monitoring, Analysis and Reporting Technology” (Tecnología de Auto-Monitorización, Análisis e Informe). Los discos SCSI modernos también la tienen si son SCSI 3 o más nuevos. Lo que ocurre es que en la circuitería del disco hay rutinas para controlar parámetros de salud del disco: tiempo de comienzo de rotación (spin-up time), número de fallos de lectura, temperatura, tiempo de vida… Y todos esos parámetros no son solamente controlados por el propio disco, sino que tienen asignados límites de seguridad, y tanto los parámetros como los límites pueden ser obtenidos por programas que accedan a los discos utilizando las instrucciones I/O apropiadas.


Y ese programa es smartctl, una pieza del paquete Debian smartmontools. Por supuesto, como accede al disco directamente, hay que ser superusuario (root) para usar estas órdenes.


smartctl puede preguntarle al disco por su identificación SMART:



# smartctl -i /dev/sda
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===
Model Family: Fujitsu MHV series
Device Model: FUJITSU MHV2060BH
Serial Number: NW10T652991F
Firmware Version: 00850028
User Capacity: 60,011,642,880 bytes
Device is: In smartctl database [for details use: -P show]
ATA Version is: 7
ATA Standard is: ATA/ATAPI-7 T13 1532D revision 4a
Local Time is: Mon May 12 02:39:31 2008 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Más interesante, smartctl puede preguntarle al disco por los valores de sus parámetros:



# smartctl -A /dev/sda
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 100 100 046 Pre-fail Always - 124253
2 Throughput_Performance 0x0004 100 100 000 Old_age Offline - 18284544
3 Spin_Up_Time 0x0003 100 100 025 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 099 099 000 Old_age Always - 1199
5 Reallocated_Sector_Ct 0x0033 100 100 024 Pre-fail Always - 8589934592000
7 Seek_Error_Rate 0x000e 100 087 000 Old_age Always - 1761
8 Seek_Time_Performance 0x0004 100 100 000 Old_age Offline - 0
9 Power_On_Seconds 0x0032 079 079 000 Old_age Always - 10866h+57m+47s
10 Spin_Retry_Count 0x0012 100 100 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 1199
192 Power-Off_Retract_Count 0x0032 099 099 000 Old_age Always - 283
193 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 6953
194 Temperature_Celsius 0x0022 100 100 000 Old_age Always - 45 (Lifetime Min/Max 14/58)
195 Hardware_ECC_Recovered 0x001a 100 100 000 Old_age Always - 62
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 459276288
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x000e 100 082 000 Old_age Always - 22371
203 Run_Out_Cancel 0x0002 100 100 000 Old_age Always - 1533257648465
240 Head_Flying_Hours 0x003e 200 200 000 Old_age Always - 0

Como se puede ver, algunos atributos están marcados como “Pre-fail”. Si cualquiera de estos atributos traspasa su límite, el disco está para fallar en cuestión de horas, quizá minutos.


Aunque hay más opciones para smartctl, las últimas que voy a comentar son -a y -t.


smartctl -t lanza una prueba automática de todo el disco. Necesita un parámetro indicando el tipo de prueba, y en el caso más largo puede durar varias decenas de minutos y comprobará el rendimiento eléctrico y mecánico del disco así como el rendimiento de lectura de las cabezas por toda la superficie. smartctl -a, por su parte, muestra toda la información disponible sobre el disco, incluidos los resultados de las pruebas automáticas. Como estas pruebas duran minutos, o decenas de minutos, no podemos observarlas. Todo lo que obtenemos al lanzar una de estas pruebas es:



# smartctl -t long /dev/sda
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in
off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in
off-line mode" successful.
Testing has begun.
Please wait 41 minutes for test to complete.
Test will complete after Mon May 12 05:44:03 2008

Use smartctl -X to abort test.

Aquí se nos informa de que (quizá) tengamos un rendimiento ligeramente menor del disco durante los próximos 41 minutos, porque la prueba ha comenzado. Se produce completamente en segundo plano, o sería mejor decir “fuera de plano”, ya que no ocurre bajo el control del Sistema Operativo en absoluto: todo ocurre internamente al disco, y lo único que vamos a obtener es el resultado.


smartctl -a, por su parte, muestra una enorme cantidad de información SMART sobre el disco: prácticamente toda la información SMART disponible. Normalmente es mejor utilizar una opción específica, como se puede ver en la página de manual (man).


Finalmente, quiero comentar que hay un demonio en el paquete smartmontools, llamado smartd, que se encarga de realizar las pruebas automáticas por uno. Funciona ejecutando smartctl de forma periódica (típicamente cada 30 minutos) y registrando todos los errores y los cambios de los valores de los parámetros en el registro del sistema (syslog). La configuración por defecto en Debian además enviará un mensaje al superusuario con cualquier problema detectado. No voy a explicarlo aquí porque quiero que se lean la documentación, que es concisa y clara, pero recuerden que para usarlo deben activarlo en /etc/default/smartmontools.


El paquete smartmontools ha estado disponible en Debian y Ubuntu desde hace mucho tiempo.



Hay quien ha preguntado por qué en los ejemplos todos los valores aparecen por encima de los límites. Es lo normal: los valores normalizados de los parámetros comienzan típicamente en 100 o 200, y a medida que el disco sufre van descendiendo. El problema lo tenemos cuando un parámetro desciende por debajo de su límite, no cuando está por encima. Aunque también hay que estar atento a las bajadas significativas de los parámetros aunque no leguen a los límites: son signos de que algo malo está pasando.

Como nota, los discos de Seagate tienen la costumbre de poner el parámetro de temperatura en su valor real, lo que lo convierte en uno de los pocos casos en los que un parámetro empeora cuando crece.