Detectando fallos de disco con S.M.A.R.T.

En un anterior artículo os mencioné que existía una tecnología llamada S.M.A.R.T. que sirve para detectar los fallos de los discos duros y poder actuar antes de que sea demasiado tarde. Os comenté que ya os hablaría en otro artículo de ella. Bien, pues ha llegado el momento 😉

Las siglas de S.M.A.R.T. significan Self Monitoring Analysis and Reporting Technology, y como su nombre indica, es una tecnología que sirve para analizar, monitorizar y obtener informes de los parámetros que influyen en la vida de los discos duros.

Para poder usar esta tecnología, ésta debe estar soportada por el disco duro (prácticamente todos los discos duros actuales, si no todos, la soportan) y también por la BIOS (lo que también suele suceder), donde tiene que estar habilitada.

Dado que es una tecnología que sirve para almacenar datos estadísticos de errores y uso del disco duro que os permitirán anticiparos a la pérdida de datos, no hay razón para no activarla. En algún foro leí una vez que la única podría ser que usárais algún tipo de disco flash de los primeros que no soportaran esta tecnología y, por tanto, al estar activada en BIOS, os diera problemas para arrancar (puesto que el disco no la soporta). En cualquier otro caso (que será el 99,99%) os recomiendo que la activéis.

Para consultar los datos que se van guardando sobre el estado del disco duro, existen muchas utilidades (tanto para Linux como para Mac y Windows). En mi caso, me voy centrar en la utilidad para Linux llamada smartmontools.

Para instalarla, ya sabéis (en debian y derivadas):

aptitude install smartmontools (*)

Esto os proporciona el comando smartctl, con el que podréis realizar varios tests y ver la información recogida por S.M.A.R.T. en vuestro disco duro. A continuación vamos a ver algún ejemplo.

smartctl -i /dev/sdx

donde /dev/sdx el disco duro que queréis chequear (/dev/sda, /dev/sdb…; si son IDE: /dev/hda, /dev/hdb…).

Este comando nos da distinta información del disco duro (número de serie, versión del firmware, si está habilitada o no la funcionalidad SMART…):

# smartctl -i /dev/sdb
smartctl 5.43 2012-06-30 r3573 [x86_64-linux-3.8.0-19-generic] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF INFORMATION SECTION ===
Device Model: ST9750420AS
Serial Number: 5WS3JZ6F
LU WWN Device Id: 5 000c50 04521203c
Firmware Version: 0002DEM1
User Capacity: 750.156.374.016 bytes [750 GB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
Device is: Not in smartctl database [for details use: -P showall]
ATA Version is: 8
ATA Standard is: ATA-8-ACS revision 4
Local Time is: Fri Nov 15 09:56:34 2013 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Otro ejemplo:

# smartctl -H /dev/sdb
smartctl 5.43 2012-06-30 r3573 [x86_64-linux-3.8.0-19-generic] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
Please note the following marginal Attributes:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
190 Airflow_Temperature_Cel 0x0022 067 035 045 Old_age Always In_the_past 33 (0 18 33 24 0)

Este comando muestra información sobre el estado de salud general del disco. Si pone PASSED, como en el ejemplo mostrado, el disco duro está Ok. Si mostrara algo como FAILING, entonces tenemos que pensar en hacer backup inmediatamente.

En concreto, os pongo el ejemplo de otro disco duro que tengo que me ha dado algún que otro problema últimamente:

# smartctl -H /dev/sdl
smartctl 6.2 2013-04-20 r3812 [x86_64-linux-3.11.0-13-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
Failed Attributes:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
 5 Reallocated_Sector_Ct 0x0033 001 001 036 Pre-fail Always FAILING_NOW 4095

Como véis, tiene problemas (y no pequeños). El problema es que están fallando muchos sectores (ha habido muchos realojamientos de sectores). Total, que me tengo que comprar otro.

Ahora probemos este comando:

smartctl -A /dev/sdb

Con este comando se muestran diferentes atributos SMART del disco duro (en concreto, se muestran 30):

smartctl_a

En este caso ponemos una captura de pantalla para que se vean más claros los datos del ejemplo.

Aspectos interesantes de los datos aportados por el comando anterior:

  • RAW_VALUE es el valor crudo, es decir, el valor real. Por ejemplo, el número de horas que lleva el disco encendido.
  • VALUE. El valor RAW_VALUE es convertido a un número entre 1 y 253 por un algoritmo ejecutado en el propio firmware del disco. Aquí, los números bajos son malos y los altos son buenos. Si un valor es igual o está por debajo del umbral (columna THRES, de THREShold), diremos que el disco ha fallado y aparecerá en la columna WHEN_FAILED. Si esta columna aparece vacía es que todo va bien (las cosas no están fallando). Si hay valores en sus filas, entonces debemos empezar a pensar en hacer backup y cambiar de disco.
  • TYPE. Vemos dos posibilidades: Pre-fail y Old-age. Quiere decir que si observamos un fallo en algún atributo de tipo Pre-fail, se espera un fallo inminente del disco. Si falla en alguno de Old-age, es que se ha alcanzado el final de la vida del disco.

Además de smartctl se incluye, en el paquete smartmontools, el demonio smartd. Éste se encarga de realizar monitorización periódica de los discos del equipo y tomar las acciones que se le indiquen en su fichero de configuración, como enviar un mail al administrador de sistemas, por ejemplo.

Para más información al respecto podéis visitar la wiki oficial del proyecto aquí.

 

(*) Yo siempre uso aptitude, pero podéis usar igualmente apt-get. También podéis usar la utilidad de vuestra distro para instalar software (Synaptic, Muon…). Si queréis usar aptitude pero no está instalada (en las últimas versiones de Ubuntu/Kubuntu/… ocurre), haced esto:

apt-get install aptitude