4.2 KiB
Backup
A flexible backup script for backing up linux system using rsync, ssh, cron and other common shell commands.
Usage
First add your settings at the top of the file and then add a cronjob to periodically execute the script. In the following paragraphs the settings will be explained.
SOURCES
is an array containing the paths to the folders that should be included in the backup.
TARGET
the absolute path to the folder where the backup will be saved to. If the TOSSH
option is used, this should of course be the absolute path on the remote system.
EXCLUDEFROM
a path to a file containing folders and files that should be excluded from a backup.
MAILADRESS
if this option is a non empty string, the log of the backup will be send to the email adress contained in this string. For this to work the mail
command must be set up properly.
LISTPACKAGES
if this option is set to a non empty string the log of the backup will contain a list of installed packages. For this command to work the dpkg
command must be installed properly.
LOG
the name of the log file.
RSYNCCONF
an array that contains additional rsync flags.
TOSSH
if this option is set to a non empty string, the backup will be saved on the remote host that this string refrences. Attention: Please set the TOSSHUSER
and TOSSHPORT
options as well, otherwise the script will probably fail to create a backup successfully.
FROMSSH
if this option is set to a non empty string the folders refrenced in SOURCES
will be fetched from the remote host refrenced by this string. Attention: Please set the FROMSSHUSER
and FROMSSHPORT
options as well otherwise the script might fail to create a backup successfully.
Attention: If both the TOSSH
& FROMSSH
options are set the script will fail!
Settings example
## General Settings
SOURCES=(/home/example) # What folder should be saved?
TARGET="/home/backup/example" # Where should they be saved? (absolute path!)
EXCLUDEFROM="~/exclude.txt" # What files are supposed to be excluded?
MAILADRESS="example@example.com" # To which email adress should the logs be sent?
LISTPACKAGES="" # Change to non empty string to save a list of
# installed packages!
LOG=$0.log # Log file name & location
RSYNCCONF=(--delete) # Additional rsync flags
## SSH Settings
TOSSH="my.backup.com" # What ssh server stores the backups?
FROMSSH="" # From what ssh server should the files be
# backuped?
# For several reasons TOSSH and FROMSSH cannot
# be used at the same time!
TOSSHUSER="backup" # The ssh user of the system on which the
# backup will be created
TOSSHPORT=22 # The ssh port of the system on which the
# backup will be created
FROMSSHUSER="" # The ssh user of the system from which the
# files will be backed up
FROMSSHPORT=22 # The ssh port of the system from which the
# files will be backed up
WEEKS=5 # For how many weeks shall we save backups?
# This will keep weekly backups for at most 5
# weeks.
Crontab example
Create a backup every two hours (use flock to prevent duplicate scripts from running):
0 */2 * * * flock -n ~/backup.lock ~/backup.sh
Exclude file example
This example can be used for a full system backup (use only "/" as source for a full system backup). Copied from the Arch Wiki.
/dev/*
/proc/*
/sys/*
/tmp/*
/run/*
/mnt/*
/media/*
/lost+found