ubuntuusers.de

Backup mit RSYNC

Status: Gelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

Mobs

Anmeldungsdatum:
13. März 2018

Beiträge: 9

Hallo Forum,

gleich zu allererst: Ich bin recht in der Linux-Welt, also bitte gewährt mir erstmal "Welpenschutz" 😀

Folgende Ausgangslage:

Ein Rechner soll ein Backup eines Ordners via RSYNC und SSH auf eine entfernte Synology DiskStation 112J machen.

Als Backupscript habe ich das hier genommen:

  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=(/root /etc /home /boot )
TARGET="/media/backup"

# 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="user@domain"

#SSHUSER="sshuser"
#FROMSSH="fromssh-server"
#TOSSH="tossh-server"
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

Das scheint eigentlich auch ganz gut zu funktionieren, aber wenn ich mir die Log Datei anschaue, steht da folgendes:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Di 13. Mär 13:33:28 CET 2018
/usr/bin/dpkg --get-selections | /usr/bin/awk '!/deinstall|purge|hold/'|/usr/bin/cut -f1 | /usr/bin/tr '\n' ' '
accountsservice acl acpid adduser apparmor apport apport-symptoms apt apt-transport-https apt-utils at attr base-files base-passwd bash bash-completion bcache-tools bind9-host bsdm$
sending incremental file list
created directory /volume1/ubuntu_server/13
--link-dest arg does not exist: /volume1/ubuntu_server/last
/home/
/home/MEINNAME/
/home/MEINNAME/MEINORDNER/

sent 150,814 bytes  received 300 bytes  13,140.35 bytes/sec
total size is 150,079  speedup is 0.99
/usr/bin/ssh -p 22 -l admin DYNDNSSERVERADRESSE /bin/ln -nsf /volume1/ubuntu_server/13 /volume1/ubuntu_server/last
Permission denied, please try again.
Di 13. Mär 13:33:47 CET 2018

Wenn ich das richtig deute, gibts hier ein Problem mit der Erstellung des Hard-Links? Könnt Ihr mir bitte weiterhelfen?

Bearbeitet von sebix:

Versionsangabe korrigiert.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

Dieses Skript wieder... Ich wollte das immer mal neu machen, aber mir fehlt einfach die Zeit dazu. ☹

Ganz ehrlich, an Deiner Stelle würde ich lieber Back in Time nutzen. Das nutzt auch rsync unten drunter und erzeugt Hardlinks für unveränderte Dateien (platzsparend!). Du kannst regelmäßige Ausführung planen, und es gibt eine Kommandozeilenversion. Das ganze wird mit einer ansprechenden graphischen Oberfläche konfiguriert.

Mobs

(Themenstarter)

Anmeldungsdatum:
13. März 2018

Beiträge: 9

Danke für deinen Tipp mit Back in Time ☺ Leider gibts da aber glaube ich keine "Terminal"-Version davon, oder? ☹ Ich hätte vllt noch erwähnen sollen, dass ich die Ubuntu Server Version ohne GUI habe 🙄

Vielleicht hilft euch das etwas:

Wenn ich die "kleine" Version des Skripts laufen lasse, steht folgendes in der Konsole:

1
ln: Die symbolische Verknüpfung 'ZIELSERVER/volume1/ubuntu_server/last' konnte nicht angelegt werden: Datei oder Verzeichnis nicht gefunden

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

Mobs schrieb:

Danke für deinen Tipp mit Back in Time ☺ Leider gibts da aber glaube ich keine "Terminal"-Version davon, oder?

rklm schrieb:

Du kannst regelmäßige Ausführung planen, und es gibt eine Kommandozeilenversion.

Mobs schrieb:

☹ Ich hätte vllt noch erwähnen sollen, dass ich die Ubuntu Server Version ohne GUI habe 🙄

Ja, solche Informationen sind immer total hilfreich. 👍

Wenn ich die "kleine" Version des Skripts laufen lasse, steht folgendes in der Konsole:

1
ln: Die symbolische Verknüpfung 'ZIELSERVER/volume1/ubuntu_server/last' konnte nicht angelegt werden: Datei oder Verzeichnis nicht gefunden

Möglicherweise existiert /volume1/ubuntu_server nicht oder gar /volume1.

Mobs

(Themenstarter)

Anmeldungsdatum:
13. März 2018

Beiträge: 9

rklm schrieb:

Möglicherweise existiert /volume1/ubuntu_server nicht oder gar /volume1.

Mhm, doch das gibts! Es wird sogar in das Verzeichnis reingeschrieben 🙄

Das hier ist das vollständige Script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/sh

quelle=/home/MEINNAME/ORDNER/
ziel=admin@ZIELSERVER:/volume1/ubuntu_server/
heute=$(date +%Y-%m-%d)

rsync -avR -e ssh --delete "${quelle}"  "${ziel}${heute}/" --link-dest="${ziel}last/"
ln -nsf "${ziel}${heute}" "${ziel}last"

exit 0

Und das wird bei der Ausführung ausgeworfen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
admin@ZIELSERVERS's password: 
sending incremental file list
created directory /volume1/ubuntu_server/2018-03-13
--link-dest arg does not exist: admin@ZIELSERVER:/volume1/ubuntu_server/last/
/home/
/home/MEINNAME/
/home/MEINNAME/ORDNER/
/home/MEINNAME/ORDNER/... (absichtlich gekürzt)
/home/MEINNAME/ORDNER/... (absichtlich gekürzt)

sent 150,814 bytes  received 341 bytes  13,143.91 bytes/sec
total size is 150,079  speedup is 0.99
ln: Die symbolische Verknüpfung 'admin@ZIELSERVER:/volume1/ubuntu_server/last' konnte nicht angelegt werden: Datei oder Verzeichnis nicht gefunden

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

