ubuntuusers.de

rsync-Script aus dem wiki mit Fehlermeldung

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

schokoholic

Anmeldungsdatum:
30. Januar 2020

Beiträge: Zähle...

Hallo,

ich nutze das RSYNC-Backup Script aus dem wiki: Skripte/Backup mit RSYNC (Abschnitt „Das-Skript“) Das hat auch ne Weile gut funktioniert. Ich hab jetzt die Feiertage genutzt, um das Backup mal zu checken und festgestellt, dass das Script schon ne Weile nicht mehr gelaufen ist.

Die backup.sh.log zeigt folgenden Fehler:

So 7. Jan 00:56:58 CET 2024
/usr/bin/rsync -e "/usr/bin/ssh -p 22 -l syncer" -avR "/home/user/Bilder" --delete "192.168.12.100:/Backup/meins/07" --link-dest=/Backup/meins/last 
sending incremental file list
rsync: mkdir "/home/syncer/"/Backup/meins/"07" failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(681) [Receiver=3.1.3]
/usr/bin/rsync -e "/usr/bin/ssh -p 22 -l syncer" -avR "/home/user/Dokumente" --delete "192.168.12.100:/Backup/meins/07" --link-dest=/Backup/simone/last 
sending incremental file list
rsync: mkdir "/home/syncer/"/Backup/meins/"07" failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(681) [Receiver=3.1.3]
...

Was ich zur Fehleranalyse versucht habe: Ich hab mich manuell per SSH vom Client auf dem Server verbunden. Das klappt. Wenn ich den Befehl

/usr/bin/rsync -e "/usr/bin/ssh -p 22 -l syncer" -avR "/home/user/Bilder" --delete "192.168.12.100:/Backup/meins/07" --link-dest=/Backup/meins/last 

manuell vom Client absetze, läuft das rsync-Kommando auch ohne Probleme durch.

Wenn ich das fehlende Verzeichnis auf dem Server von Hand anlege läuft das Script nicht durch, gleiche Fehlermeldungen.

Bei der Fehlersuche bin ich im Netz hierüber gestolpert: https://github.com/bit-team/backintime/issues/1253#issuecomment-1125835665 Da ist von einer Änderung bei rsync die Rede, die was damit zu tun haben könnte. Ich geb zu, dass der untere Teil des Scriptes für mich etwas undurchsichtig ist und ich nicht weiß, was ich da wie anpassen müsste, um rauszufinden, ob es damit was zu tun hat. Weiß das vielleicht jemand von euch? Oder habt ihr sonst noch ne Idee, woran es liegen könnte, dass das Script nicht mehr läuft?

Hier zur Vollständigkeit meine angepasstes Script aus dem Wiki-Artikel:

  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
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
#!/bin/bash
# Simple backup with rsync
# local-mode, tossh-mode, fromssh-mode

SOURCES=(/home/user/Bilder /home/user/Dokumente /media/Daten/Smartphone /etc/fstab)
TARGET="/Backup/meins"

# edit or comment with "#"
#LISTPACKAGES=listdebianpackages        # local-mode and tossh-mode
MONTHROTATE=monthrotate                 # use DD instead of YYMMDD

RSYNCCONF=(--delete)
#MOUNTPOINT="/media/daten"               # check local mountpoint
MAILREC="meine.mailadresse@gmx.de"

SSHUSER="syncer"
#FROMSSH="fromssh-server"
TOSSH="192.168.12.100"
SSHPORT=22

### do not edit ###

MOUNT="/bin/mount"; FGREP="/bin/fgrep"; SSH="/usr/bin/ssh"
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=$TARGET/$LAST"

LOG=$0.log
$DATE > $LOG

if [ "${TARGET:${#TARGET}-1:1}" != "/" ]; then
  TARGET=$TARGET/
fi

if [ "$LISTPACKAGES" ] && [ -z "$FROMSSH" ]; 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

if [ "$MOUNTPOINT" ]; then
  MOUNTED=$($MOUNT | $FGREP "$MOUNTPOINT");
fi

if [ -z "$MOUNTPOINT" ] || [ "$MOUNTED" ]; then
  if [ -z "$MONTHROTATE" ]; then
    TODAY=$($DATE +%y%m%d)
  else
    TODAY=$($DATE +%d)
  fi

  if [ "$SSHUSER" ] && [ "$SSHPORT" ]; then
    S="$SSH -p $SSHPORT -l $SSHUSER";
  fi

  for SOURCE in "${SOURCES[@]}"
    do
      if [ "$S" ] && [ "$FROMSSH" ] && [ -z "$TOSSH" ]; then
        $ECHO "$RSYNC -e \"$S\" -avR \"$FROMSSH:$SOURCE\" ${RSYNCCONF[@]} $TARGET$TODAY $INC"  >> $LOG 
        $RSYNC -e "$S" -avR "$FROMSSH:$SOURCE" "${RSYNCCONF[@]}" "$TARGET"$TODAY $INC >> $LOG 2>&1 
        if [ $? -ne 0 ]; then
          ERROR=1
        fi 
      fi 
      if [ "$S" ]  && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
        $ECHO "$RSYNC -e \"$S\" -avR \"$SOURCE\" ${RSYNCCONF[@]} \"$TOSSH:$TARGET$TODAY\" $INC " >> $LOG
        $RSYNC -e "$S" -avR "$SOURCE" "${RSYNCCONF[@]}" "$TOSSH:\"$TARGET\"$TODAY" $INC >> $LOG 2>&1 
        if [ $? -ne 0 ]; then
          ERROR=1
        fi 
      fi
      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

  if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
    $ECHO "$SSH -p $SSHPORT -l $SSHUSER $TOSSH $LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG  
    $SSH -p $SSHPORT -l $SSHUSER $TOSSH "$LN -nsf \"$TARGET\"$TODAY \"$TARGET\"$LAST" >> $LOG 2>&1
    if [ $? -ne 0 ]; then
      ERROR=1
    fi 
  fi 
  if ( [ "$S" ] && [ "$FROMSSH" ] && [ -z "$TOSSH" ] ) || ( [ -z "$S" ] );  then
    $ECHO "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
    $LN -nsf "$TARGET"$TODAY "$TARGET"$LAST  >> $LOG 2>&1 
    if [ $? -ne 0 ]; then
      ERROR=1
    fi 
  fi
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

Bearbeitet von sebix:

Forensyntax korrigiert.

Newubunti

Anmeldungsdatum:
16. Februar 2008

Beiträge: 5149

Hallo schokoholic,

Du kannst dem Skript zusätzliche Optionen in der Zeile 12 des Skriptes - also RSYNCCONF= - übergeben. Siehe auch Skripte/Backup mit RSYNC (Abschnitt „Optionen-und-Parameter“). Dort kannst Du die vorgeschlagene Option --old-args hinzufügen.

LG, Newubunti

schokoholic

(Themenstarter)

Anmeldungsdatum:
30. Januar 2020

Beiträge: 12

Newubunti schrieb:

Hallo schokoholic,

Du kannst dem Skript zusätzliche Optionen in der Zeile 12 des Skriptes - also RSYNCCONF= - übergeben. Siehe auch Skripte/Backup mit RSYNC (Abschnitt „Optionen-und-Parameter“). Dort kannst Du die vorgeschlagene Option --old-args hinzufügen.

LG, Newubunti

Damit läuft das Script dann auch wieder durch. Danke für den Hinweis.

Falls noch jemand einen Tipp hat, wo im Script ich was ändern müsste, um ohne "--old-args" das Problem mit den Anführungszeichen in den Griff zu bekommen - gerne her damit.

Antworten |