rsync backup naar stack herstart volledig na reboot

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • schoene
  • Registratie: Maart 2003
  • Laatst online: 13:51
Hallo,

ik heb een bash script die een backup maakt van mijn bestanden op mijn locale debian server naar stack. Dit gebeurt in 2 stappen:

1. met behulp van rdiff-backup wordt een lokale backup gemaakt op een andere schijf. Ik gebruik rdiff-backup omdat ik enerzijds file history wil hebben, maar anderzijds de meest recente versie van een file meteen toegankelijk wil hebben.
2. nadien wordt de rdiff-backup via rsync naar stack gekopieerd. de stack locatie is via webdav (davfs) gemount.
(ik doe dit in 2 stappen omdat ik enerzijds graag lokaal een backup heb, en anderzijds ondervond ik instabiliteit als ik rdiff-backup naar de webdav folder liet backupen)

dit script wordt elke nacht uitgevoerd, en ik krijg na het uitvoeren een mail waardoor ik weet of de backup al dan niet goed verlopen is. Enkel gewijzigde files worden door rsync opnieuw upgeload.

Het script werkt volledig correct, tot op het moment dat ik mijn server herstart: rsync zal dan telkens de volledige backup opnieuw uploaden, ondanks dat de files niet gewijzigd zijn.

het rdiff-backup commando ziet er als volgt uit:
code:
1
rdiff-backup --print-statistics --exclude-symbolic-links "$SOURCE_DIR" "$TARGET_DIR" > "$SINGLE_LOG_FILE" 2> "$SINGLE_ERROR_FILE"

het rsync commando als volgt:
code:
1
rsync -av --delete  "$SOURCE_DIR" "$TARGET_DIR" > "$SINGLE_LOG_FILE" 2> "$SINGLE_ERROR_FILE"

Iemand een idee wat hiervan de oorzaak kan zijn?

Dit is het volledige script:

code:
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
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/bin/bash

# email address to send result to
MAIL_TO=my@address.com

# root directory of logs
ROOT_BACKUPLOGDIR=/location_to_log_directory

#log directory per month
DATE_DIR=$(date '+%Y-%m')
LOG_DIR=$ROOT_BACKUPLOGDIR/$DATE_DIR

mkdir -p "$LOG_DIR"

# timestamp for the filename
DATE=$(date '+%Y-%m-%d_%Hu%M')

#log files containing all logging of all actions
COMPLETE_LOG_FILE=$LOG_DIR/$DATE.log
COMPLETE_ERROR_FILE=$LOG_DIR/$DATE.error

# backup files to local backup directory
BACKUP_DIRS=("files" "fotos" "music")

for BACKUP_DIR in ${BACKUP_DIRS[*]}; do

  SOURCE_DIR=/location_to_local_working_files_dir/$BACKUP_DIR/
  TARGET_DIR=/location_to_local_backup_dir/$BACKUP_DIR/

  SINGLE_LOG_FILE=$LOG_DIR/$DATE.$BACKUP_DIR.log
  SINGLE_ERROR_FILE=$LOG_DIR/$DATE.$BACKUP_DIR.error

  echo "rdiff-backup from $SOURCE_DIR to $TARGET_DIR"

  # perform the backup
  rdiff-backup --print-statistics --exclude-symbolic-links "$SOURCE_DIR" "$TARGET_DIR" > "$SINGLE_LOG_FILE" 2> "$SINGLE_ERROR_FILE"

  # copy log to complete log
  {
    echo ""
    echo "----------------------------------------------------------"
    echo "rdiff-backup from $SOURCE_DIR to $TARGET_DIR"
    echo "----------------------------------------------------------"
    cat "$SINGLE_LOG_FILE"
    echo ""
  } >> "$COMPLETE_LOG_FILE"

  # add errors to complete error log
  ERROR_FILE_SIZE=$(stat -c%s "$SINGLE_ERROR_FILE")

  if [ "$ERROR_FILE_SIZE" != 0 ]
  then
    {
      echo ""
      echo "----------------------------------------------------------"
      echo "rdiff-backup from $SOURCE_DIR to $TARGET_DIR"
      echo "----------------------------------------------------------"
      cat "$SINGLE_ERROR_FILE"
      echo ""
    } >> "$COMPLETE_ERROR_FILE"
  fi

  rm "$SINGLE_LOG_FILE"
  rm "$SINGLE_ERROR_FILE"

