Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Script gesucht: sispmctl schaltet Steckdose -- Backup beginnt...

5 views
Skip to first unread message

M. Hagedorn

unread,
Feb 7, 2009, 5:01:08 AM2/7/09
to
Hallo.
Wir haben hier so eine SilverLink SISPMCTL Steckdosenleiste, die man
bekanntlich per USB an/abschalten kann. An eine dieser Steckdosen soll
eine externe Festplatte (entweder NAS oder einfach per USB an den
Server), mit der folgendes geplant ist:
Nachts läuft ein cronjob, der zuerst eine Steckdose anschaltet;
danach testet, ob die Platte neu gefundene Platte verfügbar ist und sie
in diesem Fall mountet. Ein paar Minuten später kann dann das Backup auf
diese Platte angestoßen werden. Die Prozesse alleine laufen aber ich
suche noch ein sinnvolles kleines bash-Script, das alles vereint.
Einen Ansatz habe ich schon:

#! /bin/bash

PATH=/bin:/usr/bin:/sbin:/usr/sbin
LOCKFILE=/var/lock/steckdose.lock

# Diese Prozedur wird nur im Fehlerfall und am Ende aufgerufen:
cleanup() {
rm -f "$LOCKFILE"
exit
}
if lockfile -! -r 0 "$LOCKFILE"; then
echo "Steckdosen/Backup kontrollieren" | mail -s "Backup-Warnung" root
exit
fi

#(sispmctl -o 1 schaltet die Steckdose ein,
# sispmctl -f 1 schaltet sie aus)
sispmctl -o 1
sleep 2m

Wie gehts jetzt weiter? Wenn die Platte an USB hängt, wird sie ja immer
am gleichen Port gefunden, sobald sie eingeschaltet wird. Vielleicht
kann man das mit einem fdisk -l |grep sd<?> abfragen oder so??

Über Anregungen würde ich mich freuen ... danke schon mal,
M.

Pit Kobel

unread,
Feb 7, 2009, 5:55:38 AM2/7/09
to
On Sat, 07 Feb 2009 11:01:08 +0100, M. Hagedorn wrote:


> Wie gehts jetzt weiter? Wenn die Platte an USB hängt, wird sie ja immer
> am gleichen Port gefunden, sobald sie eingeschaltet wird.

Am gleichen USB-Port wohl schon, das heißt aber nicht unbedingt, daß sie
auch das gleiche Device kriegt (/dev/sd?). Was passiert, wenn mal jemand
einen USB-Stick vergessen hat abzuziehen?

Du könntest, wenn Du udev verwendest, /dev/disk/by-uuid/XXX verwenden,
oder findfs, das kann Dir zu einer UUID oder einem Label das passende
device ausgeben.
Damit kann man dann schön was basteln.

Und wenn Du gern Hosenträger und Gürtel trägst, legst Du ins root Deiner
Backuppartition noch eine Datei (z.B. backup0815), deren Existenz Du nach
dem Mounten abfragst.

NDT
Pit

M. Hagedorn

unread,
Feb 7, 2009, 6:52:54 AM2/7/09
to
Hi.