Vielleicht ein Problem mit Berechtigungen? Was sagt denn

1
ssh admin@ZIELSERVER ls -laF /volume1/ubuntu_server

Mobs

(Themenstarter)

Anmeldungsdatum:
13. März 2018

Beiträge: 9

Das dachte ich mir auch schon... Aber ich arbeite doch schon überall als Admin?

Auf den Befehl kommt nur:

1
Permission denied, please try again.

Also scheints wohl doch an den Rechten zu liegen. Aber ich wüsste nicht, wie ich dem Adminbenutzer noch "mehr" Berechtigungen geben sollte ☹

EDIT:

Hab mich wohl beim Passwort vertippt:

Jetzt erhalte ich das gleiche, wie wenn ich direkt auf der DS112J angemeldet bin:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
MEINNAME@ubuntuserver:~$ ssh admin@ZIELSERVER ls -laF /volume1/ubuntu_server
admin@ZIELSERVER's password: 
total 32
drwxrwxrwx+  5 root  root  4096 Mar 13 16:37 #recycle/
drwxrwxrwx+  8 root  root  4096 Mar 13 16:37 ./
drwxr-xr-x  18 root  root  4096 Mar 13 00:40 ../
drwxrwxrwx+  3 admin users 4096 Mar 13 16:37 2018-03-13/
drwxrwxrwx+  3 admin users 4096 Mar 13 14:57 2018-03-13-14-57-S%/
drwxrwxrwx+  3 admin users 4096 Mar 13 15:07 2018-03-13-15-07-S%/
drwxrwxrwx+  3 admin users 4096 Mar 13 15:50 2018-03-13-15-50-S%/
drwxrwxrwx+  3 root  root  4096 Mar 13 00:29 @eaDir/

Mobs

(Themenstarter)

Anmeldungsdatum:
13. März 2018

Beiträge: 9

Führe ich deinen Befehl auf der Synology Diskstation aus, erhalte ich folgendes:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
admin@diskstation112j:~$ ls -laF /volume1/ubuntu_server
total 32
drwxrwxrwx+  8 root  root  4096 Mar 13 16:37 ./
drwxr-xr-x  18 root  root  4096 Mar 13 00:40 ../
drwxrwxrwx+  3 admin users 4096 Mar 13 16:37 2018-03-13/
drwxrwxrwx+  3 admin users 4096 Mar 13 14:57 2018-03-13-14-57-S%/
drwxrwxrwx+  3 admin users 4096 Mar 13 15:07 2018-03-13-15-07-S%/
drwxrwxrwx+  3 admin users 4096 Mar 13 15:50 2018-03-13-15-50-S%/
drwxrwxrwx+  3 root  root  4096 Mar 13 00:29 @eaDir/
drwxrwxrwx+  5 root  root  4096 Mar 13 16:37 #recycle/

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

Es kann an den Rechten (Gruppen) von Nutzer "admin" liegen oder an ACL (Manpage).

Bekommst Du den selben Fehler mit ssh admin@ZIEL mkdir /volume1/ubuntu_server/last oder ssh admin@ZIEL touch /volume1/ubuntu_server/last?

Mobs

(Themenstarter)

Anmeldungsdatum:
13. März 2018

Beiträge: 9

rklm schrieb:

Bekommst Du den selben Fehler mit ssh admin@ZIEL mkdir /volume1/ubuntu_server/last oder ssh admin@ZIEL touch /volume1/ubuntu_server/last?

Nein, hier kann ich das Verzeichnis ohne Probleme erstellen!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

Mobs schrieb:

rklm schrieb:

Bekommst Du den selben Fehler mit ssh admin@ZIEL mkdir /volume1/ubuntu_server/last oder ssh admin@ZIEL touch /volume1/ubuntu_server/last?

Nein, hier kann ich das Verzeichnis ohne Probleme erstellen!

Au Mann, ich Blindfisch, Du nutzt den ln falsch:

Mobs schrieb:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/sh

quelle=/home/MEINNAME/ORDNER/
ziel=admin@ZIELSERVER:/volume1/ubuntu_server/
heute=$(date +%Y-%m-%d)

rsync -avR -e ssh --delete "${quelle}"  "${ziel}${heute}/" --link-dest="${ziel}last/"
ln -nsf "${ziel}${heute}" "${ziel}last"

exit 0

Der ln muss per ssh ausgeführt werden - das soll ja auf dem Zielsystem passieren. Also

1
ssh admin@ZIELSERVER ln -nsf "$heute" /volume1/ubuntu_server/last

Auf jeden Fall sollte man den ln nur machen, wenn der rsync erfolgreich war! Also mit && hinten dran hängen oder vorne im Skript diese Zeile einfügen:

1
set -e

Es lohnt sich noch mal zu überlegen, was passiert, wenn Du Dein Skript zwei Mal am selben Tag laufen lässt. Im Moment würde ich sagen "kein Problem", aber ich habe nicht viele Gedanken dran verschwendet.

Mobs

(Themenstarter)

Anmeldungsdatum:
13. März 2018

Beiträge: 9

Hi rklm,

sorry für die späte Antwort :S Gab Einiges zu tun...

1
ssh admin@ZIELSERVER ln -nsf "$heute" /volume1/ubuntu_server/last

Daran UND an den Gruppenrechten der Synology hats gelegen! Vielen Dank für deine Hilfe ☺ Es klappt jetzt!

Auch wenns jetzt klappt, habe ich mich jedoch dazu entschlossen Borg Backup für die Sache zu verwenden. Das gefällt mir wesentlich besser und ist (meiner Meinung nach) die einfachere Lösung für Ubuntu-Anfänger wie mich ☺

Antworten |