gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:09 26 4
gpt4 key购买 nike

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

怎么做?

任何潜在客户表示赞赏?

谢谢。

最佳答案

如果您要管理自己的 Linux 系统,请学习 bash . man页面真的非常详细和有用。做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

从这些备份中恢复是留待以后练习的。

祝你好运。

关于linux - 如何使用 bacula 编写备份脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21301721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com