> Am gleichen USB-Port wohl schon, das heißt aber nicht unbedingt, daß sie
> auch das gleiche Device kriegt (/dev/sd?). Was passiert, wenn mal jemand
> einen USB-Stick vergessen hat abzuziehen?
Das stimmt :(

> Du könntest, wenn Du udev verwendest, /dev/disk/by-uuid/XXX verwenden,

Oh mit udev habe ich noch nie was gemacht ... gibts irgendwo gescheite
Vorlagen?

> oder findfs, das kann Dir zu einer UUID oder einem Label das passende
> device ausgeben. Damit kann man dann schön was basteln.

Klingt gut -- müsste machbar sein. findfs ist auf dem Server
installiert. Allerdings scheint es nicht so richtig zu laufen. Ich habe
unter /dev/disk/by-uuid nachgesehen aber
findfs UUID=<nummer>
liefert immer nur
findfs: Nicht möglich »UUID=0.. 6c« aufzulösen -- ansonsten könnte es
damit klappen...

> Und wenn Du gern Hosenträger und Gürtel trägst

wie muss ich das verstehen? Tue ich zwar nicht aber wer macht das schon???

> legst Du ins root Deiner
> Backuppartition noch eine Datei (z.B. backup0815), deren Existenz Du nach
> dem Mounten abfragst.

Du meinst aus Paranoia oder wieso?

>NDT
Nondestructive Testing??
Michael

lutz golke

unread,
Feb 7, 2009, 7:06:37 AM2/7/09
to
M. Hagedorn schrieb:

>> Du könntest, wenn Du udev verwendest, /dev/disk/by-uuid/XXX verwenden,
> Oh mit udev habe ich noch nie was gemacht ... gibts irgendwo gescheite
> Vorlagen?
genau auf dein Vorhaben abgestimmt:
http://ubuntuforums.org/showthread.php?t=168221

hth,
Lutz

Pit Kobel

unread,
Feb 7, 2009, 7:16:41 AM2/7/09
to
On Sat, 07 Feb 2009 12:52:54 +0100, M. Hagedorn wrote:


>> Du könntest, wenn Du udev verwendest, /dev/disk/by-uuid/XXX verwenden,
> Oh mit udev habe ich noch nie was gemacht ... gibts irgendwo gescheite
> Vorlagen?

Brauchst Du, glaube ich, nicht. Im Zuge Deines Vorhabens brauchst Du an
der udev-Konfiguration erstmal nichts ändern. Du nutzt halt nur die von
udev angelegten Devices.

>
>> oder findfs, das kann Dir zu einer UUID oder einem Label das passende
>> device ausgeben. Damit kann man dann schön was basteln.
> Klingt gut -- müsste machbar sein. findfs ist auf dem Server
> installiert. Allerdings scheint es nicht so richtig zu laufen. Ich habe
> unter /dev/disk/by-uuid nachgesehen aber findfs UUID=<nummer>
> liefert immer nur
> findfs: Nicht möglich »UUID=0.. 6c« aufzulösen -- ansonsten könnte es
> damit klappen...

Warst Du root oder hattest anderweitig Lesezugriff auf die Diskdevices
(bei meinem Ubuntu wäre das z.B. Gruppenzugehörigkeit "disk")?


>
>> Und wenn Du gern Hosenträger und Gürtel trägst
> wie muss ich das verstehen? Tue ich zwar nicht aber wer macht das
> schon???

Das war ein Bild: doppelt abgesichert ;-)

>
>> legst Du ins root Deiner
>> Backuppartition noch eine Datei (z.B. backup0815), deren Existenz Du
>> nach dem Mounten abfragst.
> Du meinst aus Paranoia oder wieso?

So kann man's auch nennen. Halt um wirklich 200% sicher zu gehen...

>
> >NDT
> Nondestructive Testing??

Die Interpretation gefällt mir :-)

Na denn tschüs
Pit

M. Hagedorn

unread,
Feb 7, 2009, 7:31:59 AM2/7/09
to
> Warst Du root oder hattest anderweitig Lesezugriff auf die Diskdevices
> (bei meinem Ubuntu wäre das z.B. Gruppenzugehörigkeit "disk")?
Komisch -- auf meinem Notebook (kubuntu) ging es nicht aber auf dem
Server, wo das script eh laufen wird, ging es .. von daher nehme ich
findfs -- ist einfacher. Hier die ersten Versuche für mein Script -- ist
aber noch nicht fertig und noch suboptimal:

#! /bin/bash

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
LOCKFILE=/var/lock/steckdose.lock

# Diese Prozedur wird nur im Fehlerfall und am Ende aufgerufen:
cleanup() {
rm -f "$LOCKFILE"
exit
}

if lockfile -! -r 0 "$LOCKFILE"; then
echo "Steckdosen/Backup kontrollieren" | mail -s "Backup-Warnung" root
exit
fi

#USB-Platte finden:
USB="$(/sbin/findfs UUID=nummer)"

if "$USB"= <<<< wie kann man das abfragen? also sowas wie:
if $USB=/dev/sda<beliebig> then...

then


#(sispmctl -o 1 schaltet die Steckdose ein,
# sispmctl -f 1 schaltet sie aus)
sispmctl -o 1

sleep 10s
mount $USB /mnt/backup
echo "USB-Platte läuft"
#Backupprogramm wird später per Cron gestartet...

