Marcio Cunha

¿Servidor ruidoso? Cómo crear perfiles PWM personalizados en Linux

Aprende a eliminar el molesto ruido de los ventiladores en servidores y homelabs bajo Linux configurando curvas PWM personalizadas de forma sencilla.

Marcio Cunha•7 min
También disponible en:EnglishPortuguês
Resumen
  • Los controles predeterminados de ventiladores en placas base suelen fallar al equilibrar silencio y refrigeración adecuada en servidores reutilizados.
  • El subsistema de monitoreo de hardware del kernel de Linux ofrece acceso directo a pines PWM y sensores térmicos mediante sysfs.
  • La herramienta lm-sensors identifica chips de monitoreo y mapea archivos específicos de control de velocidad para cada ventilador.
  • Scripts simples de shell combinados con bucles de monitoreo ajustan dinámicamente las revoluciones según la temperatura real de la CPU.
  • Un perfil térmico bien calibrado reduce drásticamente el ruido ambiental en espacios residenciales sin comprometer la integridad de los componentes.

¿Por qué los servidores y homelabs hacen tanto ruido?

Cualquier persona que decida montar un servidor casero o un homelab utilizando hardware reutilizado de centros de datos nota rápidamente un efecto secundario inevitable: el ruido ensordecedor. A diferencia de un ordenador de oficina o un portátil moderno que ajustan la velocidad de los ventiladores de forma silenciosa y gradual, los servidores antiguos fueron diseñados para operar en entornos industriales aislados donde la prioridad absoluta es la disipación térmica a cualquier costo. En la práctica, esto significa que pequeños ventiladores de alta velocidad giran constantemente al máximo, generando un zumbido metálico persistente.

El problema central es que las placas base de servidores y algunas placas de escritorio robustas carecen de perfiles inteligentes adaptados para entornos silenciosos. A menudo, la BIOS ofrece solo opciones genéricas como 'Rendimiento Máximo' o 'Automático', siendo esta última extremadamente agresiva ante cualquier mínima variación de temperatura. Para quien ejecuta servicios en segundo plano o estudia ingeniería de sistemas en casa, este ruido continuo se convierte en un auténtico tormento operativo.

La buena noticia es que el ecosistema de Linux proporciona control absoluto sobre el hardware mediante archivos en el sistema de archivos virtual del kernel, permitiendo crear rutinas a medida. Si alguna vez has lidiado con problemas de rendimiento por sobrecalentamiento, te recomendamos revisar nuestros consejos sobre optimización de conexiones en bases de datos, pero cuando el cuello de botella es físico, la refrigeración debe gestionarse directamente a nivel del sistema operativo. Veamos cómo dominar este control.

Entendiendo el funcionamiento de PWM y sensores en Linux

Antes de sumergirnos en el código, conviene comprender qué significa PWM (Pulse Width Modulation, o Modulación por Ancho de Pulsos). En la práctica, el PWM controla la velocidad de un ventilador enviando pulsos rápidos de energía eléctrica en lugar de reducir el voltaje continuo. Es como encender y apagar la luz de una habitación cien veces por segundo: cuanto más tiempo permanece encendida en cada ciclo, más rápido gira el motor. Este método es eficiente y permite un ajuste fino de cero a cien por ciento de capacidad.

El kernel de Linux gestiona estos componentes a través de un subsistema llamado hwmon (hardware monitoring), ubicado dentro del directorio virtual /sys/class/hwmon/. Cada chip de monitoreo expone una serie de archivos que representan temperaturas actuales, velocidades en RPM y valores de PWM. Para interactuar con ellos de forma sencilla, utilizamos utilidades de línea de comandos que facilitan el escaneo y descubrimiento de sensores.

Para dar los primeros pasos en el descubrimiento de tu hardware, el procedimiento estándar implica instalar el paquete de monitoreo y ejecutar un escaneo automático de los buses de la placa base. Esto mapea todas las direcciones de lectura térmica disponibles y prepara el terreno para los scripts de automatización. Vamos a ejecutar este paso inicial de diagnóstico.

  1. Instala el paquete de sensores de hardware utilizando el gestor de paquetes de tu distribución Linux, como apt en Debian o Ubuntu.
  2. Ejecuta el comando de detección interactiva para escanear los buses I2C y chips Super I/O conectados a la placa base.
  3. Verifica la salida generada para confirmar que los sensores de temperatura de la CPU y los controladores de ventilador fueron reconocidos correctamente.
sudo apt update && sudo apt install lm-sensors -y
sudo sensors-detect --auto
sensors

Localización y pruebas de archivos de control manual

Tras ejecutar el comando sensors, verás una lista detallada con la temperatura de los núcleos del procesador, las RPM actuales de cada ventilador y los voltajes. El siguiente desafío es descubrir qué archivo exacto en el sistema de archivos del kernel controla cada ventilador. Por lo general, estos archivos se encuentran en rutas como /sys/class/hwmon/hwmonX/, donde 'X' es un número identificador generado al arrancar el sistema.

