Inkrementelles Backup mit Rsync

Dieses kleine Script setze ich für ein einfaches inkrementelles Backup via rsync ein.

Das Quellverzeichnis /host/foobar/local/data, wird dabei über den Automounter per NFS (readonly) eingebunden.

  1.  
  2. #!/usr/bin/env sh
  3. SRC=/host/foobar/local/data
  4. DEST=/local/backup
  5. NAME=backup
  6. BACKUPS=11
  7.  
  8. # Exit if no source directory exists
  9. if [ ! -d $SRC ]; then
  10. exit
  11. fi
  12.  
  13. # Create backup directory if neccessary
  14. if [ ! -d $DEST ]; then
  15. mkdir $DEST
  16. fi
  17.  
  18. # Delete oldest backup directory
  19. if [ -d $DEST/$NAME.$(($BACKUPS-1)) ]; then
  20. rm -rf $DEST/NAME.$(($BACKUPS-1))
  21. fi
  22.  
  23. # Rotate backups
  24. i=$(($BACKUPS-2))
  25. while [ "$i" -ge "0" ]; do
  26. j=$(($i+1))
  27. if [ -d $DEST/$NAME.$i ]; then
  28. mv $DEST/$NAME.$i $DEST/$NAME.$j
  29. fi
  30. i=$(($i-1))
  31. done
  32.  
  33. # Make next backup
  34. rsync -a --delete --link-dest=$DEST/$NAME.1 $SRC $DEST/$NAME.0/

Anmerkung: Das Sicherheitskonzept ist natürlich nicht besonders ausgereift, aber ich halte es für ein Backup in einem internen Netz mit einer begrenzten Anzahl an vertrauenswürdigen Benutzern für ausreichend.

Für externen Zugriff empfiehlt sich ein SSH-Tunnel, für ein ausgefeilteres Sicherheitskonzept der rsync-Daemon einschließlich diverser Zugriffs- und Firewall-Regeln. Insbesondere durch den rsync-Daemon lassen sich Rechte, Eigentümer und Symlinks besser managen. Außerdem verbessert sich die Performance.