3

I currently back up my Fedora Linux server using rsync and a local USB drive. So far this seems to suit my needs, but I suspect there are better ways to go about this. Long ago I used to use tape, but tape backup of size to back up my server is now priced way out of my price range. Something automated would be better. Although I suppose I could automate my current rsync backup, this would mean leaving the USB drive on all the time.

Thoughts?

Eddie
  • 11,524

7 Answers7

7

The solution I use it to find a friend who doesn't mind hosting a small fanless server at their house. I then have an automated rsync script that runs over night to sync my data to a remote location.

6

I backup my server with duplicity to amazon S3. I do a full backup every quarter and incrementals nightly. Works quite well.

pjz
  • 10,695
3

I use rsnapshot which uses rsync and does incremental/full backups really well.

I wrote a shell script that I run from a cron job to mount the disk, run rsnapshot, then umount the disk, so it is not mounted all the time.

Here are the scripts I use. The first is /usr/local/sbin/backup.sh, which basically is a wrapper around the script that does the real work, captures its output and exit status, and then emails the results to root:

#!/bin/sh
#
# Run the dobackup script, capturing the output and then mail it to the
# backup alias person with the right subject line.
#

BACKUP_TYPE=daily
if [ "a$1" != "a" ] ; then
  BACKUP_TYPE=$1
fi

/usr/local/sbin/dobackup.sh ${BACKUP_TYPE} < /dev/null > /tmp/backup.txt 2>&1
RET=$?

SUBJECT="${BACKUP_TYPE} backup for $(hostname) (ERRORS)"
if [ "a$RET" = "a0" ] ; then
  SUBJECT="${BACKUP_TYPE} backup for $(hostname) (successful)"
elif [ "a$RET" = "a2" ] ; then
  SUBJECT="${BACKUP_TYPE} backup for $(hostname) (WARNINGS)"
fi

mail -s "$SUBJECT" root < /tmp/backup.txt

exit $RET

And here is /usr/local/sbin/dobackup.sh, which is the real workhorse:

#!/bin/sh
#
# Perform the backup, returning the following return codes:
#
# 0 - backup successful
# 1 - errors
# 2 - backup successful, but with warnings.
#

if [ -e /dev/sdb1 ] ; then
  BACKUP_DEV=/dev/sdb1
else
  echo "No backup device available."
  echo "CANNOT CONTINUE WITH BACKUP."
  exit 1
fi

BACKUP_DIR=/mnt/backup
BACKUP_TYPE=daily

if [ "a$1" != "a" ] ; then
  BACKUP_TYPE=$1
fi

echo "Performing ${BACKUP_TYPE} backup."

umount $BACKUP_DEV 2> /dev/null
mount $BACKUP_DEV $BACKUP_DIR
if [ "a$?" != "a0" ] ; then
  echo "Error occurred trying to mount the external drive with the following command:"
  echo "  mount $BACKUP_DEV $BACKUP_DIR"
  echo "CANNOT CONTINUE WITH BACKUP."
  exit 1
fi

date

rsnapshot $BACKUP_TYPE
RET=$?

date

if [ "a$RET" = "a0" ] ; then
  echo "Snapshot performed successfully."
elif [ "a$RET" = "a2" ] ; then
  echo "Snapshot performed, but with warnings."
else
  echo "Snapshot had errors (returned ${RET})."
fi

umount $BACKUP_DIR
if [ "a$?" != "a0" ] ; then
  echo "Error occurred trying to unmount the external drive with the following command:"
  echo "  umount $BACKUP_DIR"
  exit 1
fi

exit $RET

Modify the BACKUP_DEV and BACKUP_DIR variables to suit.

Evan
  • 349
2

I use dirvish to make backups to USB drives. I have several scripts built to mount the active drive, I have 3, to the correct point in the filesystem and then run the backups.

Dirvish is basically just a perl script that calls rsync with many options:

  • you can have keep many backups without wasting space
  • you have a simple configuration syntax
  • restores are very easy
Zoredache
  • 133,737
1

Most of the answers in this question also apply here. Most of the tools mentioned will work fine on linux.

Tom Ritter
  • 3,377
1

Take a look at rdiff-backup. Leaving on the USB drive can't hurt. Atleast it's inexpensive. They don't use a lot of power when they idle.

Gert M
  • 1,491
1

As other answers suggest, using rsync (and/or a wrapper around rsync) is a simple way to make a backup of a linux server. Some things to keep in mind:

  • Is the application data you care about actually getting backed up? If you have a database, you should have a cron job that regularly dumps the data. An rsync of a live database system's file isn't guaranteed to give you a reliable backup.
  • How often are you testing to see whether the backup worked or that your USB disk is still in good shape?
  • What happens to deleted files when you do a backup? If you use something like rsnapshot, you're probably fine. But if you are using rsync with the --delete option, you might not be able to recover files you didn't mean to delete.

A second local disk is probably the cheapest option for having a quick way to recover files if your primary disk fails, but it won't help if your house is struck by lightning (or your cheap power strip melts down)). With so many $5/month offsite backup solutions, it's not a bad idea to do both.