| 
 
				
					| 
  
  
    | Autor | Nachricht |  
    |  | 
        
					| Titel: Auto Backup auf Usbstick mit udev  Verfasst 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
 |  
         
	        |  |  |  
    |  |  
    |  |  
    |  | 
        
          |   | Titel: Auto Backup auf Usbstick mit udev  Verfasst 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
 |  
         
	        |  |  |  
    |  |  
    |  |  
    |  | 
        
					| Titel:  Verfasst 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
 |  
         
	        |  |  |  
    |  |  
    |  |  
    |  | 
        
					| Titel:  Verfasst 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
 |  
         
	        |  |  |  
    |  |  
    |  |  
    |  | 
        
					| Titel:  Verfasst 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
 |  
         
	        |  |  |  
    |  |  
    |  |  
    |  |  |  |