Autoshutdown für Fileserver - Verbundene Shares, Plattenaktivität

sandreas

Well-Known Member
Hallo zusammen,

ich benutze eine FreeBSD 8.3 Maschine als Fileserver, mit AFP und SMB. Jetzt würde ich gerne einen Autoshutdown realisieren, wenn der Fileserver nicht in Benutzung ist. Aktuell mache ich das über ein Shell-Script, was über einen Cron-Job alle 15 Minuten einfach eine Liste von hosts durchpingt und wenn keiner up ist, wird der Server herunter gefahren. Dabei gibt kleinere Probleme:

- Wenn ich per USB eine Platte anschließe und mit rsync ein paar Daten rüber schaufle, dann fährt er runter
- Wenn ich per screen und WGET was auf dem Netz ziehe, fährt er runter
- Wenn ich mich über DynDNS mit SSH verbinde und länger als 15 Minuten brauche, um etwas umzukonfigurieren, fährt er runter
- Wenn ich per dyndns und SSH einen Port umleite und darüber ein Windows-Share mounte, fährt er auch runter


Nun möchte ich das ganze etwas "verfeinern". Nichtbenutzung würde ich wie folgt definieren:
- Keine Plattenaktivität => Falls ich was mit wget runterlade oder per rsync kopiere
- Keine Clients per SSH verbunden => falls ich über DynDNS verbunden bin
- Kein Share ist gemounted (SMB, AFP), auch wenn kein Kopiervorgang stattfindet => Falls ich gerade eine Datei über DynDNS und SMB gemounted habe (per ssh gemappt)

Welche Möglichkeiten habe ich?
Gibt es sowas wie "list connected shares" oder "sind platten aktiv (lesend oder schreibend)"? Grundsätzlich müsste ich ja an den Aktivitätsstatus der Platten über smart rankommen oder?

Bin für Ideen und Vorschläge dankbar.
 
Du könnstest mit "users" prüfen ob user angemeldet sind. Falls ja fahre nicht herunter, falls nein fahre herunter. Damit kannst Du zumindest die SSH Fälle erschlagen.
 
Also meine bisherigen Recherchen:

Dateisystemaktivität werde ich mit df prüfen, sprich:
- df
- 20 sekunden warten
- df
- Wenn sich was auf den Daten-Dateisystemen geändert hat, nicht herunterfahren

SSH werde ich mit w prüfen, sprich:
- w
- Wenn kein User angemeldet ist oder die Idle-Time des mehr als 30 Minuten ist, fahre runter, sonst nicht

Fehlt noch die Prüfung auf verbundene Shares ohne Dateisystemaktivität, bin mir nicht sicher, ob das vielleicht mit fstat geht?
 
Der Ansatz alle 15 Minuten zu prüfen ist grundsätzlich verkehrt. So eine Prüfung sollte durchgehend erfolgen und wenn 15 Minuten lang keine Aktivität festgestellt wurde kann das System runter fahren.

Mit deiner Methode fährt das System auch runter, wenn die letzte Nutzung 2 Sekunden zurückliegt.

Anders ausgedrückt 15 Minuten ist nicht dein Timeout sondern deine Auflösung.
 
Hoi,
da Du das Ganze etwas vereinfachten möchtest: schau nach ned so stromhungriger Hardware und lass die Kiste oifach durchrennen. Da hast Du langfristig wesentlich mehr davon.
Gruß Bummibär
 
Hallo zusammen,

erstmal danke an alle für die Tipps.

schau nach ned so stromhungriger Hardware und lass die Kiste oifach durchrennen
Das möchte ich nicht. Selbst bei Stromsparender Hardware (mein Server braucht inkl. 5 Platten 50W) werden die Platten unnötig beansprucht, auch wenn man sie schlafen legt.


Der Ansatz alle 15 Minuten zu prüfen ist grundsätzlich verkehrt. So eine Prüfung sollte durchgehend erfolgen und wenn 15 Minuten lang keine Aktivität festgestellt wurde kann das System runter fahren.
Kamikazes Hinweis ist absolut richtig. Eine Prüfung alle 15 Minuten ist zu ungenau.


Aus diesem Grund habe ich mir mal schnell einen Python Daemon programmiert (bin zwar kein Python Experte, aber das war nicht so schwer). Der kann mittlerweile:

