使用 backupninja 为 Debian 定制备份计划

2024年 7月 20日 54.6k 0

backupninja是Debian系统(以及基于Debian的发行版)中一个强大的、高度可配置的备份软件。在前一篇文章中,我们探讨了如何安装backupninja以及如何设置两个备份操作并执行。然而,那些只是冰山一角。这一次,我们要讨论如何定制 Handler 和 Helper ,使用这些功能定制策略以完成任何备份需要。

使用 backupninja 为 Debian 定制备份计划-1

回顾 backupninja

backupninja的一个独特的地方是它可以完全抛弃/etc/backup.d中的纯文本配置文件和操作文件,软件自己会搞定。另外,我们可以编写自定义脚本(又叫 “handler”)放在/usr/share/backupninja 目录下来完成不同类型的备份操作。此外,可以通过ninjahelper的基于ncurses的交互式菜单(又叫“helper”)来指导我们创建一些配置文件,使得人工错误降到最低。

创建定制的Handler与Helper

这一节的目标是创建一个脚本,将home目录以gzip或bzip2压缩包的形式备份起来,不包括音乐与视频文件。我们将这个文件命名为home,将它放在/usr/backup/ninja目录下。

尽管你可以使用默认的tar handler(参考 /usr/share/backupninja/tar 与 /usr/share/backupninja/tar.helper)来达到这个效果,但是我们使用这种方法来展示如何创建实用的 handler 脚本与基于 ncurses 的 helper。你可以根据你的需求来决定如何运用这里的方法。

由于 handlers 来源于主脚本,所以无需以#!/bin/bash开始的释伴行(shebang line)。

我们编写的 handler (/usr/share/backupninja/home)如下所示。已经详细注释了。getconf 函数用来读取备份操作的配置文件。如果你指定了一个变量的值,那么它会覆盖配置文件中对应变量的值:

#/home 目录 handler 脚本

# 每个备份文件会通过 FQDN 来鉴别主机
getconf backupname

# 备份文件的保存目录
getconf backupdir

# 默认压缩
getconf compress

# 包含 /home 目录
getconf includes

#不包含 *.mp3 与 *.mp4 文件
getconf excludes

# 要打包备份文件的默认扩展名
getconf EXTENSION

# tar 程序的绝对路径
getconf TAR `which tar`

# date 程序的绝对路径
getconf DATE    `which date`

# 日期格式
DATEFORMAT="%Y-%m-%d"

# 如果备份目录不存在,以致命错误退出
if [ ! -d "$backupdir" ]
then
   mkdir -p "$backupdir" || fatal "Can not make directory $backupdir"
fi

# 如果备份目录不可写,同样以致命错误退出
if [ ! -w "$backupdir" ]
then
   fatal "Directory $backupdir is not writable"
fi

# 根据压缩格式选择对应的tar选项
case $compress in
   "gzip")
    compress_option="-z"
    EXTENSION="tar.gz"
    ;;
   "bzip")
    compress_option="-j"
    EXTENSION="tar.bz2"
    ;;
   "none")
    compress_option=""
    ;;
   *)
    warning "Unknown compress filter ($tar_compress)"
    compress_option=""
    EXTENSION="tar.gz"
    ;;
esac

# 不包含一些文件类型/目录
exclude_options=""
for i in $excludes
do
   exclude_options="$exclude_options --exclude $i"
done

# 调试信息,执行备份操作
debug "Running backup: " $TAR -c -p -v $compress_option $exclude_options \
   -f "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`".$EXTENSION" \
   $includes

# 将标准输出重定向到以.list为扩展的文件  
# 将标准错误输出重定向到以.err为扩展的文件
$TAR -c -p -v $compress_option $exclude_options \
   -f "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`".$EXTENSION" \
   $includes \
   > "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`.list \
   2> "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`.err

[ $? -ne 0 ] && fatal "Tar backup failed"

接下来我们将要创建helper文件(/usr/share/backupninja/home.helper)。这样,hendlers将会以菜单的形式在ninjahelper中显示:

# 备份操作描述,以下划线分割单词
HELPERS="$HELPERS home:backup_of_home_directories"

home_wizard() {
home_title="Home action wizard"

backupname=`hostname --fqdn`

# 指定备份操作的时间
inputBox "$home_title" "When to run this action?" "everyday at 01"
[ $? = 1 ] && return
home_when_run="when = $REPLY"

# 指定备份文件名
inputBox "$home_title" "\"Name\" of backups" "$backupname"
[ $? = 1 ] && return
home_backupname="backupname = $REPLY"
backupname="$REPLY"

# 指定保存备份文件的默认路径
inputBox "$home_title" "Directory where to store the backups" "/var/backups/home"
[ $? = 1 ] && return
home_backupdir="backupdir = $REPLY"

# 指定复选框的默认值
radioBox "$home_title" "Compression" \
"none" "No compression" off \
"gzip" "Compress with gzip" on \
"bzip" "Compress with bzip" off
[ $? = 1 ] && return;
result="$REPLY"
home_compress="compress = $REPLY "

REPLY=
while [ -z "$REPLY" ]; do
formBegin "$home_title: Includes"
formItem "Include:" /home/gacanepa
formDisplay
[ $? = 0 ] || return 1
home_includes="includes = "
for i in $REPLY; do
[ -n "$i" ] && home_includes="$home_includes $i"
done
done

REPLY=
while [ -z "$REPLY" ]; do
formBegin "$home_title: Excludes"
formItem "Exclude:" *.mp3
formItem "Exclude:" *.mp4
# 按需增加多个“Exclude”文本框指定其他不须包含的内容
formItem "Exclude:"
formItem "Exclude:"
formDisplay
[ $? = 0 ] || return 1
home_excludes="excludes = "
for i in $REPLY; do
[ -n "$i" ] && home_excludes="$home_excludes $i"
done
done

# 保存配置
get_next_filename $configdirectory/10.home
cat > $next_filename

相关文章

Linux 命令行的聊天工具 CenterIM
Linux 桌面年仍未到来 但 Linux 移动之年已到来
12 个在线学习 Linux 技能网站
Linux Mint : 会是另一个新的 Ubuntu 吗?
W3Conf 开发者大会将于下周召开
Ubuntu 10.04 ARM 处理器上网本版本结束服务期

发布评论