done

#upload to stack
UPLOAD_DIRS=("files" "fotos")

for BACKUP_DIR in ${UPLOAD_DIRS[*]}; do

  SOURCE_DIR=/location_to_local_backup_dir/$BACKUP_DIR/
  TARGET_DIR=/location_to_webdav_backup_dir/$BACKUP_DIR/

  SINGLE_LOG_FILE=$LOG_DIR/$DATE.$BACKUP_DIR.upload.log
  SINGLE_ERROR_FILE=$LOG_DIR/$DATE.$BACKUP_DIR.upload.error

  echo "upload (rsync) from $SOURCE_DIR to $TARGET_DIR"

  # perform the upload
  rsync -av --delete  "$SOURCE_DIR" "$TARGET_DIR" > "$SINGLE_LOG_FILE" 2> "$SINGLE_ERROR_FILE"

  # copy log to complete log
  {
    echo ""
    echo "----------------------------------------------------------"
    echo "upload (rsync) from $SOURCE_DIR to $TARGET_DIR"
    echo "----------------------------------------------------------"
    cat "$SINGLE_LOG_FILE"
    echo ""
  }  >> "$COMPLETE_LOG_FILE"

  # add errors to complete error log
  ERROR_FILE_SIZE=$(stat -c%s "$SINGLE_ERROR_FILE")

  if [ "$ERROR_FILE_SIZE" != 0 ]
  then
    {
      echo ""
      echo "----------------------------------------------------------"
      echo "upload (rsync) from $SOURCE_DIR to $TARGET_DIR"
      echo "----------------------------------------------------------"
      cat "$SINGLE_ERROR_FILE"
      echo ""
    } >> "$COMPLETE_ERROR_FILE"
  fi

  rm "$SINGLE_LOG_FILE"
  rm "$SINGLE_ERROR_FILE"

done

if [ -e "$COMPLETE_ERROR_FILE" ];
then
  mail -s "[ERROR] Backup - $DATE" -A "$COMPLETE_LOG_FILE" -A "$COMPLETE_ERROR_FILE" $MAIL_TO < "$COMPLETE_ERROR_FILE"
else
  mail -s "[SUCCESS] Backup - $DATE" -A "$COMPLETE_LOG_FILE" $MAIL_TO < "$COMPLETE_LOG_FILE"
fi

Beste antwoord (via schoene op 21-06-2019 14:14)


  • Dutchess_Nicole
  • Registratie: Augustus 2001
  • Laatst online: 13:18
SFTP weet ik niet maar SCP kan met de -p flag verteld worden dat alle modification en access times en de modes behouden moeten worden.

zie https://linux.die.net/man/1/scp

Ah, net even gekeken en met SFTP is het ook mogelijk door de 'get' of 'put' verbs te gebruiken (naar gelang welke kant het op moet) met de -P flag.

https://linux.die.net/man/1/sftp

Kia E-Niro 2019 Executiveline. OTGW/HA Enthousiasteling.

Alle reacties


Acties:
  • 0 Henk 'm!

  • AlterEgo
  • Registratie: Juli 2001
  • Niet online
Ik heb een keer iets vergelijkbaars gehad met Stack. Toen bleek de datum van de root van $target_dir op 1900 te staan.

Acties:
  • 0 Henk 'm!

  • schoene
  • Registratie: Maart 2003
  • Laatst online: 13:51
