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:
# 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.
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.
> 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 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?
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...
> 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:
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
> 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.
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...
> 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...
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?
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...
Das bringt auch das ganze in einen sauberen zeitlichen Ablauf.
<pan.2009.02.07.13.31...@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...
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.07.13.31...@stulpi.dyndns.org> hast Du gelesen?
Hmm -- funktioniert hier irgendwie nicht. da bekomme ich ein mailto:... (mit Thunderbird als Newsreader...)
On Sun, 08 Feb 2009 09:37:39 +0100, M. Hagedorn wrote: >> <pan.2009.02.07.13.31...@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.
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.