else
echo "USB-Platte kontrollieren" | mail -s "Backup-Warnung" root
fi
trap cleanup EXIT TERM INT
#EOF

Pit Kobel

unread,
Feb 7, 2009, 8:18:58 AM2/7/09
to
On Sat, 07 Feb 2009 13:31:59 +0100, M. Hagedorn wrote:


> #! /bin/bash
>
> PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
> LOCKFILE=/var/lock/steckdose.lock
>
> # Diese Prozedur wird nur im Fehlerfall und am Ende aufgerufen:
> cleanup() {
> rm -f "$LOCKFILE"
> exit
> }
>
> if lockfile -! -r 0 "$LOCKFILE"; then echo "Steckdosen/Backup
> kontrollieren" | mail -s "Backup-Warnung" root exit
> fi
>
> #USB-Platte finden:
> USB="$(/sbin/findfs UUID=nummer)"
>
> if "$USB"= <<<< wie kann man das abfragen? also sowas wie: if
> $USB=/dev/sda<beliebig> then...

Entweder den exit status von findfs auswerten:

if ! USB="$(/sbin/findfs UUID=...)" ; then mail ...
exit 1
fi

oder prüfen, ob $USB leer ist:

if [ -z $USB ] ; then mail ...
exit 1
fi

>
> then
> #(sispmctl -o 1 schaltet die Steckdose ein, # sispmctl -f 1
> schaltet sie aus)
> sispmctl -o 1

Ich würde die Steckdose einschalten, bevor ich nach der Platte suche...

> sleep 10s
> mount $USB /mnt/backup
> echo "USB-Platte läuft"
> #Backupprogramm wird später per Cron gestartet...

Örgs. Pack den Aufruf des Backupprogramms mit in das script und starte
das dann per cron. Dann kannst Du nach dem Backup auch wieder sauber
unmounten und die Steckdose ausschalten.

>
> else
> echo "USB-Platte kontrollieren" | mail -s "Backup-Warnung" root
> fi
> trap cleanup EXIT TERM INT
> #EOF


Das ist jetzt alles nur mit rudimentärer Fehlerbehandlung, besonders vor
dem Ausschalten solltest Du nochmal schauen, ob die Platte auch wirklich
ungemountet ist.

NDT
Pit

Pit Kobel

unread,
Feb 7, 2009, 8:31:09 AM2/7/09
to
On Sat, 07 Feb 2009 13:06:37 +0100, lutz golke wrote:


> genau auf dein Vorhaben abgestimmt:
> http://ubuntuforums.org/showthread.php?t=168221

Dar Link ist gut.
Mir fällt nämlich gerade noch ein, dass, wenn ein User (unter X und
vielleicht auch nur bei bestimmten Systemen) eingeloggt ist, udev (oder
wer auch immer) sich sofort das Device krallt und sonstwohin mountet.
Manchmal schneller als jedes Script...

Also vielleicht doch an udev direkt rumschrauben?

NDT
Pit

M. Hagedorn

unread,
Feb 7, 2009, 12:04:03 PM2/7/09
to
> Entweder den exit status von findfs auswerten:
> oder prüfen, ob $USB leer ist:
Danke -- das waren die fehlenden Hinweise.

> Ich würde die Steckdose einschalten, bevor ich nach der Platte suche...
Äh, ja natürlich... war auch noch nicht fertig :)

> Örgs. Pack den Aufruf des Backupprogramms mit in das script und starte
> das dann per cron. Dann kannst Du nach dem Backup auch wieder sauber
> unmounten und die Steckdose ausschalten.