Nope, dat is het niet. Het is eerder een beperking van WebDAV denk ik, ik vind gelijkaardige problemen terug online. Als ik het goed gelezen heb, heeft WebDAV normaal geen mogelijk om de file timestamp mee te kopiëren. Waarschijnlijk wordt de timestamp van de bron gecachet zolang de mount actief is, maar is de werkelijke timestamp dus het tijdstip van uploaden. Bij het opnieuw mounten wordt dan deze datum getoond.
Ik zie op dit moment alleen als mogelijkheid om ook -u als parameter mee te geven met rsync. Dan worden enkel files waarvan de timestamp op de source nieuwer zijn dan op de target meegekopieerd. Aangezien de stackfolder een backup locatie is, en dus eigenlijk read only is, zou dit altijd correct moeten lopen.
Weet iemand of je met sftp wel de file timestamp kan mee kopiëren.

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Dutchess_Nicole
  • Registratie: Augustus 2001
  • Laatst online: 13:18
SFTP weet ik niet maar SCP kan met de -p flag verteld worden dat alle modification en access times en de modes behouden moeten worden.

zie https://linux.die.net/man/1/scp

Ah, net even gekeken en met SFTP is het ook mogelijk door de 'get' of 'put' verbs te gebruiken (naar gelang welke kant het op moet) met de -P flag.

https://linux.die.net/man/1/sftp

Kia E-Niro 2019 Executiveline. OTGW/HA Enthousiasteling.


Acties:
  • +2 Henk 'm!

  • schoene
  • Registratie: Maart 2003
  • Laatst online: 13:51
bedankt voor het antwoord. Ik heb op dit moment een gratis stack account, dus heb op dit moment enkel WebDAV toegankelijkheid, dus kan dit niet testen (ik heb een vermoeden dat de server dit ook moet ondersteunen, dus ik weet niet of stack dit ondersteunt). Ik heb die vraag overigens al 2 weken openstaan bij stack, maar ik heb nog geen antwoord gekregen. Als ik ooit een antwoord krijg, zal ik dit hier zeker aan toevoegen.
Ik heb het kunnen oplossen met de -u parameter in rsync, dus voorlopig blijf ik nog bij de gratis account.

Acties:
  • 0 Henk 'm!

  • Kaspers
  • Registratie: Juni 2004
  • Laatst online: 27-09 21:51
Wat trouwens ook een fijne tool is qua integratie met ownCloud services, zoals stack, is rclone.
Vrij makkelijk te configureren en een fijne cli.

Met de volgende 2 opdrachten zet je een sync en een clone taak op:
code:
1
rclone sync --progress --size-only --exclude-if-present .ignore /home/koos stack-thinkpad:/koos-sync
code:
1
rclone copy --progress --size-only --exclude-if-present .ignore /home/koos stack-thinkpad:/koos-copy

En nog leuker wordt het met notificaties e.d:

Script:
code:
1
2
3
4
5
6
7
if pidof rclone; then
exit 1
fi
XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send "Rclone" "Started Copy to Stack"
rclone copy --progress --size-only --exclude-if-present .ignore /home/koos stack-thinkpad:/koos-copy
XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send "Rclone" "Finished Copy to Stack"
exit

crontab jobs, zodat scripts elke dag 1 keer draaien:
code:
1
2
* * * * *   ID=SyncHome       FREQ=1d AFTER=CopyHome ~/bin/rcloneSyncHomeToStack > /dev/null
* * * * *   ID=CopyHome       FREQ=1d AFTER=SyncHome ~/bin/rcloneCopyHomeToStack > /dev/null

Acties:
  • 0 Henk 'm!

  • schoene
  • Registratie: Maart 2003
  • Laatst online: 13:51
thanks. Tijdens het zoeken naar een oplossing was ik rclone ook al tegengekomen, en had het al gebookmarkt om later eens te onderzoeken.
Pagina: 1