Stromsparender Fileserver mit Suspend
Nachdem jetzt eine ewige Zeit lang bei mir 24x7 ein Server lief, habe ich mich entschlossen diesen nun auszumustern und eine stromsparendere Variante zu bauen. Ziel war es einen Fileserver zu haben, der per Wake-on-LAN aufgeweckt werden kann und nicht ständig laufen muss. Wichtig war mir auch ein möglichst schnelles Aufwachen des Servers, wer will schon lange warten um auf Dokumente zuzugreifen.
Um das Problem zu lösen läuft jetzt ein Debian Lenny mit aktuellem Kernel aus den Backports.
puppy:~# uname -r
2.6.32-bpo.5-amd64Allein das Aktualisieren des Kernels hat durch die aktivierten Stromsparfeatures (vor allem cpufreq) den Verbrauch um ca. 20 Watt verringert.
Zusätzlich will ich den Server nicht immer manuell Runterfahren müssen, also bin ich auf die Suche nach einem bereits vorhandenem Checker gegangen der zum einen prüft ob jemand per SSH verbunden ist, zum anderen aber im Netzwerk die üblichen Verdächtigen auf Aktivität prüft um sicherzustellen, daß der Server nicht runtergefahren wird wenn er benötigt wird.
Fündig wurde ich beim "server-sleepd", anscheinend wurde das Teil mal von Heise gebaut, zu finden ist das Shell Skript unter http://mercurial.intuxication.org/hg/server-sleepd.
Innerhalb des Skriptes kann unterschieden werden was mit dem Server beim Herunterfahren passieren soll, in meinem Fall wird "pm-suspend" aufgerufen um Ihn Schlafen zu legen.
Probleme hatte ich allerdings beim WOL, mir war es nicht möglich den Server wieder aufzuwecken. Der Fehler ist schlicht bei einem deaktiverem WOL auf der Netzwerkkarte und dem deaktivertem Wakeup Event der Netzwerkkarte im ACPI zu suchen.
Aussehen sollte das ganze wie folgt:
puppy:~# cat /proc/acpi/wakeup Device S-state Status Sysfs node PS2K S4 disabled pnp:00:0a UAR1 S4 disabled pnp:00:0b NSMB S4 disabled pci:0000:00:01.1 USB0 S4 disabled pci:0000:00:02.0 USB2 S4 disabled pci:0000:00:02.1 NMAC S5 enabled pci:0000:00:07.0 P0P1 S4 disabled pci:0000:00:04.0 HDAC S4 disabled pci:0000:00:05.0 BR10 S4 disabled pci:0000:00:09.0 BR12 S4 disabled pci:0000:00:0c.0 BR11 S4 disabled pci:0000:00:0b.0 puppy:~# ethtool eth0 Settings for eth0: Supported ports: [ MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised auto-negotiation: Yes Speed: 1000Mb/s Duplex: Full Port: MII PHYAD: 1 Transceiver: external Auto-negotiation: on Supports Wake-on: g Wake-on: g Link detected: yes
Wichtig hierbei ist, das in /proc/acpi/wakeup bei der jeweiligen Netzwerkkarte "enabled" im Status steht, ansonsten werden Events von dieser Source nicht zum Aufwecken verwendet.
Die richtige PCI ID der Netzwerkkarte findet sich über "lspci".
Gesetzt wird das ganze bei mir in /etc/network/interfaces beim Starten der Netzwerkverbindungen.
up ethtool -s eth0 wol g up echo NMAC > /proc/acpi/wakeup





