A simple script utilizing rsync for both full and differential backups, and auto folder naming.
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
Mike 7977b1d827 Merge branch 'master' of ssh://git.mikeperalta.com:3222/misc-utilities/mikes-backup 6 månader sedan
.gitignore Ignore pycharm 1 år sedan
LICENSE Create LICENSE 2 år sedan
README.md Add new option "--log-name" to set the log file's name 1 år sedan
mikes-backup Added some options to Rsync for: Verbose, One File System, Skip Links 6 månader sedan

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