Marcio Cunha

Servidor barulhento? Como criar perfis PWM customizados no Linux

Aprenda a controlar o barulho insuportável das ventoinhas de servidores e homelabs no Linux configurando curvas PWM personalizadas de forma simples e segura.

Marcio Cunha•7 min
Também disponível em:EnglishEspañol
Resumo
  • O controle padrão de ventoinhas na BIOS muitas vezes falha em equilibrar silêncio e refrigeração adequada em servidores convertidos.
  • O subsistema de hardware monitoring do kernel Linux permite acesso direto aos pinos PWM e sensores térmicos via sysfs.
  • A ferramenta lm-sensors identifica os chips de monitoramento e os caminhos dos arquivos de controle de velocidade.
  • Scripts em shell combinados com loops simples conseguem ajustar dinamicamente as rotações com base na temperatura real da CPU.
  • Um bom perfil térmico reduz drasticamente o ruído em ambientes residenciais sem comprometer a integridade dos componentes.

Por que servidores e homelabs fazem tanto barulho?

Quem decide montar um servidor caseiro ou um homelab utilizando hardware reaproveitado de data centers logo percebe um efeito colateral inevitável: o barulho ensurdecedor. Diferente de um computador de escritório ou de um notebook moderno, que ajustam a velocidade das ventoinhas de forma silenciosa e gradual, os servidores antigos foram projetados para operar em ambientes industriais isolados, onde o foco absoluto é a dissipação térmica a qualquer custo. Na prática, isso significa que pequenas ventoinhas de alta rotação giram constantemente no talo, gerando um chiado metálico constante que incomoda qualquer pessoa no mesmo cômodo.

O grande problema é que as placas-mãe de servidores e até mesmo algumas placas de desktop mais robustas não possuem perfis inteligentes e amigáveis para ambientes silenciosos. Muitas vezes, a BIOS oferece apenas opções genéricas como 'Desempenho Máximo', 'Silencioso' ou 'Automático', sendo que a última costuma ser extremamente agressiva, disparando o cooler ao menor sinal de aumento de temperatura. Para quem roda serviços em segundo plano ou estuda engenharia de sistemas em casa, esse ruído contínuo torna-se um verdadeiro tormento operacional.

A boa notícia é que o ecossistema do Linux oferece controle absoluto sobre o hardware através de arquivos no sistema de arquivos virtual do kernel, permitindo criar rotinas sob medida. Se você já passou por situações de estresse com lentidão por superaquecimento, vale a pena conferir nossas dicas sobre como otimizar conexões em sistemas de alta carga, mas quando o gargalo é físico, o resfriamento precisa ser ajustado diretamente no nível do sistema operacional. Vamos entender como dominar esse controle.

Entendendo o funcionamento do PWM e dos sensores no Linux

Antes de colocar a mão na massa com códigos e scripts, vale a pena entender o que significa essa sigla misteriosa: PWM (Pulse Width Modulation, ou Modulação por Largura de Pulso). Na prática, o PWM controla a velocidade de uma ventoinha enviando pulsos rápidos de energia elétrica em vez de reduzir a voltagem contínua. É como se você acendesse e apagasse a luz da sala cem vezes por segundo: quanto mais tempo a luz fica acesa em cada ciclo, mais rápido o motor da ventoinha gira. Esse método é eficiente, não gera tanto calor residual e permite um ajuste fino de zero a cem por cento da capacidade.

O kernel do Linux gerencia esses componentes através do subsistema chamado hwmon (hardware monitoring), localizado dentro do diretório virtual /sys/class/hwmon/. Cada chip de controle de placa-mãe, como o famoso Nuvoton ou ITE, expõe ali uma série de arquivos que representam as temperaturas atuais, as rotações em RPM (rotações por minuto) e os valores de PWM. Para interagir com esses arquivos de forma amigável, utilizamos utilitários de linha de comando que facilitam a varredura e a descoberta de quais sensores pertencem a quais componentes físicos.

Para dar os primeiros passos na descoberta do seu hardware, o procedimento padrão envolve a instalação do pacote de monitoramento e a execução da varredura automática dos barramentos da placa-mãe. Isso mapeia todos os endereços de leitura térmica disponíveis e prepara o terreno para a criação dos scripts de automação. Vamos executar essa etapa inicial de diagnóstico no terminal.

  1. Instale o pacote de sensores de hardware utilizando o gerenciador de pacotes da sua distribuição Linux, como o apt no Debian ou Ubuntu.
  2. Execute o comando de detecção interativa para escanear os barramentos I2C e chips Super I/O conectados à placa-mãe.
  3. Verifique a saída gerada para confirmar se os sensores de temperatura da CPU e os controladores de ventoinha foram reconhecidos corretamente.
sudo apt update && sudo apt install lm-sensors -y
sudo sensors-detect --auto
sensors

Como localizar e testar os arquivos de controle manual

