28.03.2024, 21:48 UhrDeutsch | English
Hallo Gast [ Registrierung | Anmelden ]

Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen Druckerfreundliche Version Einloggen, um private Nachrichten zu lesen Nächstes Thema anzeigen
Autor Nachricht
blauweiss
Titel: Auto Backup auf Usbstick mit udev  BeitragVerfasst am: 29.04.2007, 20:17 Uhr



Anmeldung: 12. Mar 2005
Beiträge: 368

Da ich mich nach dem Problem hier zwangsweise mit udev, hal und co beschäftigt habe,
kam mir beim Lesen diverser Artikel die Idee, das es doch möglich sein müßte,
beim Einstöpseln eines bestimmten Usbsticks automatisch ein Backup wichtiger
Ordner und Dateien auszulösen und auf dem Stick zu speichern.
Die 4 Schritte, die zum Erfolg geführt haben, hab ich parallel notiert und poste das Ganze mal.
1. Usbstick vorbereiten
2. Usbstick eindeutig benennen
3. Udev Regel schreiben
4. Backup script erstellen

1. Usbstick vorbereiten
Usbstick einstecken, das KDE-Fensterchen was nun aufgeht,
mit 'nichts unternehmen' und 'dauerhaft speichern' beantworten.
Gerätedatei mit 'dmesg' herausfinden, oder einfach mit der Maus über das entsprechende Icon fahren
In meinem Fall ist der Usbstick als '/dev/sdg1' erkannt worden, bitte an die eigenen Gegebenheiten anpassen.
Formatieren mit einem Linuxdateisystem, um die Rechte beim Backup beizubehalten,
hab mich für ext2 entschieden, Dateisystem erstellen:
Code:
mke2fs /dev/sdg1

Usbstick kurz rausziehen und wieder einstecken, auf das Icon klicken, um ihn zu mounten
Mount Ordner ist z.B.: /media/disk
Backup Ordner erstellen und ihm Schreibrechte für alle geben,
letzteres ist vielleicht nicht nötig, aber was solls.
Code:
mkdir /media/disk/backup
chmod 777 /media/disk/backup

Damit ist der Stick bereit Daten aufzunehmen

2. Dem Usbstick einen eindeutigen Namen (z.B.: backup2904) geben,
zur einwandfreien Identifizierung später im script:
Code:
e2label /dev/sdg1 backup2904

3. Udev Regel schreiben
Informationen über den Stick abfragen:
Code:
udevinfo -a -p $(udevinfo -q path -n sdg1)

Ausgabe (stark verkürzt) sieht ungefähr so aus
Code:
    KERNEL=="sdg1"
    SUBSYSTEM=="block"
    ATTRS{serial}=="5B7312001005"

Falls der Stick eine Seriennummer hat, kann man sich die o.g. Namensgebung sparen,
er liesse sich hierüber wahrscheinlich einwandfrei identifizieren, hat aber leider nicht jeder,
also werte ich hier auch nur KERNEL und SUBSYSTEM aus und lass dann das backup script laufen,
die entsprechende udev -Regel schreiben, als root:
Code:
echo 'KERNEL=="sd[g-i]1", SUBSYSTEM=="block", IMPORT{program}="vol_id --export %N", ACTION=="add", ENV{ID_FS_LABEL}=="backup2904", RUN+="/usr/local/bin/backup2904 %k"' > /etc/udev/rules.d/00_backup.rules

Der Dateiname der Regel sollte schon mit '00...' anfangen, damit sie als erstes ausgeführt wird
und natürlich auch die Endung '.rules' haben.
"sd[g-i]1" begrenzt die Devicenamen der Sticks auf sdg1, sdh1 und sdi1
IMPORT{program}="vol_id --export %N" das Programm 'vol_id' wird ausgeführt und gibt einige Variablen zur Auswertung zurück,
dies ist in einer root Konsole leicht nachvollziehbar mit dem Befehl
/lib/udev/vol_id --export /dev/sdg1
ACTION=="add" sorgt dafür das das Skript nur nach Einstecken des Sticks ausgeführt wird
ENV{ID_FS_LABEL}=="backup2904" hier wird nachgefragt, ob es der "richtige" Stick ist
RUN+="/usr/local/bin/backup2904 %k Skript ausführen, %k ist der Devicename, der dem Skript als Parameter mitgegeben wird
Nach Ändern oder Neuerstellen einer udev -Regel, sollte oder muß das System neugestartet werden.

4. ausführbares script /usr/local/bin/backup2904 erstellen:
der user sollte der Gruppe 'staff' angehören, sonst müssen die nächsten Schritte als root gemacht werden:
Code:
echo '#!/bin/sh' > /usr/local/bin/backup2904
chmod 755 /usr/local/bin/backup2904

Datei mit kwrite editieren:
Code:
kwrite /usr/local/bin/backup2904

Zunächst nachfragen ob das Backup durchgeführt werden soll,
dann wird der Stick gemountet, der Mountordner erfragt und der Zielordner festgelegt, zuletzt gibt es eine Vollzugsmeldung.
Es folgen einige Beispiele (natürlich selber anpassen) zum Sichern mit 'rsync'.
Code:
#!/bin/sh

export XAUTHORITY=/home/blauweiss/.Xauthority
export DISPLAY=:0.0
Xdialog --yesno "Backup auf /dev/$1 durchführen?" 5 40
if [ $? -gt 0 ]; then
   exit 0
fi