Das blöde daran ist, dass das Backup selbst per Script abläuft und auch
die Platte automatisch mountet und am Schluss unmountet. Ich könnte
natürlich dieses Script dort einbauen aber dann wären meine Änderung mit
dem nächsten dist-upgrade futsch :(

> Das ist jetzt alles nur mit rudimentärer Fehlerbehandlung, besonders vor
> dem Ausschalten solltest Du nochmal schauen, ob die Platte auch wirklich
> ungemountet ist.

Ja, daran habe ich auch schon gedacht. Ich könnte allerdings einfach
schauen, ob das LW noch gemountet ist -- wenn nicht: abschalten.
Könnte man auch mit diese if-Anweisung von oben realisieren...

Hier erstmal die derzeitige Fassung:

#! /bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
LOCKFILE=/var/lock/steckdose.lock

# Diese Prozedur wird nur im Fehlerfall und am Ende aufgerufen:
cleanup() {
rm -f "$LOCKFILE"
exit
}

if lockfile -! -r 0 "$LOCKFILE"; then echo "Steckdosen/Backup
kontrollieren" | mail -s "Backup-Warnung" root
exit
fi

#(sispmctl -o 1 schaltet die Steckdose ein,


# sispmctl -f 1 schaltet sie aus)
sispmctl -o 1

sleep 10s

#USB-Platte finden:
USB="$(/sbin/findfs UUID=nummer)"

if ! USB="$(/sbin/findfs UUID=nummer)" ;
then echo "USB-Platte kontrollieren" | mail -s "Backup-Warnung" root
exit 1
else


mount $USB /mnt/backup
echo "USB-Platte läuft"

fi

#Wie realisert man ein SICHERES ausschalten nach dem Backup?

#Umount überprüfen -- evtl while-Schleife?

Pit Kobel

unread,
Feb 7, 2009, 4:18:28 PM2/7/09
to
On Sat, 07 Feb 2009 18:04:03 +0100, M. Hagedorn wrote:

> Das blöde daran ist, dass das Backup selbst per Script abläuft und auch
> die Platte automatisch mountet und am Schluss unmountet. Ich könnte

Oh, das kann in die Hose gehen, wenn die Platte schon gemountet ist.
Vielleicht kommt das Backup-Script ja damit zurecht, vielleicht auch
nicht. mount wirft jedenfalls einen Fehler, wenn etwas zum zweiten mal
gemountet werden soll.

> natürlich dieses Script dort einbauen aber dann wären meine Änderung mit
> dem nächsten dist-upgrade futsch :(
>
>> Das ist jetzt alles nur mit rudimentärer Fehlerbehandlung, besonders
>> vor dem Ausschalten solltest Du nochmal schauen, ob die Platte auch
>> wirklich ungemountet ist.
> Ja, daran habe ich auch schon gedacht. Ich könnte allerdings einfach
> schauen, ob das LW noch gemountet ist -- wenn nicht: abschalten. Könnte
> man auch mit diese if-Anweisung von oben realisieren...
>
> Hier erstmal die derzeitige Fassung:
>
> #! /bin/bash
> PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
> LOCKFILE=/var/lock/steckdose.lock
>
> # Diese Prozedur wird nur im Fehlerfall und am Ende aufgerufen:
> cleanup() {
> rm -f "$LOCKFILE"
> exit
> }
>
> if lockfile -! -r 0 "$LOCKFILE"; then echo "Steckdosen/Backup
> kontrollieren" | mail -s "Backup-Warnung" root
> exit

exit 1
Dann kannst Du den exit status des Scripts bei Bedarf auswerten.

> fi
>
> #(sispmctl -o 1 schaltet die Steckdose ein, # sispmctl -f 1 schaltet sie
> aus)
> sispmctl -o 1
> sleep 10s
>
> #USB-Platte finden:
> USB="$(/sbin/findfs UUID=nummer)"
>
> if ! USB="$(/sbin/findfs UUID=nummer)" ; then echo "USB-Platte
> kontrollieren" | mail -s "Backup-Warnung" root
> exit 1
> else

> mount $USB /mnt/backup && echo "USB-Platte läuft"

Wie gesagt, das würde ich rausnehmen...
Möglicherweise hier dann:

/pfad/zum/backupprogramm --parameter

Dann hast Du alles beieinander, und kommst zeitlich nicht in irgedwelche
Konflikte.

> fi


>
> #Wie realisert man ein SICHERES ausschalten nach dem Backup?
>
> #Umount überprüfen -- evtl while-Schleife?

Wenn Du das Backupscript oben mit einbaust, ist hier schon ungemountet.
Wenn nicht, mußt Du eh Fehler suchen.
Zur Sicherheit vielleicht:

mount | grep /mnt/backup
if [ $? -eq 0 ] ; then
mail -s "unmount failed" root
exit 1
fi

Andere Möglichkeit:
script, das das Vorhandensein der Partition überprüft, backupscript und
ein script, das das Unmounten prüft, in eine Reihe:

deviceprüfscript && backupscript && umountprüfscript

Da sind dann die ganzen "exit 1" wichtig.

Das bringt auch das ganze in einen sauberen zeitlichen Ablauf.

<pan.2009.02...@stulpi.dyndns.org> hast Du gelesen? Da fällt mir
noch keine schnelle Lösung ein. Unsauber gelöst könnte man am Anfang
Deines scripts "sicherheitshalber" erstmal unmounten...


NDT
Pit

M. Hagedorn

unread,
Feb 8, 2009, 3:37:39 AM2/8/09
to
Pit Kobel schrieb...
danke - habe die Tipps nochmal eingebaut. Ich werde das Script Montag
vor Ort testen. Dann kann ich auch die Gembird-Steckerleiste an den
USB-Eingang hängen und schauen, ob wirklich alles so läuft wie wir uns
das vorgestellt hatten (in 10 Jahren hat man wahrscheinlich per default
einen kleinen Roboter im Serverraum stehen, der sowas für einen
erledigen kann) ... dann fehlt zu guter letzt nur noch eine externe
USB-Platte, die ich getrennt per *Netzteil* an/abschalten kann, aber das
ist das kleinste Problem... :)

