Michael`s Blog OSS/Linux, networking and my private life

15Aug/100

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-amd64

Allein 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

veröffentlicht unter: it, kernel, linux keine Kommentare
10Dez/090

rootdelay beim Linux Boot

Gerade eben hatte ich bei einer nagelneuen Linux Installation ein Problem beim ersten Booten des neuen Systems. Der Fehler war nicht von Anfang an ersichtlich, nach längerem Debugging hat sich der Fehler wie folgt dargestellt:

Beim Übergang vom Initrd zum Kernel und dem Mounten des Filesystems meldete Grub folgenden Fehler:

ALERT! /dev/sda2 does not exist. Dropping to a shell!

Danach begrüßte mich eine BusyBox Shell von der ich leider nicht weiter kam.

Problem war schlicht das beim Laden des SAS-Controller Modules (mptsas) braucht das System viel zu lange um die Platten zu finden und bricht mit einem Timeout ab.

Der Fehler lässt sich durch den Parameter

rootdelay=45

in der Kernel Commandline beheben.

Siehe auch hier bei Launchpad beschrieben.