pmount /dev/$1
MOUNTORDNER="$(grep "/dev/$1 " /etc/mtab | awk '{print $2}')/backup"
rsync -a /home/blauweiss/.bashrc "$MOUNTORDNER/home/" 2>/dev/null
rsync -a /home/blauweiss/.gimp-2.2/{plug-ins,scripts,brushes} "$MOUNTORDNER/home/.gimp-2.2/" 2>/dev/null
rsync -a --delete /home/blauweiss/.mozilla "$MOUNTORDNER/home/" 2>/dev/null
rsync -a --delete /home/blauweiss/.mozilla-thunderbird "$MOUNTORDNER/home/" 2>/dev/null
   # Hab mir angewöhnt unwichtige Dateien und Ordner in /home/blauweiss/tmp
   # mit einem Unterstrich als erstes Zeichen zu benennen,
   # diese werden im nächsten Befehl von der Sicherung ausgenommen:
rsync -a --delete --exclude "_*" /home/blauweiss/tmp "$MOUNTORDNER/home/" 2>/dev/null
rsync -a /etc/fstab "$MOUNTORDNER/etc/" 2>/dev/null
rsync -a /etc/apt/sources.list "$MOUNTPUNKT/etc/apt/" 2>/dev/null
sync
pumount /dev/$1
Xdialog --msgbox "Backup durchgeführt! \nStick kann abgezogen werden" 7 40

Da rsync wohl nicht mehr als einen Ordner zugleich im Zielverzeichnis erstellen kann,
es sind keine zusätzlichen Unterordner gleichzeitig möglich?,
ist auch hierbei eine gewisse Reihenfolge einzuhalten,
oder man behilft sich so, wenn man z.B. das Backup-script selbst sichern möchte:
Code:
mkdir -p $MOUNTPUNKT/usr/local/bin
rsync -a /usr/local/bin/backup2904 "$MOUNTPUNKT/usr/local/bin/" 2>/dev/null

Das wars, zur Sicherheit das System nochmal neustarten (Änderungen am Script erfordern keinen Neustart)
Beim nächsten Einstöpseln dieses "Backup-Sticks", sollte auf Nachfrage ein Backup eingeleitet werden.
Vor dem Abziehen warten bis das Lämpchen am Stick aus bleibt.
Quellen:
http://www.tu-chemnitz.de/urz/kurse/unt ... vices.html
http://www.reactivated.net/writing_udev_rules.html
http://forums.gentoo.org/viewtopic-t-350769.html
http://wiki.ubuntuusers.de/udev?highlight=%28udev%29

_________________
Gruss an alle Kanotix-Fans, blauweiss


Zuletzt bearbeitet von blauweiss am 05.06.2007, 18:23 Uhr, insgesamt 3 Male bearbeitet
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
horo
25 Titel: Auto Backup auf Usbstick mit udev  BeitragVerfasst am: 30.04.2007, 09:13 Uhr



Anmeldung: 17. Dez 2003
Beiträge: 700
Wohnort: Berlin
Zitat:

Vor dem Abziehen warten bis das Lämpchen am Stick aus bleibt.

Besser vorher "sync" ausführen oder Rechtsklick->Sicher entfernen
Der Befehl "sync" könnte z.B. auch im Skript stehen.

Ciao Martin

_________________
omnia vincit pecunia
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
blauweiss
Titel:   BeitragVerfasst am: 30.04.2007, 10:04 Uhr



Anmeldung: 12. Mar 2005
Beiträge: 368

Danke für den Hinweis, denk mir mal der 'sync' Befehl sollte als letztes
ausgeführt werden, ändere das mal und auch die 'if' Abfrage war in der
Syntax falsch.

_________________
Gruss an alle Kanotix-Fans, blauweiss
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
blauweiss
Titel:   BeitragVerfasst am: 30.04.2007, 12:49 Uhr



Anmeldung: 12. Mar 2005
Beiträge: 368

Nochn paar kleine Änderungen:
ACTION=="add" der udev Regel hinzugefügt und
und eine Sicherheitsabfrage, ob das Backup ausgeführt werden soll.

_________________
Gruss an alle Kanotix-Fans, blauweiss
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
blauweiss
Titel:   BeitragVerfasst am: 05.06.2007, 18:25 Uhr



Anmeldung: 12. Mar 2005
Beiträge: 368

Man lernt ja nie aus...
Hab den ersten Post nochmals geändert:
Die 'if then' Abfrage im Skript, ob es sich um den backup2904 USB-Stick handelt,
kann man sich sparen, auch dies läßt sich mit einer udev-Regel erfassen
IMPORT{program}="vol_id --export %N"
und anschl.
ENV{ID_FS_LABEL}=="backup2904"
und noch eine Vollzugsmeldung hinzugefügt.

_________________
Gruss an alle Kanotix-Fans, blauweiss
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
Beiträge vom vorherigen Thema anzeigen:     
Gehe zu:  
Alle Zeiten sind GMT + 1 Stunde
Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen Druckerfreundliche Version Einloggen, um private Nachrichten zu lesen Nächstes Thema anzeigen
PNphpBB2 © 2003-2007 
 
Deutsch | English
Logos and trademarks are the property of their respective owners, comments are property of their posters, the rest is © 2004 - 2006 by Jörg Schirottke (Kano).
Consult Impressum and Legal Terms for details. Kanotix is Free Software released under the GNU/GPL license.
This CMS is powered by PostNuke, all themes used at this site are released under the GNU/GPL license. designed and hosted by w3you. Our web server is running on Kanotix64-2006.