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
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: | ln: Die symbolische Verknüpfung 'ZIELSERVER/volume1/ubuntu_server/last' konnte nicht angelegt werden: Datei oder Verzeichnis nicht gefunden
|
|
rklm
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: | 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:
| #!/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
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13174
|
Vielleicht ein Problem mit Berechtigungen? Was sagt denn | 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: | 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:
| 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: | 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
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
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:
| #!/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 | 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: 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... | 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 ☺
|