Depois de rodar o comando sensors, você verá uma lista detalhada com a temperatura dos núcleos do processador, a rotação atual de cada ventoinha conectada e as voltagens da fonte. O próximo desafio é descobrir qual arquivo exato no sistema de arquivos do kernel controla cada ventoinha. Geralmente, esses arquivos ficam em caminhos como /sys/class/hwmon/hwmonX/, onde o 'X' é um número de identificação gerado na inicialização do sistema.

Dentro dessa pasta, você encontrará arquivos chamados pwm1, pwm2, pwm1_enable e assim por diante. O arquivo com o sufixo _enable define o modo de controle da ventoinha. Na maioria dos hardwares, o valor 1 significa controle manual via software, o valor 2 ativa o controle automático por hardware (geralmente gerido pela própria placa-mãe), e o valor 0 desliga a modulação ou deixa no máximo, dependendo do fabricante. Antes de alterar qualquer coisa, é fundamental testar manualmente para garantir que você não vai desligar o cooler do processador por engano.

Para realizar o teste prático de alteração de velocidade, navegue até o diretório do seu chip monitor e altere temporariamente o modo para manual, injetando um valor numérico de zero a duzentos e cinquenta e cinco no arquivo pwm correspondente. Esse número representa a escala de potência, onde zero é o mínimo e duzentos e cinquenta e cinco é a potência máxima. Se quiser aprofundar seus conhecimentos em automação e rotinas de manutenção preventiva, conheça também as práticas recomendadas para garantir a estabilidade operacional em ambientes críticos.

cd /sys/class/hwmon/hwmon2
echo 1 | sudo tee pwm1_enable
echo 128 | sudo tee pwm1
# A ventoinha conectada ao canal 1 deve cair imediatamente para metade da velocidade

Criando um script dinâmico para modular o ruído

Agora que você já sabe como ler as temperaturas e alterar a velocidade das ventoinhas de forma manual, o próximo passo lógico é automatizar esse processo. Deixar o cooler rodando a cinquenta por cento o tempo todo é ótimo para o silêncio, mas se você decidir compilar um grande projeto ou rodar uma tarefa pesada de inteligência artificial, a CPU vai superaquecer rapidamente. Precisamos de um laço inteligente que leia a temperatura a cada poucos segundos e ajuste o PWM de acordo com a demanda real.

Para resolver isso, podemos escrever um pequeno script em Bash que monitora a temperatura máxima do processador e aplica uma regra simples: se estiver abaixo de quarenta graus, mantém a ventoinha em trinta por cento; se subir para sessenta graus, eleva para setenta por cento; e se passar de setenta e cinco graus, dispara o resfriamento para cem por cento, evitando qualquer estrangulamento térmico. Esse script pode rodar continuamente em segundo plano como um serviço do sistema.

Abaixo temos um exemplo funcional de script que cumpre exatamente esse papel de termostato via software, permitindo total personalização dos patamares de temperatura e velocidade conforme a tolerância ao ruído do seu ambiente. Quando o sistema está ocioso, o servidor fica incrivelmente silencioso, e conforme a carga aumenta, o resfriamento reage de forma autônoma.

#!/bin/bash
while true; do
  # Lê a temperatura atual da CPU (ajuste o caminho do arquivo conforme seu 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 o script em um serviço persistente do sistema

Escrever o script e executá-lo no terminal é útil para testes rápidos, mas ele vai parar assim que você fechar a sessão SSH ou reiniciar o servidor. Para garantir que o perfil térmico customizado funcione o tempo todo, inclusive após quedas de energia e reboots, precisamos transformar esse script em um serviço gerenciado pelo systemd, o sistema de inicialização padrão das distribuições Linux modernas.

O processo consiste em salvar o script em um diretório seguro, como /usr/local/bin/fan-control.sh, dar permissões de execução para o usuário root e criar um arquivo de unidade systemd em /etc/systemd/system/fan-control.service. Esse arquivo avisa o sistema operacional para iniciar o script automaticamente durante o boot e reiniciá-lo caso ocorra algum erro inesperado durante a operação diária do homelab.

Manter o servidor autônomo e silencioso exige organização e boas práticas de infraestrutura, princípios que também aplicamos quando migramos sistemas legados complexos para novas arquiteturas. Com o serviço configurado corretamente, você nunca mais precisará se preocupar com o barulho excessivo ao ligar o seu equipamento.

Considerações finais

Gerenciar o ruído de um servidor ou homelab no Linux não exige a troca obrigatória de hardware caríssimo ou ventoinhas especiais de marcas famosas. Com uma compreensão clara do funcionamento do subsistema pwm e do monitoramento térmico do kernel, é totalmente possível recuperar o silêncio do seu escritório ou sala de estar sem colocar em risco a vida útil dos componentes eletrônicos.

Ajustar curvas personalizadas transforma a experiência de manter um laboratório caseiro de tecnologia, unindo alta performance computacional e conforto acústico. Seja criando scripts simples em Bash ou utilizando ferramentas avançadas de mercado, o domínio dessas configurações eleva o seu nível de autonomia técnica e garante um ambiente de trabalho muito mais agradável e produtivo.