> /pfad/zum/backupprogramm --parameter
Ja, so habe ich es jetzt gemacht. Das script regelt mount/unmount von
selbst...

> Das bringt auch das ganze in einen sauberen zeitlichen Ablauf.
> <pan.2009.02...@stulpi.dyndns.org> hast Du gelesen?

Hmm -- funktioniert hier irgendwie nicht. da bekomme ich ein mailto:...
(mit Thunderbird als Newsreader...)

So long,
Michael

Pit Kobel

unread,
Feb 8, 2009, 4:01:10 AM2/8/09
to
On Sun, 08 Feb 2009 09:37:39 +0100, M. Hagedorn wrote:

>> <pan.2009.02...@stulpi.dyndns.org> hast Du gelesen?
> Hmm -- funktioniert hier irgendwie nicht. da bekomme ich ein mailto:...
> (mit Thunderbird als Newsreader...)

Ist ja auch keine Mailadresse, sondern eine Message-ID. Das war meine
Antwort auf Luz Golke, in der ich befürchtete, dass irgendein Automount-
Mechanismus Dir in die Quere Kommt.

news://<pan.2009.02...@stulpi.dyndns.org> könnte vielleicht
funktionieren.

NDT
Pit

M. Hagedorn

unread,
Feb 8, 2009, 4:06:46 AM2/8/09
to
> Ist ja auch keine Mailadresse, sondern eine Message-ID.
Schon klar aber mein Thunderbird löst das trotzdem falsch auf :(
Da steht zwar
> news://<pan.2009.02...@stulpi.dyndns.org>
aber wenn ich da mit der Maus drauf bin, steht ganz unten wieder
mailto://.... komisch...

Michael Schuerig

unread,
Feb 8, 2009, 6:12:33 AM2/8/09
to
M. Hagedorn wrote:

> if ! USB="$(/sbin/findfs UUID=nummer)" ;
> then echo "USB-Platte kontrollieren" | mail -s "Backup-Warnung" root
> exit 1
> else

Dein Backup-Skript schlägt mit einem bestimmten Status fehl, wenn es die
Platte nicht mounten kann, oder? Das sollte eigentlich genügen, wenn du
das Skript explizit, also nicht per cron, startest und dann den Status
auswertest.

> #Wie realisert man ein SICHERES ausschalten nach dem Backup?
>
> #Umount überprüfen -- evtl while-Schleife?

Gibt es irgendeinen guten, vorhersehbaren Grund, weshalb umount beim
ersten Versuch fehlschlagen könnte? Wenn nicht, dann verschleierst du
Probleme möglicherweise nur durch erneute Versuche. Wenn ein Fehler
auftritt, lass die Platte eingeschaltet, dann ist später die Diagnose
einfacher. Wenn ich das richtig sehe, ist das Ein-/Ausschalten der
Platte eine (Energie-)Optimierung, die du in Einzelfällen auch mal
weglassen kannst.

Michael

--
Michael Schuerig
mailto:mic...@schuerig.de
http://www.schuerig.de/michael/

0 new messages