如何使用bacula编写备份脚本?

时间:2014-01-23 07:16:23

标签: linux shell bacula

我对这个shell脚本和bacula非常新。我想创建一个使用bacula安排备份的脚本吗?

怎么做?

任何领导都表示赞赏?

感谢。

2 个答案:

答案 0 :(得分:3)

我认为使用cron预定脚本来激活Bacula并不意味着它。

使用bacula安排备份的标准方法是: 1)在要备份的计算机上安装Bacula文件守护程序 2)配置您的Bacula目录以安排备份

ad 1) 如果要备份的机器是Debian或Ubuntu,您可以从shell安装Bacula文件守护程序,如下所示: 外壳> apt-get install bacula-fd (bacula-fd代表Bacula File Daemon) 如果要备份的计算机是Windows,则需要下载Bacula文件守护程序并进行安装。您可以在此处下载:http://sourceforge.net/projects/bacula/files/Win32_64/(选择与您的Bacula服务器版本匹配的版本)

ad 2) 您需要在Bacula服务器上找到bacula-dir.conf文件(如果您在Ubuntu机器上安装了Bacula Director,那么路径为:/etc/bacula/bacula-dir.conf) bacula-dir.conf计划部分非常灵活,因此也有些复杂,这是一个例子:

Schedule {
    Name = "MonthlyCycle"
    Run = Level=Full on 1 at 2:05 # full backup the 1. of every month at 2:05.
    Run = Level=Incremental on 2-31 at 2:05 # incremental backup all other days.
}

请注意,运行Bacula需要更多配置,这里有一个完整的教程如何安装,配置,备份和恢复Bacula:http://webmodelling.com/webbits/miscellaneous/bacula.aspx(免责声明:我自己编写了Bacula教程)

答案 1 :(得分:2)

如果您要管理自己的Linux系统,请了解bashman页面非常详细和有用。做man bash

如果您真的不熟悉Linux和命令行,那么管理bacula不适合新手。它是一个相当全面的备份系统,适用于具有中央数据库的多个系统,这意味着它也很复杂。

Linux上有许多简单的工具可用于执行简单的系统备份,这些工具同样可靠。如果您只想备份主目录,tarzip是很好的工具。特别是,tar可以执行完整备份和增量备份。

假设您确实想要使用bacula并且有足够的信息来编写几个简单的脚本,那么即使如此,原始请求也是模棱两可的。

您的意思是安排定期cron作业以无人值守完成备份吗?或者,您的意思是在确定的时间和日期安排bacula的单一调用吗?

在任何一种情况下,最好创建两个简单的脚本:一个用于执行完整备份,另一个用于执行增量备份。应该运行完整备份,例如,每周一次或每月一次,增量备份应该每天运行一次,或者每周运行一次 - 具体取决于系统数据更改的频率。

每日使用的大多数适度网站都会进行每日增量备份,并在周末(例如星期日)进行完整备份。这样,如果系统崩溃,比如星期五,则需要使用最新的完整备份(在上一个星期日)恢复,然后使用每天的增量备份(星期一,星期二,星期三,星期四)进行恢复。您可能会丢失在崩溃当天发生的数据更改。

如果数据变化率是每小时一次,并且每小时恢复率很重要,那么应该每小时安排一次增量,每晚进行完整备份。

一个重要的考虑因素是确切地知道要备份什么。大多数家庭用户希望他们的主目录可以恢复。操作系统根目录和应用程序分区通常可以轻松恢复,无需备份。或者,这些都是在非常罕见的时间表(例如每月一次左右)进行备份,因为它们的更改频率必须低于用户的主管。

另一个重要的考虑因素是放置备份的位置。 Bacula支持外部存储设备,例如磁带,它们不是安装的文件系统。 tar也支持磁带归档。大多数家庭用户都有某种USB或网络附加存储,用于存储备份。

假设备份将存储在/mnt/backups/上,我们假设用户的主目录(和子目录)都要备份并可以恢复。

% cat <<EOF >/usr/local/bin/full-backup
#!/bin/bash
# full-backup SRCDIRS [--options]
# incr-backup SRCDIRS [--options]
#
# set destdir to the path at which the backups will be stored
# each backup will be stored in a directory of the date of the
# archive, grouped by month.  The directories will be:
#
# /mnt/backups/2014/01
# /mnt/backups/2014/02
# ...
# the full and incremental files will be named this way:
#
# /mnt/backups/2014/01/DIR-full-2014-01-24.192832.tgz
# /mnt/backups/2014/01/DIR-incr-2014-01-25.192531.tgz
# ...
# where DIR is the name of the source directory.
#
# There is also a file named ``lastrun`` which is used for
# its last mod-time which is used to select files changed 
# since the last backup.

$PROG=${0##*/}              # prog name: full-backup or incr-backup

destdir=/mnt/backup
now=`date +"%F-%H%M%S"`
monthdir=`date +%Y-%m`
dest=$destdir/$monthdir/
set -- "$@"
while (( $# > 0 )) ; do
  dir="$1" ; shift ; 
  options=''                                  # collect options
  while [[ $# -gt 0 && "x$1" =~ x--* ]]; do   # any options?
    options="$options $1"
    shift
  done
  basedir=`basename $dir`
  fullfile=$dest/$basedir-full-$now.tgz
  incrfile=$dest/$basedir-incr-$now.tgz
  lastrun=$destdir/lastrun
  case "$PROG" in
    full*) archive="$fullfile" newer=                   kind=Full ;;
    incr*) archive="$incrfile" newer="--newer $lastrun" kind=Incremental ;;
  esac
  cmd="tar cfz $archive $newer $options $dir"
  echo "$kind backup starting at `date`"
  echo ">> $cmd"
  eval "$cmd"
  echo "$kind backup done at `date`"
  touch $lastrun  # mark the end of the backup date/time
exit
EOF
(cd /usr/local/bin ; ln -s full-backup incr-backup )
chmod +x /usr/local/bin/full-backup

配置此脚本并可用后,可以使用cron进行安排。见man cron。使用cron -e创建和编辑crontab条目以每周调用一次full-backup(比如说​​),并使用另一个crontab条目每天调用incr-backup一次。以下是三个示例crontab条目(有关语法的详细信息,请参阅man 5 crontab),以执行增量备份和完整备份,以及删除旧档案。

# run incremental backups on all user home dirs at 3:15 every day
15 3 * * *   /usr/local/bin/incr-backup /Users
# run full backups every sunday, at 3:15
15 3 * * 7   /usr/local/bin/full-backup /Users
# run full backups on the entire system (but not the home dirs) every month
30 4 * 1 7   /usr/local/bin/full-backup / --exclude=/Users --exclude=/tmp --exclude=/var
# delete old backup files (more than 60 days old) once a month
15 3 * 1 7   find /mnt/backups -type f -mtime +60 -delete

从这些备份中恢复是稍后的练习。

祝你好运。