ubuntuusers.de

Probleme mit dem rsync Skript aus dem Wikiartikel

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

bumppo

Anmeldungsdatum:
11. März 2009

Beiträge: Zähle...

Moin Moin,

ich möchte eine USB Festplatte als Backupmedium verwenden, wobei das Backupskript wie in den einschlägigen Wiki Artikeln beschrieben durch einen udev hook gestartet werden soll. Die udev Regel ist soweit in Ordnung, der Link wird erzeugt, die Platte eingehängt (Optionen users,rw) und das Skript gestartet (geprüft durch eine /usr/bin/logger Zeile am Anfang des Skriptes).

Leider wird jedoch weder ein Backup noch eine Testdatei (echo test > /mnt/backup/test) auf die USB Platte geschrieben. In meinem Homeverzeichnis wird die Testdatei jedoch angelegt, weshalb ich ein Problem mit den Zugriffsrechten vermute. In /mnt/backup, wo die USB Platte eingebunden wird, sind alle Schreibrechte gesetzt. Ich habe es auch schon mit dem setuid bit bei dem Skript versucht, mit mir selbst als Besitzer, mit Root als Besitzer, usw.

Hat jemand noch eine Idee?

Vielen Dank, Michael

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21852

Wohnort: Lorchhausen im schönen Rheingau

Hast du absolute oder relative Pfade verwendet? Ich weiß nicht, ob udev die PATH-Variable beachtet. Läuft das Skript, wenn du es händisch aufrufst?

bumppo

(Themenstarter)

Anmeldungsdatum:
11. März 2009

Beiträge: 11

Habe hier im Forum an verschiedenen Stellen den Hinweis gelesen, dass udev absolute Pfadangaben verlangt. Darauf habe ich geachtet. Manuell aufgerufen funktioniert das Skript. Es gibt hier eine Reihe von ähnlichen Threads, denen ich wertvolle Hinweise entnommen habe - mit denen ich das Problem aber dennoch leider bislang nicht lösen konnte.

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21852

Wohnort: Lorchhausen im schönen Rheingau

Dann zeig doch mal das Skript her

bumppo

(Themenstarter)

Anmeldungsdatum:
11. März 2009

Beiträge: 11

Sorry, ich war leider ein paar Tage außer Gefecht gesetzt. Hier ist das Skript:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/bash
# Simple backup with rsync (version 2011-03-10)

/usr/bin/logger Backup Skript wurde aufgerufen!
echo Testdatei in Verzeichnis /mnt/backup erzeugt! > /mnt/backup/test
echo Testdatei in Verzeichnis /home/michael erzeugt! > /home/michael/test

# sources and target MUST end WITH slash
SOURCES="/boot/ /etc/ /root/ /home/"
TARGET="/media/backup/"

RSYNCCONF="--delete --exclude-from=/home/michael/Backup/rsync.exclude"

MOUNTPOINT="/media/backup"     # mountpoint must end WITHOUT slash
PACKAGES=0	
MONTHROTATE=1
MAILREC="michael@localhost"

### do not edit ###

MOUNT="/bin/mount"; FGREP="/bin/fgrep"
LN="/bin/ln"; ECHO="/bin/echo"; DATE="/bin/date"; RM="/bin/rm"
DPKG="/usr/bin/dpkg"; AWK="/usr/bin/awk"; MAIL="/usr/bin/mail"
CUT="/usr/bin/cut"; TR="/usr/bin/tr"; RSYNC="/usr/bin/rsync"
LAST="last"; INC="--link-dest=../$LAST"

LOG=$0.log
$DATE > $LOG

if [ $PACKAGES -eq 1 ]; then
  $ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'|$CUT -f1 | $TR '\n' ' '" >> $LOG
  $DPKG --get-selections | $AWK '!/deinstall|purge|hold/'|$CUT -f1 |$TR '\n' ' '  >> $LOG  2>&1 
fi

MOUNTED=$($MOUNT | $FGREP "$MOUNTPOINT");
if [ -z "$MOUNTPOINT" ] || [ -n "$MOUNTED" ]; then
  if [ $MONTHROTATE -eq 1 ]; then
    TODAY=$($DATE +%d)
  else
    TODAY=$($DATE +%y%m%d)
  fi
  for SOURCE in $($ECHO $SOURCES); do
    if [ -z "$S" ]; then
      $ECHO "$RSYNC -avR $SOURCE $RSYNCCONF $TARGET$TODAY $INC"  >> $LOG 
      $RSYNC -avR $SOURCE $RSYNCCONF $TARGET$TODAY $INC  >> $LOG 2>&1 
      if [ $? -ne 0 ]; then
        ERROR=1
      fi 
    fi
  done
else
   $ECHO "$MOUNTPOINT not mounted" >> $LOG
   ERROR=1
fi

$DATE >> $LOG

if [ -n "$MAILREC" ]; then
  if [ $ERROR ];then
    $MAIL -s "Error Backup $LOG" $MAILREC < $LOG
  else
    $MAIL -s "Backup $LOG" $MAILREC < $LOG
  fi
fi

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21852

Wohnort: Lorchhausen im schönen Rheingau

Und die echos klappen nicht? 😉 Kein Wunder, denn sie brechen nach dem ersten Space wieder ab, wenn du den text nicht in Anführungszeichen packst. Lies mal ein paar Scripting-Einführungen, um solche Fehler zukünftig zu vermeiden.

uname

Anmeldungsdatum:
28. März 2007

Beiträge: 6030

Wohnort: 127.0.0.1

Habe hier im Forum an verschiedenen Stellen den Hinweis gelesen, dass udev absolute Pfadangaben verlangt.

Poste doch mal wo du das wie genau eingetragen hast.

Manuell aufgerufen funktioniert das Skript.

Also das Backup läuft korrekt durch, obwohl du "TARGET" falsch gesetzt hast?

bumppo

(Themenstarter)

Anmeldungsdatum:
11. März 2009

Beiträge: 11

Das echo auf das Backuplaufwerk klappt nicht, das echo auf meine Homepartition schon - auch ohne Anführungszeichen.

Hier die entsprechende udev Regel, die das Skript aufruft:

# USB HDD Backup Device
# /etc/udev/rules.d/30-usb-backup.rules
SUBSYSTEMS=="usb", ACTION=="add", KERNEL=="sdb?", ATTRS{serial}=="2GH163SW", SYMLINK+="backup", RUN+="/usr/local/bin/backup"

@ uname: Danke für den Hinweis mit dem "TARGET". Die USB Platte wird tatsächlich als /media/backup gemountet, /mnt/backup ist falsch. Habe das soweit korrigiert, leider ändert das nichts am Ergebnis. Auch das echo auf /media/backup funzt nicht.

bumppo

(Themenstarter)

Anmeldungsdatum:
11. März 2009

Beiträge: 11

Uff - habe gerade die Lösung gefunden. Das Skript wurde offenbar aufgerufen, bevor die Platte gemountet war 🙄 Ein entsprechendes RUN+="/bin/mount /dev/backup" in der Udev Regel (vor dem Skriptaufruf 😀 ) und es rennt! Trotzdem vielen Dank für die Unterstützung!

Antworten |