A simple script utilizing rsync for both full and differential backups, and auto folder naming.
Go to file
Mike 7f3b7a0c01 Added some options to Rsync for: Verbose, One File System, Skip Links 2020-04-04 07:06:01 -07:00
.gitignore Ignore pycharm 2019-08-04 17:51:07 -07:00
LICENSE Create LICENSE 2018-09-02 03:24:16 -07:00
README.md Add new option "--log-name" to set the log file's name 2019-08-06 16:06:46 -07:00
mikes-backup Added some options to Rsync for: Verbose, One File System, Skip Links 2020-04-04 07:06:01 -07:00

README.md

Mikes Backup

Easily run both full and differential backups with rsync, to a local folder or an SSH server.

This script is really just a wrapper around rsync's beautiful functionality. It presents a simplified interface for one very narrow use case: Simplifying the process of running daily backups:

  • You may easily force a full of differential backup type with a simple command line argument (see below)
  • Otherwise, it will automatically choose a full or differential backup type, based on whether it detects an existing full backup folder at the backup destination
  • For differential backups, it automatically generates a folder based on today's date and time, making it easier to store many differentials without the need to manually fuss with anything

Requirements

  • rsync
  • python3
  • Backup destination accessible as a local directory OR a remote SSH server

Command Line Arguments

  • --full Forces the script to run a full backup
  • --differential Forces the script to run a differential backup
  • --diff Same as ---differential
  • --no-incremental Always force differentials to link back to the full backup, and not the most recent differential
  • --log-dir <directory> Let's you set the log output directory
  • --log-name Let's you set a name to the log file
  • --source-dir <directory> Specifies the local source directory
  • --include <directory> Specifies another local source directory to include in the backup
  • --source-mountpoint <directory> Make sure a local mountpoint is mounted before continuing
  • --destination-dir <directory> Specifies the backup destination directory
  • --exclude <dir> Specifies a source directory to exclude (can be passed multiple times)
  • --remote-host <hostname> Specifies the remote host, if your backup destination is an SSH server
  • --remote-user <username> Specifies the remote username to use, if your backup destination is an SSH server
  • --ssh-key <path to key> Specifies the local SSH key to use for authentication, if your backup destination is an SSH server

Note that --remote-host, --remote-user, and --ssh-key are only needed if your backup destination is a remote SSH server. You may omit all three if the destination is a locally mounted folder.

Example

For daily use, you'll probably want to create a small bash script that calls this script with the parameters you want, and then call that with cron daily (or whatever your preference is)

#!/bin/bash

# Backup to an SSH server
/path/to/mikes-backup \
  --log-dir "/my/log/dir/my-awesome-host-logs/" \
  --source-dir "/home/or/whatever/" \
  --destination-dir "/path/to/backup/destination/" \
  --remote-host "my-awesome-host.home" \
  --remote-user "my-remote-user" \
  --ssh-key "/home/me/.ssh/id_rsa" \
  --exclude "/my/dumb/downloads" \
  --exclude "/my/even/dumber/downloads"

# Backup to a local folder
/path/to/mikes-backup \
  --log-dir "/my/log/dir/local-backups/" \
  --source-dir "/home/or/whatever/" \
  --destination-dir "/local/path/to/backup/destination/" \
  --exclude "/my/dumb/downloads" \
  --exclude "/my/even/dumber/downloads"

Questions

I realize these docs are sparse at best, so please send in questions if you have any, and I will try to update this file or create a Wiki if need be