update: safety first!

when it comes to important files: safety comes first

thus recommend to the user that wants to go pro the following backup system:

  • have two complete backups at two different places:
    • backupA: at the company, USB 3.0 (! THE MORE DATA IS BACKED UP THE MORE SPEED IS NEEDED (or restore might take DAYS!)) connected to the server, doing daily incremental backups
    • backupB: being a fire-proof double-metal casing (EMP proof) vault at a different place (home?)
  • change those backups every day if possible otherwise every week
    • if ransomeware destroys backupA then in the worst case scenario, one day or one week of work is gone
    • remember: whatever is physically connected to the server, can be encrypted by ransomeware
  • have the backup strategy tested once a year
    • where the backup is restored completely on a backup-server, to test if all data is there and how long the process takes (USB 2.0 is definitely a massive bottleneck)

rsync is a cool beast with a billion options it allows you to ssh-secured transfer your backups to remote locations…


  • does chunk-wise md5 integrity check on files if files differ only slightly it will “delta-transfer” only the diff not retransfer the whole file…


  • complicated: the amount of options and combinations of options can be overwhelming.

you can even specify the bandwidth to be used:

rsync -vv --bwlimit=65 -r --archive --partial --append-verify --inplace --progress --compress -e 'ssh -p22' /BACKUP/DAILY/ USER@SERVER:/BACKUP/DAILY/

src: https://unix.stackexchange.com/questions/48298/can-rsync-resume-after-being-interrupted


option because it’s CPU intense



limits the amount of upload-bandwidth used (just in case you need internet at the same time)

example script called: onlineBackup.sh

that could be called by cron every hour:

ps cax | grep -v rsyncd | grep -v grep | grep rsync > /dev/null
if [ $? -eq 0 ]; then
  echo "Process is running."
  echo "Process is not running."
  # backup more important first
  rsync -vv --bwlimit=65 -r --archive --partial --append-verify --inplace --progress --compress -e 'ssh -p22' /BACKUP/DAILY/ USER@SERVER:/BACKUP/DAILY/