关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » HTML5 »使用 backupninja 为 Debian 定制备份计划

    使用 backupninja 为 Debian 定制备份计划

    2015-10-04 00:00:00 出处:linux.cn
    分享

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

    使用 backupninja 为 Debian 定制备份计划

    回顾 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 <<EOF
    $home_when_run
    $home_backupname
    $home_backupdir
    $home_compress
    $home_includes
    $home_excludes
    
    # tar 程序的路径,必须为GNU tar
    TAR    `which tar`
    DATE    `which date`
    DATEFORMAT  "%Y-%m-%d"
    EXTENSION    tar
    
    EOF
    # 将配置文件的权限改为600
       chmod 600 $next_filename
    }

    运行 ninjahelper

    当创建了名为home的handler脚本以及对应的home.helper后,运行ninjahelper命令创建一个新的备份操作。

    #ninjahelper

    选择 create a new backup action(创建一个新的备份操作)。

    使用 backupninja 为 Debian 定制备份计划

    接下来将看到可选的操作类型,这里选择“backup of home directories”(备份home目录):

    使用 backupninja 为 Debian 定制备份计划

    然后会显示在helper中设置的默认值(这里只显示了3个)。可以编辑文本框中的值。注意,关于“when”变量的语法,参考文档的日程安排章节。

    使用 backupninja 为 Debian 定制备份计划

    使用 backupninja 为 Debian 定制备份计划

    使用 backupninja 为 Debian 定制备份计划

    当完成备份操作的创建后,它会显示在ninjahelper的初始化菜单中:

    使用 backupninja 为 Debian 定制备份计划

    按回车键显示这个备份操作的选项。因为它非常简单,所以我们可以随便对它进行一些实验。

    注意,“run this action now”(立即运行)选项会不顾日程表安排的时间而立即进行备份操作:

    使用 backupninja 为 Debian 定制备份计划

    备份操作会发生一些错误,debug会提供一些有用的信息以帮助你定位错误并纠正。例如,当备份操作有错误并且没有被纠正,那么当它运行时将会打印出如下所示的错误信息。

    使用 backupninja 为 Debian 定制备份计划

    上面的图片告诉我们,用于完成备份操作的连接没有建立,因为它所需要链接的远程主机似乎宕机了。另外,在helper文件中指定的目标目录不存在。当纠正这些问题后,重新开始备份操作。

    需要牢记的事情:

    当你在/usr/share/backupninja 下新建了一个自定义脚本(如foobar)来处理特殊的备份操作时,那么你还需要编写与之对应的helper(foobar.helper)文件,ninjahelper 将通过它生成名为10.foobar(下一个操作为11,以此类推)的文件,保存在/etc/backup.d目录下,而这个文件才是备份操作的真正的配置文件。 可以通过ninjahelper设定好备份操作的执行时间,或按照“when”变量中设置的频率来执行。

    总结

    在该文中,我们探讨了如何从头创建我们自己的备份操作,以及如何向ninjahelper添加相关的菜单以生成对应的配置文件。通过上一篇与这一篇文章,我希望我已经给出了足够好的理由让你继续研究,或者至少应该尝试一下。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。