Inestabilidad en el sistema, reinicios inesperados… pueden deberse a problemas de software y también de hardware. Para estar al tanto de estos últimos tenemos dos utilidades que no serán de utilidad: mcelog y rasdaemon.
Mcelog
La utilidad mcelog decodifica eventos MCE (Machine Check Exception) generados cuando se produce un error de hardware.
Para instalarla:
# Debian y derivadas apt-get install mcelog # RHEL y derivadas yum install mcelog
No todas las CPUs están soportadas por la utilidad. Para comprobar si la nuestra lo está ejecutamos mcelog con la opción --is-cpu-supported
que producirá una salida de 0 en caso positivo:
jota@jota-portatil:/etc/mcelog$ mcelog --is-cpu-supported jota@jota-portatil:/etc/mcelog$ echo $? 0
El servicio se gestiona con systemctl:
jota@jota-portatil:/var/log$ systemctl status mcelog.service ● mcelog.service - LSB: Machine Check Exceptions (MCE) collector & decoder Loaded: loaded (/etc/init.d/mcelog; bad; vendor preset: enabled) Active: active (running) since dom 2018-06-10 14:27:27 CEST; 20min ago Docs: man:systemd-sysv-generator(8) CGroup: /system.slice/mcelog.service └─1518 /usr/sbin/mcelog --daemon jun 10 14:27:27 jota-portatil systemd[1]: Starting LSB: Machine Check Exceptions (MCE) collector & decoder... jun 10 14:27:27 jota-portatil mcelog[1513]: failed to prefill DIMM database from DMI data jun 10 14:27:27 jota-portatil mcelog[1352]: Starting Machine Check Exceptions decoder: mcelog. jun 10 14:27:27 jota-portatil systemd[1]: Started LSB: Machine Check Exceptions (MCE) collector & decoder.
En /etc/mcelog tenemos el fichero de configuración principal así como los ficheros de trigger que señalan la acción a realizar por el demonio de mcelog en caso de detectar un error de hardware:
jota@jota-portatil:/etc/mcelog$ cat bus-error-trigger #!/bin/sh # This shell script can be executed by mcelog in daemon mode when a sockets # receives Bus and Interconnect errors # # environment: # MESSAGE Human readable consolidated error message # LOCATION Consolidated location as a single string # SOCKETID Socket ID of CPU that includes the memory controller with the DIMM # LEVEL Interconnect level # PARTICIPATION Processor Participation (Originator, Responder or Observer) # REQUEST Request type (read, write, prefetch, etc.) # ORIGIN Memory or IO # TIMEOUT The request timed out or not # # note: will run as mcelog configured user # this can be changed in mcelog.conf logger -s -p daemon.err -t mcelog "$MESSAGE" logger -s -p daemon.err -t mcelog "Location: $LOCATION" [ -x ./bus-error-trigger.local ] && . ./bus-error-trigger.local exit 0
Mcelog sigue siendo una herramienta disponible en repositorios que cumple su cometido perfectamente -siempre y cuando nuestra CPU sea compatible- pero que a día de hoy ha sido adelantada por rasdaemon. De hecho, en RHEL 7 el paquete mcelog se muestra como deprecated (obsoleto)
Más info en la página de la utilidad.
Rasdaemon
La utilidad que actualmente se encuentra en desarrollo activo y recomendada para relevar a mcelog en sus tareas de supervisión de errores de hardware. Monitoriza eventos RAS (Reliability, Availability and Serviceability) a nivel de CPU, I/O, almacenamiento…
Para instalarla:
# Debian y derivadas apt-get install rasdaemon # RHEL y derivadas yum install rasdaemon
También la administraremos con systemctl. Tendremos un demonio rasdaemon encargado de escribir en syslog los errores de hardware detectados por el kernel y otro servicio ras-mc-ctl centrado en tareas de detección y corrección de errores en memoria:
jota@jota-portatil:/etc/ras$ systemctl status rasdaemon.service ● rasdaemon.service - RAS daemon to log the RAS events Loaded: loaded (/lib/systemd/system/rasdaemon.service; enabled; vendor preset: enabled) Active: active (running) since lun 2018-06-11 18:08:57 CEST; 2h 16min ago Process: 1090 ExecStartPost=/usr/sbin/rasdaemon --enable (code=exited, status=0/SUCCESS) Main PID: 1088 (rasdaemon) CGroup: /system.slice/rasdaemon.service └─1088 /usr/sbin/rasdaemon -f -r jun 11 18:08:57 jota-portatil rasdaemon[1088]: ras:aer_event event enabled jun 11 18:08:57 jota-portatil rasdaemon[1088]: Enabled event ras:aer_event jun 11 18:08:57 jota-portatil rasdaemon[1088]: mce:mce_record event enabled jun 11 18:08:57 jota-portatil rasdaemon[1088]: Enabled event mce:mce_record jun 11 18:08:57 jota-portatil rasdaemon[1088]: ras:extlog_mem_event event enabled jun 11 18:08:57 jota-portatil rasdaemon[1088]: Enabled event ras:extlog_mem_event jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: Recording mc_event events jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: Recording aer_event events jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: Recording extlog_event events jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: Recording mce_record events
Servicio ras-mc-ctl:
jota@jota-portatil:/etc/ras$ systemctl status ras-mc-ctl.service ● ras-mc-ctl.service - Initialize EDAC v3.0.0 Drivers For Machine Hardware Loaded: loaded (/lib/systemd/system/ras-mc-ctl.service; enabled; vendor preset: enabled) Active: active (exited) since lun 2018-06-11 18:08:57 CEST; 2h 28min ago Process: 1108 ExecStart=/usr/sbin/ras-mc-ctl --register-labels (code=exited, status=0/SUCCESS) Main PID: 1108 (code=exited, status=0/SUCCESS) CGroup: /system.slice/ras-mc-ctl.service jun 11 18:08:57 jota-portatil systemd[1]: Starting Initialize EDAC v3.0.0 Drivers For Machine Hardware... jun 11 18:08:57 jota-portatil ras-mc-ctl[1108]: ras-mc-ctl: Error: No dimm labels for ASUSTeK COMPUTER INC. model X555LDB jun 11 18:08:57 jota-portatil systemd[1]: Started Initialize EDAC v3.0.0 Drivers For Machine Hardware.
Toda la actividad de rasdaemon puede observarse en el log de sistema /var/log/syslog
Jun 11 18:08:57 jota-portatil rasdaemon: ras:mc_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon: ras:aer_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon[1090]: rasdaemon: ras:mc_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon[1090]: rasdaemon: ras:aer_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon[1090]: rasdaemon: mce:mce_record event enabled Jun 11 18:08:57 jota-portatil rasdaemon[1090]: rasdaemon: ras:extlog_mem_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon: mce:mce_record event enabled Jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: ras:mc_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: Enabled event ras:mc_event Jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: ras:aer_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: Enabled event ras:aer_event Jun 11 18:08:57 jota-portatil rasdaemon: ras:extlog_mem_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: mce:mce_record event enabled Jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: Enabled event mce:mce_record Jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: ras:extlog_mem_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: Enabled event ras:extlog_mem_event Jun 11 18:08:57 jota-portatil rasdaemon[1088]: rasdaemon: Listening to events for cpus 0 to 3 Jun 11 18:08:57 jota-portatil rasdaemon: ras:mc_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon: Enabled event ras:mc_event Jun 11 18:08:57 jota-portatil rasdaemon: ras:aer_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon: Enabled event ras:aer_event Jun 11 18:08:57 jota-portatil rasdaemon: mce:mce_record event enabled Jun 11 18:08:57 jota-portatil rasdaemon: Enabled event mce:mce_record Jun 11 18:08:57 jota-portatil rasdaemon: ras:extlog_mem_event event enabled Jun 11 18:08:57 jota-portatil rasdaemon: Enabled event ras:extlog_mem_event
Tenéis más info en la web oficial.