Wake On LAN

Aus Linupedia.org
Wechseln zu: Navigation, Suche

Einleitung

Hat man ein en Server (z.B. Fileserver) der rund um die Uhr läuft aber tatsächlich nur wenige Stunden benötigt wird, kann man seine Lebenserwartung steigern und Strom sparen.
Im folgendem Howto wird beschrieben wie ein Server automatisch um 23:59 Uhr ausgeschaltet und durch einen Client wieder aktiviert wird.

Vorbereitung Server

Die Einstellungen sind durch die unterschiedlichen BIOSe leider nicht leicht. Es muss auf jeden Fall eingestellt werden das der PC durch die Netzkarte aktiviert werden kann.
Bei ASROCK muss man „PCI Devices Power On“ auf „Enable“ setzen. Das war es aber auch schon.
Welche Einstellung für andere BIOS-Varianten gelten muss durch probieren in Erfahrung gebracht werden.
Unter „YaST“ - „System“ - „Konfiguration des Bootloaders“ - wählt man den Standardeintrag (meist der erste), geht auf „Bearbeiten“ und ergänzt die Zeile „Optional kernel command line parameter“ um „acpi=force“.
Ist dieser Eintrag vorhanden, bitte nur entsprechend ändern.

Nun muss auf dem Server noch „ethtool“ installiert werden. Auch hier hilft „Yast“.

Folgendes kommt zum großen Teil von hier: http://www.brueck-computer.de/index2.php?modul=1404&link=1

Test der korrekten Konfiguration:
Als "root" in der Console `/sbin/ip addr` ausführen.
Der zweite Eintrag verrät uns die Bezeichnung der Netzkarte (in meinem Fall „eth0“) und die Hardware-Adresse (MAC) in Form von "link/ether xx:xx:xx:xx:xx:xx.
Auch hier können je nach Board und Netzwerkkarte Unterschiede in der Bezeichnung sein.
Nun folgt in der Console „ethtool eth0“. Als Ergebnis sollte sowas kommen:

Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000001 (1)
Link detected: yes

Unter „Supports Wake-on“ finden wir was die Netzwerkkarte kann und unter „Wake-on“ worauf sie z.Z. reagiert.
In diesem Fall auf nichts. „d“ steht für „Deaktiviert“.

Folgende Werte sind möglich:

p  Wake on physikalischer Aktivität
u  Wake on Unicast-Nachricht
m  Wake on Multicast-Nachricht
b  Wake on Broadcast-Nachricht
a  Wake on ARP
g  Wake on MagicPacket(tm)
s  Aktivere SecureOn(tm) Passwort frür MagicPacket(tm)
d  Deaktiviert (wake on nichts). Diese Option löscht alle vorherigen Optionen


Um den Server vom Client aus zu aktivieren benötigen wir unter „Wake-on“ mindestens ein „g“.
Dazu folgenden Befehl eingeben:

"ethtool -s eth0 wol g"

Danach den Server einmal neu starten und anschließend wieder als „root“ „ethtool eth0“ aufrufen.
Steht da nun immer noch ein „g“ hinter „Wake-on“ ist die Konfiguration korrekt.
Vermutlich steht da aber ein „d“ und die Karte wurde wieder deaktiviert.

Um zu erreichen das die Karte bei jedem Start neu aktiviert wird, kann folgendes Script verwendet werden.

### BEGIN INIT INFO
# Provides: named
# Required-Start: $network
# Required-Stop:
# Default-Start: 3 5
# Default-Stop:
# Description: WOL Karteneinstellung
### END INIT INFO

/sbin/ip link set dev eth0 up
/usr/sbin/ethtool -s eth0 wol pg
/usr/sbin/ethtool eth0

Mehr Informationen zu diesem thema http://www.linux-club.de/faq/Runlevel_scripte_-_Scripts_selbst_erstellen.

Die Funktion nochmals mit „reboot“ und „ethtool eth0“ testen.


Hinweis:

Hinweis:

Bei einigen Netzwerkkarten (z.B. der Onboard-Netzwerkkarte Marvell 88E8001 mit Yukon-Chipsatz) kann mit dem von Suse automatisch ausgewählten Treiber sk98lin die WoL-Funktion nicht aktiviert werden, obwohl die Karte diese Funktionalität aufweist. Außerdem wird die WoL-Funktion bei jedem Herunterfahren des Systems automatisch ausgeschaltet und dadurch das Starten des Systems mit dem MagicPacket(tm) verhindert.


