rsync我目前使用本地 USB 驱动器备份我的 Fedora Linux 服务器。到目前为止,这似乎符合我的需求,但我怀疑有更好的方法来解决这个问题。很久以前我曾经使用磁带,但是用于备份我的服务器的磁带备份现在的价格已经超出了我的价格范围。自动化的东西会更好。虽然我想我可以自动执行我当前的rsync备份,但这意味着始终打开 USB 驱动器。
#!/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
这里是 /usr/local/sbin/dobackup.sh,它是真正的主力:
#!/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
我用它来寻找一个不介意在他们家托管小型无风扇服务器的朋友的解决方案。然后我有一个自动化的 rsync 脚本,它会在夜间运行以将我的数据同步到远程位置。
我将我的服务器备份到亚马逊 S3。我每季度进行一次完整备份,每晚进行一次增量备份。效果很好。
我使用rsnapshot,它使用 rsync 并且非常好地进行增量/完整备份。
我写了一个 shell 脚本,我从一个 cron 作业运行来挂载磁盘,运行 rsnapshot,然后卸载磁盘,所以它不会一直挂载。
这是我使用的脚本。第一个是 /usr/local/sbin/backup.sh,它基本上是对执行实际工作的脚本的包装,捕获其输出和退出状态,然后将结果通过电子邮件发送给 root:
这里是 /usr/local/sbin/dobackup.sh,它是真正的主力:
修改
BACKUP_DEV
和BACKUP_DIR
变量以适应。我使用dirvish对 USB 驱动器进行备份。我构建了几个脚本来将活动驱动器(我有 3 个)挂载到文件系统中的正确位置,然后运行备份。
Dirvish 基本上只是一个使用许多选项调用 rsync 的 perl 脚本:
这个问题的大部分答案也适用于此。提到的大多数工具都可以在 linux 上正常工作。
看看rdiff-backup。留在 USB 驱动器上不会有任何伤害。至少不贵。他们闲置时不会使用很多电力。
正如其他答案所暗示的那样,使用 rsync(和/或 rsync 的包装器)是一种备份 linux 服务器的简单方法。需要记住的一些事项:
--delete
选项一起使用,您可能无法恢复您不想删除的文件。如果您的主磁盘发生故障,第二个本地磁盘可能是快速恢复文件的最便宜的选择,但如果您的房子被闪电击中(或您的廉价电源板熔断),这将无济于事)。有这么多每月 5 美元的异地备份解决方案,两者兼而有之并不是一个坏主意。