Ahorro de energía usando Wake on LAN en Debian Linux

Vaya, si que hace que no escribía en este blog! y no será porque no tengo cosas nuevas de las que hablar, nuevos proyectos, en desarrollo, etc, pero a veces me vuelvo loco con tanta información que no soy capaz de sintetizar todo junto.

Asi que hoy voy a contar lo que hice para ahorrar un poco en la factura de la luz, que está totalmente disparatada.

Tengo un servidor que uso para la intranet, tengo el programa interno de gestion, wiki, y es donde programo cosas de la web. Es un servidor que gasta bastante energía, unos 100W en reposo (que casi siempre está en reposo), y hay muchas horas del día que no se usa.

Mi solución es apagar el servidor automáticamente por las noches. Apagarlo es sencillo, solo hay que llamar a /sbin/halt en el cron, pero el tema es encenderlo. Muchas BIOS soportar el encendido a una hora determinada, pero este server no, asi que no me queda otra que recurrir al Wake On LAN.

Todo lo que voy a explicar es debian. Si usas ubuntu o redhat… pues mejor cámbiate a debian :)

La idea es que enviando un paquete mágico (sí, se llama así), pues el ordenador se enciende solito. Para ello, la tarjeta de red tiene que esperar activamente a recibir ese paquete con su MAC, y ya le dice a la BIOS que encienda (con lo cual, si tienes un portatil, te puede consumir batería).

Lo primero es ver si tienes activada en la BIOS esa opción. Cada BIOS es distinta, pero suele estar en la parte de gestión de energía. Con esto, el ordenador responde a la petición de la tarjeta de red de encender.

Bien, después de tener lista la BIOS, tenemos que decirle a la tarjeta que responda a los paquetes mágicos. Para ello usaremos el comando ethtool, que nos permite cambiar cosas de la tarjeta de red.

sudo apt-get install ethtool

sudo /sbin/ethtool eth0

la linea que nos interesa es :

Supports Wake-on: g

puede tener mas cosas, pero al menos tiene que tener una g

Tendremos que decirle a la tarjeta que escuche por el paquete, para ello escribiremos:

sudo /sbin/ethtool -s eth0 wol g

y si ejecutamos ethtool de nuevo, comprobamos el estado de la tarjeta:

Wake-on: g

Muy bien! anotaremos la MAC de nuestra tarjeta de red :

ip link ls dev eth0

y nos fijamos en

link/ether xx:xx:xx:xx:xx:xx

Vale, ahora podemos apagar el ordenador (sudo /sbin/halt)

Para encender el ordenador, yo tengo un mini PC que hace de router, firewall, proxy, etc, y será el encargado de arrancar mi servidor con un script, /usr/local/bin/wol. Quizás si tenéis un raspberry pi, podríais usarlo también para encender los ordenadores (auque tendría que testearlo para asegurarme).

#!/bin/bash

OSIRIS_ETH0=00:25:64:3b:71:20

/usr/sbin/etherwake ${OSIRIS_ETH0}

bueno, tras un chmod +x /usr/local/bin/wol, ejecutamos el script, y comprobamos que efectivamente, nuestra máquina arranca. Bien!!

Desafortunadamente, el wake on lan hay que activarlo cada reboot :/ lo mejor es configurarlo en el fichero /etc/network/interfaces

iface eth0 inet static
   address 192.168.1.15
   broadcast 192.168.1.255
   netmask 255.255.255.0
   gateway 192.168.1.5
   post-up /sbin/ethtool -s eth0 wol g
   post-down /sbin/ethtool -s eth0 wol g

Para apagar el ordenador por la noche, configuramos el cron:

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 2 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 2 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 2 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
30 3 * * * root /sbin/halt

Como veis, he cambiado también las horas del resto de cron, si no, nunca se van a ejecutar. Por si acaso, hay que recargar el cron (/etc/init.d/cron reload)

En la máquina que va a despertar al servidor:

30 8 * * * root /usr/local/bin/wol

Y listo, con esto tenemos ya un ahorro de unas 5 horas al día.

Para que os hagáis una idea, mis servidores usan 4.2kW al día, de los cuales el 60% del gasto es de este ordenador. Reducimos un 20% las horas que están encendidas, asi que tendremos 3.69kW:

4.2kW dia * 2 meses * 0.13 € kW más 21% IVA = 39.63 € cada factura

3.69kW * w meses * 0.13 € kW más 21 % IVA = 34.82 € cada factura.

Asi que al año nos ahorramos, 28.86 €, sólo por ejecutar este script.