首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用bacula编写备份脚本?

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

Stack Overflow用户
提问于 2014-01-23 07:16:22
回答 2查看 3.4K关注 0票数 1

我对这个shell脚本和bacula非常陌生。我想要创建一个脚本来安排备份使用bacula?

怎么做?

有线索值得赞赏吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-23 08:24:38

如果要管理自己的Linux系统,请学习bashman页面确实非常详细和有用。做man bash

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

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

假设您确实希望使用bacula,并且有足够的信息来编写几个简单的脚本,那么即使这样,原始请求也是不明确的。

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

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

大多数正常使用的站点将在周末(比如周日)进行每日增量备份和完全备份。这样,如果系统崩溃,比如说周五,您需要使用最近的完全备份(前一个星期天)恢复,然后用每天的增量备份(星期一、图、韦德、清华)进行恢复。您可能会丢失崩溃当天发生的数据更改。

如果数据更改的速率是每小时的,并且以每小时的速度进行恢复是很重要的,那么增量应该安排在每个小时,每天晚上都有完整的备份。

一个重要的考虑因素是知道到底要备份什么。大多数家庭用户希望他们的主目录可以恢复。不需要备份,OS根和应用程序分区通常很容易恢复。或者,它们是在一个非常罕见的时间表上备份的(比如每月一次),因为它们的更改必须比用户的家庭指导少。

另一个重要的考虑因素是将备份放在哪里。Bacula支持非挂载文件系统的外部存储设备,如磁带。tar还支持磁带存档。大多数家庭用户都有某种用于存储备份的USB或网络连接存储。

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

代码语言:javascript
复制
% 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 )。

代码语言:javascript
复制
# 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

从这些备份中恢复是一项有待以后进行的练习。

祝好运。

票数 3
EN

Stack Overflow用户

发布于 2014-01-23 12:13:52

我不认为有一个cron计划的脚本来激活Bacula是没有意义的。

使用bacula调度备份的标准方法是: 1)在要备份的计算机上安装Bacula文件守护进程,然后配置您的Bacula目录来调度备份

广告1)如果您要备份的计算机是Debian或Ubuntu,您可以从外壳中安装Bacula文件守护进程,如: shell> apt-get install bacula-fd ( Bacula -fd表示Bacula文件守护进程),如果要备份的计算机是Windows,则需要下载Bacula文件守护进程并安装它。您可以在这里下载:64/ (选择与您的Bacula服务器版本匹配的版本)

ad 2)您需要在您的Bacula服务器上找到bacula-dir.conf文件(如果您在Ubuntu机器上安装了Bacula Director,那么路径是: /etc/bacula/ bacula-dir.conf ) bacula-dir.conf日程部分非常灵活,因此也比较复杂,下面是一个示例:

代码语言:javascript
复制
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教程)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21301721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档