#!/bin/bash # # This fully backs up server1. # now=$(date +"%Y%m%d_%H%M%S") backup_dir="/media/peter/Disk1/Server1/backup-"$now mkdir "$backup_dir" rsync -aAXvr -e ssh --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found/*"} peter@192.168.1.2:/ $backup_dir/
Generates a backup named for the current date and time in the specified location.
This script:
#!/bin/bash # # Backup script. # SCRIPTDIR=/Backups BACKUPDIR=/Backups SOURCE=ā/ā COMPLETE=yes clonemode=no while getopts ād:cā opt do case $opt in d) date=$OPTARG ;; c) clonemode=yes ;; esac done echo $date echo $clonemode if [ "$clonemode" = "yes" ] then SOURCE="$BACKUPDIR/current/" COMPLETE=no fi mkdir -p $BACKUPDIR/incomplete \ && cd $BACKUPDIR \ && rsync -av --numeric-ids --delete \ --exclude-from=$SCRIPTDIR/excludelist \ --link-dest=$BACKUPDIR/current/ \ $SOURCE $BACKUPDIR/incomplete/ \ || COMPLETE=no if [ "$COMPLETE" = "yes" ] then date=`date "+%Y%m%d.%H%M%S"` echo "completing - moving current link" mv $BACKUPDIR/incomplete $BACKUPDIR/$date \ && rm -f $BACKUPDIR/current \ && ln -s $date $BACKUPDIR/current else echo "not renaming or linking to \"current\"" fi
NOTE: To check the size of each backup, run the following in the folder your backups are in.
du -sch *
ALERT: A very important safety tip.
Since each file is generate through hardlinks, do not under any circumstances try and edit files in the backups.
Let's say you haven't changed /etc/passwd in a long time. While it looks like you have 30 copies of it, you actually only have one (i.e., the hardlink).
If you go and edit /etc/passwd, you will change it on every backup at once, effectively. So don't do that.
It's safe to just flat-out delete a backup, you won't trash anything. Just don't edit things.