在Debian系統(tǒng)中使用backupninja定制備份計(jì)劃的教程

回顧 backupninja
backupninja的一個(gè)獨(dú)特的地方是它可以完全拋棄/etc/backup.d中的純文本配置文件和操作文件,軟件自己會(huì)搞定。另外,我們可以編寫自定義腳本(又叫 “handler”)放在/usr/share/backupninja 目錄下來完成不同類型的備份操作。此外,可以通過ninjahelper的基于ncurses的交互式菜單(又叫“helper”)來指導(dǎo)我們創(chuàng)建一些配置文件,使得人工錯(cuò)誤降到最低。
創(chuàng)建定制的Handler與Helper
這一節(jié)的目標(biāo)是創(chuàng)建一個(gè)腳本,將home目錄以gzip或bzip2壓縮包的形式備份起來,不包括音樂與視頻文件。我們將這個(gè)文件命名為home,將它放在/usr/backup/ninja目錄下。
盡管你可以使用默認(rèn)的tar handler(參考 /usr/share/backupninja/tar 與 /usr/share/backupninja/tar.helper)來達(dá)到這個(gè)效果,但是我們使用這種方法來展示如何創(chuàng)建實(shí)用的 handler 腳本與基于 ncurses 的 helper。你可以根據(jù)你的需求來決定如何運(yùn)用這里的方法。
由于 handlers 來源于主腳本,所以無需以#!/bin/bash開始的釋伴行(shebang line)。
我們編寫的 handler (/usr/share/backupninja/home)如下所示。已經(jīng)詳細(xì)注釋了。getconf 函數(shù)用來讀取備份操作的配置文件。如果你指定了一個(gè)變量的值,那么它會(huì)覆蓋配置文件中對(duì)應(yīng)變量的值:
# 每個(gè)備份文件會(huì)通過 FQDN 來鑒別主機(jī)
getconf backupname
# 備份文件的保存目錄
getconf backupdir
# 默認(rèn)壓縮
getconf compress
# 包含 /home 目錄
getconf includes
#不包含 *.mp3 與 *.mp4 文件
getconf excludes
# 要打包備份文件的默認(rèn)擴(kuò)展名
getconf EXTENSION
# tar 程序的絕對(duì)路徑
getconf TAR `which tar`
# date 程序的絕對(duì)路徑
getconf DATE `which date`
# 日期格式
DATEFORMAT="%Y-%m-%d"
# 如果備份目錄不存在,以致命錯(cuò)誤退出
if [ ! -d "$backupdir" ]
then
mkdir -p "$backupdir" || fatal "Can not make directory $backupdir"
fi
# 如果備份目錄不可寫,同樣以致命錯(cuò)誤退出
if [ ! -w "$backupdir" ]
then
fatal "Directory $backupdir is not writable"
fi
# 根據(jù)壓縮格式選擇對(duì)應(yīng)的tar選項(xiàng)
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
# 調(diào)試信息,執(zhí)行備份操作
debug "Running backup: " $TAR -c -p -v $compress_option $exclude_options \
-f "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`".$EXTENSION" \
$includes
# 將標(biāo)準(zhǔn)輸出重定向到以.list為擴(kuò)展的文件
# 將標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到以.err為擴(kuò)展的文件
$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"
接下來我們將要?jiǎng)?chuàng)建helper文件(/usr/share/backupninja/home.helper)。這樣,hendlers將會(huì)以菜單的形式在ninjahelper中顯示:
HELPERS="$HELPERS home:backup_of_home_directories"
home_wizard() {
home_title="Home action wizard"
backupname=`hostname --fqdn`
# 指定備份操作的時(shí)間
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"
# 指定保存?zhèn)浞菸募哪J(rèn)路徑
inputBox "$home_title" "Directory where to store the backups" "/var/backups/home"
[ $? = 1 ] && return
home_backupdir="backupdir = $REPLY"
# 指定復(fù)選框的默認(rèn)值
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
# 按需增加多個(gè)“Exclude”文本框指定其他不須包含的內(nèi)容
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
# 將配置文件的權(quán)限改為600
chmod 600 $next_filename
}
運(yùn)行 ninjahelper
當(dāng)創(chuàng)建了名為home的handler腳本以及對(duì)應(yīng)的home.helper后,運(yùn)行ninjahelper命令創(chuàng)建一個(gè)新的備份操作。
選擇 create a new backup action(創(chuàng)建一個(gè)新的備份操作)。
接下來將看到可選的操作類型,這里選擇“backup of home directories"(備份home目錄):
然后會(huì)顯示在helper中設(shè)置的默認(rèn)值(這里只顯示了3個(gè))。可以編輯文本框中的值。注意,關(guān)于“when”變量的語法,參考文檔的日程安排章節(jié)。
當(dāng)完成備份操作的創(chuàng)建后,它會(huì)顯示在ninjahelper的初始化菜單中:
按回車鍵顯示這個(gè)備份操作的選項(xiàng)。因?yàn)樗浅:唵?,所以我們可以隨便對(duì)它進(jìn)行一些實(shí)驗(yàn)。
注意,“run this action now"(立即運(yùn)行)選項(xiàng)會(huì)不顧日程表安排的時(shí)間而立即進(jìn)行備份操作:
備份操作會(huì)發(fā)生一些錯(cuò)誤,debug會(huì)提供一些有用的信息以幫助你定位錯(cuò)誤并糾正。例如,當(dāng)備份操作有錯(cuò)誤并且沒有被糾正,那么當(dāng)它運(yùn)行時(shí)將會(huì)打印出如下所示的錯(cuò)誤信息。
上面的圖片告訴我們,用于完成備份操作的連接沒有建立,因?yàn)樗枰溄拥倪h(yuǎn)程主機(jī)似乎宕機(jī)了。另外,在helper文件中指定的目標(biāo)目錄不存在。當(dāng)糾正這些問題后,重新開始備份操作。
需要牢記的事情:
當(dāng)你在/usr/share/backupninja 下新建了一個(gè)自定義腳本(如foobar)來處理特殊的備份操作時(shí),那么你還需要編寫與之對(duì)應(yīng)的helper(foobar.helper)文件,ninjahelper 將通過它生成名為10.foobar(下一個(gè)操作為11,以此類推)的文件,保存在/etc/backup.d目錄下,而這個(gè)文件才是備份操作的真正的配置文件。
可以通過ninjahelper設(shè)定好備份操作的執(zhí)行時(shí)間,或按照“when”變量中設(shè)置的頻率來執(zhí)行。
相關(guān)文章
新特性搶先看! Ubuntu 25.04 Beta 發(fā)布:Linux 6.14 內(nèi)核
Canonical公司近日發(fā)布了Ubuntu 25.04 Beta版,這一版本被賦予了一個(gè)活潑的代號(hào)——“Plucky Puffin”(勇敢的海雀),據(jù)悉,正式的穩(wěn)定版預(yù)計(jì)將在2025年4月17日與廣大用戶2025-03-29如何讓 Ubuntu 居中顯示窗口? 3種方法實(shí)現(xiàn)Ubuntu窗口居中顯示
個(gè)人習(xí)慣不管打開終端窗口還是文件管理器窗口,都希望居中顯示,不太喜歡Linux下自動(dòng)隨意的擺放位置,下面我們就來看看詳細(xì)設(shè)置方法2025-03-11Ubuntu 24.04.2 LTS 正式發(fā)布: 帶來全新硬件支持啟用堆棧HWE
buntu 24.04 LTS 的第 2 個(gè)小版本Ubuntu 24.04.2 LTS 正式發(fā)布,出了修復(fù)漏洞以外,它還帶來了全新的硬件支持啟用堆棧(HWE),讓系統(tǒng)性能和硬件兼容性更上一層樓2025-02-25怎么關(guān)閉Ubuntu無人值守升級(jí)? Ubuntu禁止自動(dòng)更新的技巧
Ubuntu Linux系統(tǒng)禁止自動(dòng)更新的時(shí)候,提示“無人值守升級(jí)在關(guān)機(jī)期間,請(qǐng)不要關(guān)閉計(jì)算機(jī)進(jìn)程”,該怎么解決這個(gè)問題?詳細(xì)請(qǐng)看下文介紹2025-01-20高效管理你的Linux系統(tǒng): Debian操作系統(tǒng)常用命令指南
在Debian操作系統(tǒng)中,了解和掌握常用命令對(duì)于提高工作效率和系統(tǒng)管理至關(guān)重要,本文將詳細(xì)介紹Debian的常用命令,幫助讀者更好地使用和管理Debian系統(tǒng)2025-01-20debian更新系統(tǒng)的命令怎么用? 輕松配置Debian自動(dòng)更新的技巧
Debian不手動(dòng)更新怎么體驗(yàn)新系統(tǒng)?Debian提供了一個(gè)既簡單又高效的解決辦法——自動(dòng)更新,該怎么用呢?詳細(xì)請(qǐng)看下文介紹2025-01-20如何配置Ubuntu無人值守升級(jí)? 手動(dòng)操作實(shí)現(xiàn)Ubuntu自動(dòng)升級(jí)技巧
無人值守升級(jí)是一個(gè)用于自動(dòng)更新 Debian 和 Ubuntu 系統(tǒng)的開源項(xiàng)目,該項(xiàng)目的主要目的是確保系統(tǒng)能夠定期自動(dòng)安裝安全更新,從而保持系統(tǒng)的安全性和穩(wěn)定性2025-01-20Ubuntu系統(tǒng)怎么安裝Warp? 新一代AI 終端神器安裝使用方法
Warp是一款使用Rust開發(fā)的現(xiàn)代化AI 終端工具,該怎么再Ubuntu系統(tǒng)中安裝使用呢?下面我們就來看看詳細(xì)教程2025-01-20Debian如何查看系統(tǒng)版本? 7種輕松查看Debian版本信息的實(shí)用方法
Debian是一個(gè)廣泛使用的Linux發(fā)行版,用戶有時(shí)需要查看其版本信息以進(jìn)行系統(tǒng)管理、故障排除或兼容性檢查,在Debian系統(tǒng)中,有幾種不同的方法可以查看版本信息2025-01-17解決VMware中Ubuntu虛擬機(jī)鼠標(biāo)閃爍或指針位置不正確的方案
剛下載虛擬機(jī)后,電腦在虛擬機(jī)內(nèi)出現(xiàn)了鼠標(biāo)閃爍或者鼠標(biāo)指針位置不對(duì)的問題,該怎么解決呢?下面我們就來看看詳細(xì)教程2025-01-09