Um die WoL-Funktionalität der Netzwerkkarte zu ermöglichen, muss man den Treiber skge auswählen. Dieser ist bei der aktuellen Suse 10.2 bereits dabei und kann in yast wie folgt einfach ausgewählt werden: Öffne yast > Netzwerkgeräte > Netzwerkkarte > Networkmanager oder ifup > Bearbeiten > Adresse > Erweitert... > Hardwaredetails > in Modulname skge anstelle von sk98lin eintragen > OK > Weiter > Beenden
Nun kann man in einer Shell die WoL-Funktion wie o.g. aktivieren. Möchte man den Rechner per MagicPacket(tm) starten, dann setzt man mit dem Befehl "ethtool -s ethX wol g" (an X richtige Zahl eintragen) die Funktion "Wake on" auf g.

Nun muss man das Problem beheben, dass Suse die Netzwerkkarte bei jedem Herunterfahren des Systems komplett ausschaltet und ein Wake on Lan dadurch nicht möglich ist. Es kann sein, dass dieses Problem nur mit dem Network Manager und nicht bei Verwendung von ifup besteht.
Ich habe dieses Problem folgendermaßen gelöst, womit man auch den NetworkManager weiterhin wie gewohnt nutzen kann:
In die /etc/init.d/halt.local trägt man zwei Zeilen ein:

ifup ethX
ethtool -s ethX wol g

(anstelle des X die richtige Zahl eintragen)

Damit wird beim Shutdown noch kurz ifup gestartet und direkt im Anschluss "Wake on" auf "g" gesetzt. Die Netzwerkkarte wird nicht komplett ausgeschaltet und bleibt über das Lan erreichbar.

Trägt man in die /etc/init.d/boot.local die Zeile "ethtool -s ethX wol g" (ohne Anführungszeichen und anstelle von X die richtige Zahl) ein, dann ist "Wake on" auch nach dem Bootvorgang auf "g" gesetzt, was ansonsten nicht der Fall wäre. Fehlt dieser Eintrag in der boot.local wird der Rechner zwar per WoL gestartet, er verfügt danach jedoch über keine Internetverbindung, selbst dann nicht, wenn in yast/NetworkManager Geräte-Aktivierung "Beim Systemstart" ausgewählt wurde.

Linux Client

Über „Yast“ muss „wol“ bzw. „WorkOnLan“ oder was gleichwertiges installiert werden.
Dieses Programm muss in der Lage sein der Netzkarte ein „Wake on MagicPacket(tm)“ zu senden.

Zum testen kann der Server nun mit z.B. "init 0" runtergefahren und dann (z.B. beim WOL) in der Console ein „wol xx:xx:xx:xx:xx:xx“ (MAC) wieder aktiviert werden.

Damit der Server aber auch dann gestartet wird, wenn irgendein Linux-Client im Netz startet, wird wieder ein Script benötigt:

### BEGIN INIT INFO
# Provides: named
# Required-Start: $network
# Required-Stop:
# Default-Start: 3 5
# Default-Stop:
# Description: Erweckt den Server aus dem Schlaf
### END INIT INFO

/usr/bin/wol xx:xx:xx:xx:xx:xx

Beim testen bitte beachten das erst der Client und dann der Server runter gefahren wird. Sonst wird der Server durch den runter fahrenden Client gestartet.

Windows Client

Server ausschalten

Dazu bedarf es den Befehl „crontab -e“ und Kenntnisse im Gebrauch vom Editor „VI“ (x, i, :wq sollten aber reichen).
Auch hier wieder ein Script erstellt (muss aber nicht sein, der Befehl kann auch direkt in die Crontab eingetragen werden).
Diesmal aber nur:

#!/bin/sh
/sbin/shutdown -h now

Der Beispieleintrag für die Crontab „59 23 * * * /pfad/zum/script/script“ fährt den Rechner um 23:59 runter.

Wenn der Server trotzdem nicht endgültig runterfährt, evtl. alle Mountbefehle (Netz) in der fstab auf "noauto" setzen.

Quellen und weiterführende Links

In Zusammenarbeit: roemi und framp


zurück ins Netzwerk