Practicality of backing up huge hard drives (was Re:
[mythtv-users] Dieing Hard Drive)
Matthew Schumacher
schu at schu.net
Tue Mar 15 16:22:45 UTC 2005
Matthew Schumacher wrote:
> I haven't followed this thread, but thought I would post my backup
> script in case it is useful to someone.
>
> It uses rsync to rotate the backup, and it keeps the disk space down
> because files that remain the same though the rotations are hard links
> to the same physical space on the disk. This allows you to have a 7 day
> rotation, while the disk space used is kept to the sum of the data and
> the change over the last 7 days.
>
> schu
>
The list stripped my code, how annoying...
WATCH FOR LINE WRAP!!!
#!/bin/bash
#
# Schu's backup rotation script modified from
http://www.mikerubel.org/computers/rsync_snapshots/
#
# Dirs in the includes file are appended to the backupsource and backed
up. So if /etc/rotateBackup.includes
# contains 'var' on a line and the backup source is '/' then /var will
be backed up.
#
# user changable stuff
BACKUPSOURCE=/
BACKUPDEST=/backup
EXCLUDES=/etc/rotateBackup.excludes
INCLUDES=/etc/rotateBackup.includes
# make sure we're running as root
if (( `id -u` != 0 )); then { echo "Sorry, must be root. Exiting...";
exit; } fi
# if the excludes file does exist then touch it
if [ ! -f $EXCLUDES ]; then
touch $EXCLUDES
fi
# if the includes file does exist then touch it
if [ ! -f $INCLUDES ]; then
touch $INCLUDES
fi
# now rotate snapshots
# step 1: delete the oldest snapshot, if it exists:
if [ -d $BACKUPDEST/backup.6 ]; then
rm -rf $BACKUPDEST/backup.6
fi
# step 2: shift the middle snapshots(s) back by one, if they exist
if [ -d $BACKUPDEST/backup.5 ]; then
mv $BACKUPDEST/backup.5 $BACKUPDEST/backup.6
fi;
if [ -d $BACKUPDEST/backup.4 ]; then
mv $BACKUPDEST/backup.4 $BACKUPDEST/backup.5
fi;
if [ -d $BACKUPDEST/backup.3 ]; then
mv $BACKUPDEST/backup.3 $BACKUPDEST/backup.4
fi;
if [ -d $BACKUPDEST/backup.2 ]; then
mv $BACKUPDEST/backup.2 $BACKUPDEST/backup.3
fi;
if [ -d $BACKUPDEST/backup.1 ]; then
mv $BACKUPDEST/backup.1 $BACKUPDEST/backup.2
fi
# step 3: make a hard-link-only (except for dirs) copy of the latest
snapshot,
# if that exists
if [ -d $BACKUPDEST/backup.0 ]; then
cp -al $BACKUPDEST/backup.0 $BACKUPDEST/backup.1
fi;
# step 4: rsync from the system into the latest snapshot (notice that
# rsync behaves like cp --remove-destination by default, so the destination
# is unlinked first. If it were not so, this would copy over the other
# snapshot(s) too!
rsync -va -r --delete --delete-excluded --files-from="$INCLUDES"
--exclude-from="$EXCLUDES" $BACKUPSOURCE/ $BACKUPDEST/backup.0
# step 5: update the mtime of hourly.0 to reflect the snapshot time
touch $BACKUPDEST/backup.0
More information about the mythtv-users
mailing list