- Speicherplatzveränderung prüfen (df)
- User-Anmeldungen prüfen (w)
- Verbundene SMB-Shares prüfen (smbstatus -b)

Der Daemon prüft alle 30 Sekunden die Ausgabe der Programme und aktualisiert einen Zeitstempel, wenn Aktivität fest gestellt wurde. Wird 20 Minuten keine Aktivität fest gestellt, fährt er das System runter. Funktioniert in meiner Entwicklerversion ganz gut, es gibt aber noch viel Optimierungsbedarf.

Geplant ist noch eine Prüfung von NFS und AFP:
- netstat | grep nfsd
- ps anx | grep afpd


Was mich noch interessieren würde:
- Kann man nicht zentral verbundene Shares für alle Dienste prüfen (SMB, NFS, AFP, FTP, TFTP, SFTP etc.), z.B. mit fstat oder muss ich jeden Dienst einzeln prüfen?
- Gibt es noch eine "Aktivität", die ich vergessen habe?


Eventuell werde ich auch komplett mit netstat oder sockstat -c arbeiten, mal sehen ob das klappt.
 
Das möchte ich nicht. Selbst bei Stromsparender Hardware (mein Server braucht inkl. 5 Platten 50W) werden die Platten unnötig beansprucht, auch wenn man sie schlafen legt.

Wer hat dir denn verzapft, dass Platten irgendetwas andere lieber mögen als sich ewig im Kreis zu drehen? Der "gefährlichste" Augenblick für eine Platte ist nach meiner Erfahrung das Anlaufen. Sobald die Platte dreht wird sie das vermutlich noch über Jahre tun, weil die Haftreibung im Lager einmal überwunden ist.
 
Zuletzt bearbeitet:
Wird das System auch wieder aufgeweckt? (WOL ?)

Ich finde deine Idee eigentlich gut und würde mich freuen, wenn du bspw. den Python Daemon dann ins Wiki kopierst (oder hier rein ...).

Seit etlichen Monaten schon überlege ich mir eine NAS zu kaufen oder alternativ, einen HP MicroServer (Preis-/Leistung einfach unschlagbar).

Oft ist es aber so, dass ich 1-2 Wochen kaum meine externen Festplatten brauche, dann ein paar Tage hintereinander sehr viel. Noch behelfe ich mir mit umstecken von externen HDDs. Langsam wird es aber echt lästig :-)

Jedes mal die NAS von Hand ein-/ausschalten kommt für mich aber irgendwie auch nicht in Frage. Um es permanent laufen zu lassen, verbraucht es mir zuviel Strom und nutze ich dann doch zu selten.
 
Wer hat dir denn verzapft, dass Platten irgendetwas andere lieber mögen als sich ewig im Kreis zu drehen? Der "gefährlichste" Augenblick für eine Platte ist nach meiner Erfahrung das Anlaufen. Sobald die Platte dreht wird sie das vermutlich noch über Jahre tun, weil die Haftreibung im Lager einmal überwunden ist.

Das kommt auf die Festplatte an. Serverfestplatten sind darauf ausgelegt, dauerhaft zu laufen, hier schadet jedes Neuanlaufen den Motoren.
Bei Notebookfestplatten sieht es anders aus, die sind so gebaut, dass sie häufig ein- und ausgeschaltet werden, mögen aber keinen Dauerbetrieb.
 
Bin weder Python- noch FreeBSD-Experte, daher kann es sein, dass es nicht so toll programmiert ist... Das Ding ist für FreeNAS 8 gedacht, überwacht also nur /mnt/ bei den offenen Dateien und Shares. Ich übernehme keine Haftung ;)

Feedback ist aber ausdrücklich erwünscht, schlagt mich nur nicht wegen schlechtem Stil ;-)

http://fynder.de/autoshutdown.txt

Installation:
- SSH login:
Code:
mount -uw /
wget http://fynder.de/autoshutdown.txt -O /usr/local/sbin/autoshutdown.py
chmod +x /usr/local/sbin/autoshutdown.py


Autostart:
/conf/base/etc/rc.local erstellen:
Code:
#!/bin/sh
/usr/local/sbin/autoshutdown.py start

CHMOD nicht vergessen:
Code:
chmod +x /conf/base/etc/rc.local

Test:
Code:
/usr/local/sbin/autoshutdown.py start
# pidfile /tmp/autoshutdown.pid already exist. Daemon already running?
 
Zuletzt bearbeitet:
Zurück
Oben