Los discos duros modernos (y no tan modernos) vienen equipados con una tecnología conocida como S.M.A.R.T., el cual le permite al disco monitorear de manera contínua su propio estado de “salud” y alertar al usuario si es detectada alguna anormalidad, para que luego pueda ser corregida.
ADVERTENCIA: antes de continuar, sería recomendable hacer una copia de respaldo de todos sus datos importantes a pesar de todo lo que diga el S.M.A.R.T. Éste sistema es muy confiable pero no obstante, ésta información en alguno de los casos podría ser imprecisa, de hecho, los discos duro se dañan de manera inesperada, inclusive si el S.M.A.R.T te ha dicho que algo anda mal, posiblemente no tengas tiempo para respaldar tus datos o moverlos a un lugar más seguro.
¿Cómo instalar SMARTMONTOOLS?
Lo primero que debemos hacer, preferiblemente antes de instalar el SMT es chequear si nuestro disco duro soporta éste tipo de tecnología, lo cual puedes hacer visitando la página del fabricante de tu disco. De todas formas, si lo compraste después del año 1992, lo más seguro es que posea ésta tecnología.
Lo segundo, y no menos importante, es activar o asegurarte que en el BIOS de la tarjeta madre este activada ésta función. Lo puedes conseguir ya que luce algo como:
S.M.A.R.T for Hard Disk: Enable
Algunos BIOS no tienen ésta opción y reportan el S.M.A.R.T como inactivo, pero no te preocupes que el smartcl, uno de los dos programas de utilidad que tiene el Smartmontools, puede activarlo. Una vez que estemos seguros de todo ésto podemos proceder a instalar el Smartmontools, el cual, en la distribución que uso, Debian, es tan fácil como escribir en una terminal:
$ aptitude install smartmontools
Y de esa manera ya queda automágicamente instalado el paquete el sistema. Si quieres verificar si ya lo tienes instalado, entonces tendrías que escribir en una terminal lo siguiente:
$ aptitude show smartmontools
Y verificar que el atributo Estado se corresponda con Instalado. Una vez hecho ésto procedemos a verificar si nuestro disco soporta S.M.A.R.T con la siguiente línea de comandos:
$ smartctl -i /dev/hda
En caso que tu disco sea SATA tendrías que escribir la siguiente línea:
$ smartctl -i -d ata /dev/sda
La información se vería algo así:
=== START OF INFORMATION SECTION ===
Model Family: Western Digital Caviar family
Device Model: WDC WD1200BB-00RDA0
Serial Number: WD-WMANM1700779
Firmware Version: 20.00K20
User Capacity: 120,034,123,776 bytes
Device is: In smartctl database [for details use: -P show]
ATA Version is: 7
ATA Standard is: Exact ATA specification draft version not indicated
Local Time is: Sun Sep 24 22:27:09 2006 VET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Si tu disco es SATA pero tiene el soporte S.M.A.R.T desactivado, entonces deberás usar la siguiente línea de comandos para activarlo:
$ smartctl -s on -d ata /dev/sda
Aprendiendo a usar SMT
Estado de “salud” de nuestro disco duro
Para leer la información que SMT ha recopilado acerca de nuestro disco, debemos escribir la siguiente linea de comandos:
$ smartctl -H /dev/hda
Para discos SATA no es suficiente con sustituir hda con sda, sino que debemos añadir las opciones extras que usamos anteriormente para obtener la información del disco. La línea de comandos entonces quedaría así:
$ smartctl -d ata -H /dev/sda
Si lees PASSED al final de la información, no tienes que preocuparte. Pero si lees FAILED deberías empezar a hacer respaldo de tus datos inmediatamente, ya que ésto quiere decir que tu disco ha presentado fallas anteriormente o es muy probable que falle dentro de un lapso de aproximadamente 24 horas.
Bitácora de errores de SMT
Para chequear la bitácora de errores de SMT debemos escribir la siguiente línea de comandos:
$ smartctl -l error /dev/hda
De manera análoga al caso anterior, añadimos los comandos extras si nuestro disco es SATA. La línea de comandos quedaría así:
$ smartctl -d ata -l error /dev/sda
Si leemos al final de la información No errors logged todo anda bien. Si hay varios errores pero éstos no son muy recientes, deberías empezar a preocuparte e ir comprando los discos para el respaldo. Pero si en vez de ésto hay muchos errores y una buena cantidad son recientes entonces deberías empezar a hacer respaldo de tus datos, inclusive antes de terminar de leer ésta línea. Apurate!
A pesar que smartctl nos da una información muy valiosa acerca de nuestros discos, el tan solo revisar ésta no es suficiente, realmente se deben hacer algunas pruebas específicas para corroborar los errores que conseguimos en la información anterior, dichas pruebas las menciono a continuación.
Pruebas con SMT
Las pruebas que se van a realizar a continuación no interfieren con el funcionamiento normal del disco y por lo tanto pueden ser realizadas en cualquier momento. Aquí solo describiré como ejecutarlas y entender los errores. Si quieres saber más te recomiendo que visites ésta pagina o que leas las páginas del manual.
Lo primero sería saber cuáles pruebas soporta tu disco, lo cual logramos mediante la siguiente línea de comandos:
$ smartctl -c /dev/hda
De ésta manera puedes saber cuáles pruebas soporta tu disco y también cuanto tiempo aproximadamente puede durar cada una. Bien, ahora ejecutemos Immediate Offline Test ó Prueba Inmediata Desconetado (si está soportada, por supuesto), con la siguiente línea de comandos:
$ smartctl -t offline /dev/hda
Como ya sabemos, los resultados de ésta prueba no son inmediatos, de hecho el resultado de ésta linea de comandos te dirá que la prueba ha comenzado, el tiempo que aproximadamente va a demorar la prueba en terminar con una hora aproximada para dicha finalización, y al final te dice la línea de comandos para abortar la operación. En uno de mis discos, un IDE de 120Gb, demoró 1 hora, para que tengan una idea. Por los momentos sólo te queda esperar por los resultados. Ahora te preguntarás ¿Cómo puedo saber los resultados?, pues tan sencillo como ejecutar la línea de comandos para leer la bitácora del SMT y seguir las recomendaciones.
Ahora vamos a ejecutar Short self-test routine ó Extended self-test routine, Rutina corta de autoprueba y Rutina extendida de autoprueba, respectivamente (de nuevo, si están soportadas). Éstas pruebas son similares, sólo que la segunda, como su nombre lo indica, es más rigurosa que la primera. Una vez más ésto lo logramos con los siguientes comandos:
$ smartctl -t short /dev/hda
$ smartctl -t long /dev/hda
Luego vamos a chequear el Self Test Error Log ó Bitácora de errores de autopruebas:
$ smartctl -l selftest /dev/hda
Luego ejecutamos Conveyance Self Test ó Autoprueba de Transporte:
$ smartctl -t conveyance /dev/hda
Y por último chequeamos Self Test Error Log de nuevo.
Algo que tengo que resaltar es que el SMT tiene dos bitácoras, una de las cuales es la Bitácora de errores y la otra es la Bitácora de Errores de Autopruebas.
¿Cómo monitorear el disco duro automáticamente?
Para lograr ésto tendrás que configurar el demonio smartd para que sea cargado cuando se inicia el sistema. A continuación un pequeño HOWTO.
ADVERTENCIA: el siguiente HOWTO es para monitorear un disco IDE, programar todas las pruebas cada viernes de la semana, de 11:00 a.m a 2:00 p.m, y luego ejecutar un script de Bash si algún error es detectado. Éste script escribirá un reporte bien detallado y luego apagará el equipo para su propia protección.
El archivo de configuración de smartd se encuentra en /etc/smartd.conf, si éste no existe,
el cual sería un caso poco común, deberás crearlo en tu editor de elección.
...
#DEVICESCAN
...
/dev/hda \
-H \
-l error -l selftest \
-s (O/../../5/11|L/../../5/13|C/../../5/15) \
-m ThisIsNotUsed -M exec /usr/local/bin/smartd.sh
El script en Bash también puedes hacerlo en un editor de tu elección, y tendrá la siguiente forma:
#!/bin/bash
LOGFILE="/var/log/smartd.log"
echo -e "$(date)\n$SMARTD_MESSAGE\n" >> "$LOGFILE"
shutdown -h now
Luego de crear el script deberás hacerlo ejecutable cambiando sus atributos con la siguiente línea de comandos:
$ chmod +x /usr/local/bin/smartd.sh
Para probar todo, puedes agregar al final de tu /etc/smartd.conf la línea
-M test
y luego ejecutar el demonio. Nota que ésto apagará tu equipo, hayan errores o no. Luego si algo sale mal deberás chequear la bitácora del sistema en /var/log/messages con:
$ tail /var/log/messages
Y así corregir el problema. Ahora tendrás que quitar la línea
-M test
y guardar los cambios. Por último debes hacer que smartd sea cargado al momento del arranque, lo cual lo logras con la siguiente línea:
$ rc-update add smartd default
Algunos enlaces de interés:
- S.M.A.R.T en la Wikipedia
- Página Oficial de smartmontools
- Ejemplos de salidas del SMT
- Atributos usados para recuperar el estado físico/lógico de una unidad y mostrar su significado de una forma más entendible para un usuario final
Nota: Ésta artículo está basado en un HOWTO del Wiki de Gentoo
una pregunta. cuando comentas al principio del howto sobre hacer una copia de seguridad de todo el disco duro.. implica que por instalar el programa y usarlo,. te puedas cargar el disco duro? o es más bien por si reporta algun error, no nos pille con las manos en la masa¿ supongo que será más bien por lo segundo.. pero bueno nunca esta de más preguntar! un saludo
Hola darkomen,
Efectivamente, como dices, es más por lo segundo, ya que como sabrás, el instalar el programa no le hace nada a nuestro sistema a menos que se lo indiquemos por medio del script qeu está al final. Gracias por preguntar.
muy util…
saludos
Hola!
Al ejecutar el comando:
smartctl -d ata -l error /dev/sda
Se muestra el siguiente log:
smartctl version 5.34 [i686-pc-linux-gnu] Copyright (C) 2002-5 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
noel@Noel-Ubuntu-Amd64:~$ sudo smartctl -d ata -l error /dev/sda
smartctl version 5.34 [i686-pc-linux-gnu] Copyright (C) 2002-5 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF READ SMART DATA SECTION ===
SMART Error Log Version: 1
ATA Error Count: 2
CR = Command Register [HEX]
FR = Features Register [HEX]
SC = Sector Count Register [HEX]
SN = Sector Number Register [HEX]
CL = Cylinder Low Register [HEX]
CH = Cylinder High Register [HEX]
DH = Device/Head Register [HEX]
DC = Device Command Register [HEX]
ER = Error register [HEX]
ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It “wraps” after 49.710 days.
Error 2 occurred at disk power-on lifetime: 716 hours (29 days 20 hours)
When the command that caused the error occurred, the device was active or idle .
After command completion occurred, registers were:
ER ST SC SN CL CH DH
— – — – — – –
84 51 00 96 67 a5 46 Error: ABRT at LBA = 0×06a56796 = 111503254
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
— – — – — – — – —————- ——————–
c4 ff 01 00 00 00 40 00 07:53:33.296 READ MULTIPLE
00 00 08 00 00 00 00 04 07:53:33.279 NOP [Abort queued commands]
c5 ff 08 5f 67 a5 46 00 07:53:33.279 WRITE MULTIPLE
c5 ff 08 5f 67 a5 46 00 07:53:33.279 WRITE MULTIPLE
c5 ff 08 57 67 a5 46 00 07:53:33.279 WRITE MULTIPLE
Error 1 occurred at disk power-on lifetime: 708 hours (29 days 12 hours)
When the command that caused the error occurred, the device was active or idle .
After command completion occurred, registers were:
ER ST SC SN CL CH DH
— – — – — – –
84 51 01 36 00 5e 40 Error: ABRT at LBA = 0×005e0036 = 6160438
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
— – — – — – — – —————- ——————–
c4 ff 01 00 00 00 40 00 00:35:36.110 READ MULTIPLE
00 00 08 00 00 00 00 04 00:35:36.110 NOP [Abort queued commands]
c5 ff 08 67 f4 23 40 00 00:35:36.110 WRITE MULTIPLE
c5 ff 08 67 f4 23 40 00 00:35:36.109 WRITE MULTIPLE
c4 ff 01 bf a1 49 4d 00 00:35:36.109 READ MULTIPLE
¿Esta en la últimas verdad?
Un saludo!
Muy util, gracias por darle tu tiempo a este howto
Excelente tutorial, estoy gratamente sorprendido por la forma como explicas las cosas, claras, sencillas y con clase. Gracias por la informacion, me sera de mucha ayuda.