Dentro de esta carpeta encontrarás archivos llamados pwm1, pwm2, pwm1_enable, entre otros. El archivo con el sufijo _enable define el modo de control. En la mayoría del hardware, el valor 1 indica control manual por software, 2 activa el control automático por hardware, y 0 desliga la modulação ou deja al máximo. Antes de cambiar nada, realizar pruebas manuales es fundamental para evitar apagar accidentalmente el disipador del procesador.

Para realizar una prueba práctica de velocidad, navega hasta el directorio de tu chip de monitoreo y cambia temporalmente el modo a manual, inyectando un valor numérico entre cero y doscientos cincuenta y cinco en el archivo pwm correspondiente. Este número representa la escala de potencia. Si deseas profundizar tus conocimientos en automatización y mantenimiento preventivo, consulta también nuestras recomendaciones para garantizar la estabilidad operativa en entornos críticos.

cd /sys/class/hwmon/hwmon2
echo 1 | sudo tee pwm1_enable
echo 128 | sudo tee pwm1
# El ventilador conectado al canal 1 debería bajar inmediatamente a la mitad de velocidad

Creando un script dinámico para modular el ruido

Ahora que sabes cómo leer temperaturas y cambiar la velocidad de los ventiladores de forma manual, el siguiente paso lógico es automatizar el proceso. Dejar el ventilador funcionando al cincuenta por ciento todo el tiempo es excelente para el silencio, pero si decides compilar un proyecto grande o ejecutar una tarea pesada de inteligencia artificial, la CPU se sobrecalentará rápidamente. Necesitamos un bucle inteligente que lea la temperatura cada pocos segundos y ajuste el PWM según la demanda real.

Para resolver esto, podemos escribir un pequeño script en Bash que monitoree la temperatura máxima del procesador y aplique una regla simple: si está por debajo de cuarenta y cinco grados, mantiene el ventilador al treinta por ciento; si sube a sesenta, lo eleva al setenta por ciento; y si supera los setenta y cinco grados, dispara la refrigeración al máximo para evitar estrangulamiento térmico. Este script puede ejecutarse continuamente en segundo plano como un servicio del sistema.

A continuación se muestra un ejemplo funcional de script que cumple exactamente este rol de termostato por software, permitiendo total personalización de los umbrales de temperatura y velocidad según la tolerancia al ruido de tu entorno. Cuando el sistema está inactivo, el servidor se vuelve increíblemente silencioso.

#!/bin/bash
while true; do
  # Lee la temperatura actual de la CPU (ajusta la ruta según tu hardware)
  TEMP=$(cat /sys/class/thermal/thermal_zone0/temp)
  TEMP_C=$((TEMP / 1000))

  if [ $TEMP_C -lt 45 ]; then
    echo 70 | tee /sys/class/hwmon/hwmon2/pwm1 > /dev/null
  elif [ $TEMP_C -ge 45 ] && [ $TEMP_C -lt 65 ]; then
    echo 140 | tee /sys/class/hwmon/hwmon2/pwm1 > /dev/null
  else
    echo 255 | tee /sys/class/hwmon/hwmon2/pwm1 > /dev/null
  fi

  sleep 5
done

Transformando el script en un servicio persistente del sistema

Escribir el script y ejecutarlo en la terminal es útil para pruebas rápidas, pero se detendrá en cuanto cierres la sesión SSH o reinicies el servidor. Para garantizar que tu perfil térmico personalizado funcione todo el tiempo, incluso después de cortes de energía y reinicios, necesitamos transformar este script en un servicio gestionado por systemd, el sistema de inicialización estándar en distribuciones Linux modernas.

El proceso consiste en guardar el script en un directorio seguro como /usr/local/bin/fan-control.sh, otorgar permisos de ejecución al usuario root y crear un archivo de unidad systemd en /etc/systemd/system/fan-control.service. Este archivo indica al sistema operativo que inicie el script automáticamente durante el arranque y lo reinicie si ocurre algún error inesperado durante las operaciones diarias del homelab.

Mantener tu servidor autónomo y silencioso exige organización y buenas prácticas de infraestructura, principios que también aplicamos al migrar sistemas antiguos complejos hacia arquitecturas modernas. Con el servicio configurado correctamente, nunca más tendrás que preocuparte por el ruido excesivo al encender tu equipo.

Consideraciones finales

Gestionar el ruido de un servidor o homelab en Linux no requiere la compra obligatoria de hardware costoso o ventiladores especializados de marcas famosas. Con una comprensión clara del funcionamiento del subsistema pwm y del monitoreo térmico del kernel, es totalmente posible recuperar el silencio de tu oficina o sala de estar sin poner en riesgo la vida útil de los componentes electrónicos.

Ajustar curvas personalizadas transforma la experiencia de mantener un laboratorio casero de tecnología, uniendo alto rendimiento computacional y confort acústico. Ya sea creando scripts sencillos en Bash o utilizando herramientas avanzadas del mercado, el dominio de estas configuraciones eleva tu autonomía técnica y garantiza un entorno de trabajo mucho más agradable y productivo.