Recientemente mi Pi me está dando problemas (se cuelga) y ante la posibilidad de tener algún error de lectura o escritura con el disco duro he buscado una utilidad que testee los discos duros y verificar su estado. La utilidad se llama smartctl
Comando para renovar la lista de paquetes del sistema operativo
Lo primero es realizar una renovación de los paquetes que contienen los repositorios, luego he actualizado el kernel y por último el firmware de la pi.
Primero actualizamos las fuentes de datos con el comando:
sudo apt-get update
Luego, actualizamos los programas instalados.
Comando para actualizar los programas
El archi-conocido
sudo apt-get upgrade
Nos actualiza los programas que tenemos instalado en nuestro sistema.
Luego he actualizado el kernel
Comando para actualizar el kernel de linux en la Raspberry Pi
sudo rpi-update
Y por último el firmware de la Pi.
Comando para actualizar el firmware de la Raspberry pi
Con el siguiente comando
rpi-eeprom-update -d -a
Actualizaremos el firmware de nuestra Raspi.
A partir de aquí instalaremos la utilidad smartctl, que está en el paquete smartmontools
Utilidad de comandos para verificar el estado de un disco duro en Linux: Smartmontools.
La herramienta se llama smartmontools. Para ello lo primero es instalarla, si es que no la tenemos ya en nuestro sistema. Para ello utilizaremos el comando
Este paquete dispone de dos programas diferentes:
- smartctl: es el programa por línea de comandos que nos permite verificar los discos duros y unidades SSD bajo demanda, o podemos programar su funcionamiento a través del típico cron en el sistema operativo.
- smartd: es un demonio o proceso que verifica que los discos duros o SSD en un intervalo específico no ha tenido ningún fallo. Es capaz de registrar cualquier tipo de aviso o error de los discos al syslog principal del servidor, también permite enviar estos mismos avisos y errores por email al administrador para que compruebe que todo está correcto.
El paquete smartmontools se encarga de monitorizar los discos duros y unidades SSD, independientemente de si utilizan interfaces SATA, SCSI, SAS o NVME, es compatible con cualquier tipo de interfaz de datos. Por supuesto, este programa es completamente gratuito.
Instalación
La instalación de este programa, si es que no está instalado de manera predeterminada en tu distribución de Linux, es utilizando el gestor de paquetes de tu distribución. Por ejemplo, en sistemas operativos Debian con apt sería de la siguiente forma:
sudo apt install smartmontools
Dependiendo del gestor de paquetes de tu distribución, tendrás que usar un comando u otro, lo importante es que este paquete está disponible para todas las distribuciones basadas en Unix y también en Linux, por lo que también podrías instalarlo en FreeBSD sin problemas.
Utilización de smartctl
Para poder utilizar este programa y comprobar la salud de nuestro disco duro, lo primero que debemos hacer es saber cuántos discos duros tenemos, y cuál es la ruta para examinar esos discos duros o SSD en cuestión. Para poder conocer dónde están los discos, debemos ejecutar el siguiente comando:
df -h
También podríamos hacer uso de fdisk para sacar el listado de discos que tenemos en nuestro servidor:
sudo fdisk -l
Estos comandos nos mostrará un listado de las unidades y también de las particiones. Este programa tenemos que utilizarlo a nivel de disco duro o SSD, no a nivel de partición. Generalmente en sistemas Linux encontraremos los discos en la ruta /dev/sdX.
Una vez que sepamos qué unidad vamos a analizar para comprobar su salud a través de SMART, debemos saber que existen un total de dos pruebas diferentes que podemos realizar:
Prueba corta: esta prueba es la más utilizada para detectar problemas en el disco. Al realizar esta prueba nos mostrará los errores y avisos más importantes, sin necesidad de analizar todo el disco en detalle. Podemos programar esta prueba corta a través de cron para que sea semanal, de esta forma, una vez cada semana realizará este análisis y nos avisará si ha detectado algún error. Es recomendable hacer esta prueba en un horario donde haya poco o ningún uso, no es recomendable hacerlo en horario de trabajo, mejor de madrugada.
Prueba larga: esta prueba puede durar bastante tiempo, dependiendo del disco y su capacidad. Al realizar esta prueba tan completa, nos mostrará todos los avisos o errores que encuentre en todo el disco. Podemos programar esta prueba larga con cron para que se haga mensual, es decir, una vez cada mes realizaremos esta prueba para comprobar la salud del disco. Es recomendable hacer esta prueba en un horario donde apenas haya uso del disco, por ejemplo, de madrugada, porque de lo contrario el rendimiento en lectura y escritura así como en latencia de acceso a los datos aumentarán considerablemente.
Una vez que ya sabemos los dos tipos de exámenes que podemos usar, lo primero que debemos saber es si el disco duro o SSD tiene activado SMART:
sudo smartctl -i /dev/sda
En el caso de que el disco soporte SMART pero no esté activado, lo podemos activar ejecutando la siguiente orden:
sudo smartctl -s on /dev/sda
Para ver todos los atributos de SMART del fabricante del disco en cuestión, podemos ejecutar la siguiente orden:
sudo smartctl -a /dev/sda
Para realizar un test corto, en mi disco duro SSD de 480GB tarda unos 2 minutos, ejecutamos lo siguiente:
sudo smartctl -t short /dev/sda
Para realizar un test largo, en mi disco tarda unos 10 minutos, ejecutamos lo siguiente:
sudo smartctl -t long /dev/sda
Una vez que hayamos realizado cualquiera de los dos, utilizaremos el siguiente comando para visualizar todos los resultados:
sudo smartctl -H /dev/sda
Interfaz gráfica para manejar startctl
También podemos utilizar una utilidad que nos permite manejar el programa de manera gráfica. Dicha utilidad se llama gsmartcontrol. La instalaremos con el comando:
sudo apt-get install gsmartcontrol
La instalación nos creará un acceso en el menú de herramientas de sistema desde el que poder manejarlo.
El programa funciona pero al intentar la opción del menú Options->Update datadrive base , me daba el error "could not find terminal xterm"
Para arreglarlo he copiado el fichero lxterminal de la carpeta /usr/bin/ con el nombre xterm
sudo cp /usr/bin/lxterminal /usr/bin/xterm