小心謹(jǐn)慎或?yàn)?zāi)難體驗(yàn)會(huì)讓每一個(gè)系統(tǒng)管理都認(rèn)識(shí)到頻繁的系統(tǒng)備份的重要性。你可以通過(guò)編寫(xiě)管用的舊式 shell 腳本,或使用一個(gè)(或幾個(gè))適合這項(xiàng)工作的備份工具來(lái)完成備份任務(wù)。因此,當(dāng)你要實(shí)施一個(gè)備份解決方案時(shí),你了解的備份工具越多,你做出的決策就會(huì)越明智。
在這篇文章中,我們將為你介紹 backupninja ,這是一個(gè)輕量且易于配置的系統(tǒng)備份工具。在諸如 rdiff-backup, duplicity, mysqlhotcopy 和 mysqldump 等程序的幫助下, Backupninja 可以提供常用的備份功能,如執(zhí)行遠(yuǎn)程的、安全的和增量式的文件系統(tǒng)備份,加密備份以及 MySQL/MariaDB 數(shù)據(jù)庫(kù)備份。你可以選擇性地開(kāi)啟使用 Email 狀態(tài)報(bào)告功能,也可以對(duì)一般的硬件和系統(tǒng)的信息進(jìn)行備份。 backupninja 的一個(gè)關(guān)鍵功能是它擁有一個(gè)內(nèi)建的基于控制臺(tái)的向?qū)С绦颍ū环Q(chēng)為 ninjahelper),而后者允許你為不同的備份情景輕松地創(chuàng)建配置文件。
如果非要說(shuō)的話,backupninja 的缺點(diǎn)是:為了充分使用其所有的功能,它要求安裝一些其他“助手”程序。盡管 backupninja 有針對(duì)基于 Red Hat(紅帽)的發(fā)行版本的 RPM 安裝包,但 backupninja 針對(duì) Debian 及其衍生發(fā)行版本的依賴(lài)進(jìn)行了優(yōu)化。所以不建議在基于 Red Hat 的系統(tǒng)上嘗試 backupninja 。
在這篇教程中,我們將介紹如何在基于 Debian 的發(fā)行版本上安裝 backupninja 。
安裝 Backupninja
以 root 賬戶來(lái)運(yùn)行下面的命令:
# aptitude install backupninja
在安裝的過(guò)程中,有幾個(gè)文件和目錄將被創(chuàng)建:
- /usr/sbin/backupninja 是個(gè) bash shell 的主腳本;
/etc/cron.d/backupninja, 默認(rèn)情況下,設(shè)置 cron 任務(wù)來(lái)每隔一個(gè)小時(shí)運(yùn)行上面的主腳本;
/etc/logrotate.d/backupninja 截?cái)嘤?backupninja 程序產(chǎn)生的日志;
/etc/backup.d/ 是備份操作的配置文件駐留的目錄;
/etc/backupninja.conf 是包含一般選項(xiàng)的主配置文件。這個(gè)文件帶有良好的注釋且詳細(xì)解釋了每個(gè)選項(xiàng)的含義;
/usr/share/backupninja 是那些 backupninja 所使用的腳本所處的目錄。這些腳本文件負(fù)責(zé)執(zhí)行實(shí)際的工作。在這個(gè)目錄中,你還可以找到 .helper 文件,它們可以被用來(lái)配置和設(shè)定 ninjahelper 的菜單;
/usr/share/doc/backupninja/examples 含有操作配置文件(即通過(guò) ninjahelper 產(chǎn)生的文件)的模板。
首次運(yùn)行 Ninjahelper
當(dāng)我們嘗試啟動(dòng) ninjahelper 時(shí),我們可以看到可能需要一個(gè)內(nèi)部依賴(lài)程序。假如系統(tǒng)進(jìn)行了提示,請(qǐng)輸入 “yes” 并敲下回車(chē)鍵來(lái)安裝 dialog(一個(gè)用于從 shell 腳本中顯示友好對(duì)話框的工具)。
![](/d/20211018/ded1d1f12bca14ded36701b4666eb132.gif)
當(dāng)你在鍵入 yes 后再敲回車(chē)鍵時(shí),backupninja 將會(huì)安裝 dialog,一旦安裝完成,將呈現(xiàn)出下面的截屏:
![](/d/20211018/d140cbbdf74f6681b34004f318cd5718.gif)
案例 1: 備份硬件和系統(tǒng)信息
在啟動(dòng)了 ninjahelper 之后,我們將創(chuàng)建一個(gè)新的備份操作:
![](/d/20211018/2c37d1dead45a092b4ce1df4930ed2b2.gif)
如果必要的助手程序沒(méi)有被安裝,下面的截屏將會(huì)呈現(xiàn)在我們眼前。假如這些軟件包已經(jīng)在你的系統(tǒng)上安裝了,請(qǐng)?zhí)^(guò)這一步。
![](/d/20211018/26f994b9103eff8e6e18d7ee4f732676.gif)
接下來(lái)的一步需要你選取相關(guān)條目來(lái)作為此次備份任務(wù)的一部分。前四個(gè)條目已經(jīng)默認(rèn)被選上了,但你可以通過(guò)在條目上按空格鍵來(lái)撤消選擇。
![](/d/20211018/db8c8abffbc097ff9a7e0d535e9708bc.gif)
一旦你完成了上面的步驟,按 OK 選項(xiàng)來(lái)繼續(xù)。接著你將能夠選擇是愿意使用默認(rèn)的配置文件(/etc/backup.d/10.sys)來(lái)完成這次備份操作,還是創(chuàng)建一個(gè)新的配置文件。若為后者,一個(gè)含有與默認(rèn)配置文件內(nèi)容相同的文件將會(huì)在相同的目錄下被創(chuàng)建,但它被命名為 11.sys,后續(xù)的備份操作將會(huì)創(chuàng)建類(lèi)似的文件(注:只不過(guò)命名的序號(hào)不同)。需要說(shuō)明的是一旦這個(gè)新的配置文件被創(chuàng)建,你便可以使用你喜愛(ài)的文本編輯器來(lái)編輯該文件。
![](/d/20211018/74b8c50987c1aa221ffda38775f19544.gif)
案例 2: 一個(gè)遠(yuǎn)程目錄的增量式 Rsync 拉取備份
正如你最有可能知道的那樣, rsync 被廣泛地用于通過(guò)網(wǎng)絡(luò)同步文件或文件夾。在接下來(lái)的例子中,我們將討論一個(gè)使用硬鏈接來(lái)為一個(gè)遠(yuǎn)程目錄做增量式拉取備份的方法,它被用來(lái)保存歷史數(shù)據(jù)以及在我們本地的文件服務(wù)器中恢復(fù)這些歷史數(shù)據(jù)。這個(gè)方法將幫助我們節(jié)省空間并增強(qiáng)位于服務(wù)器端的安全性。
步驟 1:編寫(xiě)一個(gè)帶有如下內(nèi)容的自定義腳本,放在 /etc/backup.d,并將它的權(quán)限設(shè)置為 600 。需要說(shuō)明的是,除了一般的配置文件,這個(gè)目錄可能還包含當(dāng) backupninja 執(zhí)行時(shí)你想運(yùn)行的一些腳本文件,它們可以發(fā)揮出位于主配置文件中的變量的優(yōu)勢(shì)。
# REMOTE USER
user=root
# REMOTE HOST
host=dev1
# REMOTE DIRECTORY
remotedir=/home/gacanepa/
# LOCAL DIRECTORY
localdir=/home/gacanepa/backup.0
# LOCAL DIRECTORY WHERE PREVIOUS BACKUP WAS STORED
localdirold=/home/gacanepa/backup.1
mv $localdir $localdirold
# RSYNC
rsync -av --delete --recursive --link-dest=$localdirold $user@$host:$remotedir $localdir
在上面的配置中, rsync 的 ‘--link-dest’ 選項(xiàng)的作用是為位于 $localdir-old 目錄中那些沒(méi)有改變的文件(包含所有屬性) 硬鏈接到目標(biāo)目錄($localdir)。
步驟 2:在 backupninja 第一次運(yùn)行之前,上層目錄(這個(gè)例子中指的是 /home/gacanepa) 是空的。第一次我們執(zhí)行下面的命令:
# backupninja -n
backup.0 目錄就被創(chuàng)建了,并在接下來(lái)的過(guò)程中,它的名稱(chēng)將會(huì)被更改為 backup.1。
當(dāng)我們第二次運(yùn)行 backupninja 時(shí), backup.0 將會(huì)被重新創(chuàng)建,而 backup.1 保持不動(dòng)。
![](/d/20211018/b3a2f4ff25ca7f77b5e6916d3bbd4047.gif)
步驟 3: 確保 backup.1 里面的文件硬鏈接到 backup.0 里的文件,我們可以通過(guò)比較文件的 inode(i 節(jié)點(diǎn))數(shù)和目錄的大小來(lái)達(dá)到此目的。
![](/d/20211018/42b5741b0a45f1436d94a7fefe24eaa5.gif)
總結(jié)
Backupninja 不僅是一個(gè)經(jīng)典的備份工具,它也是一個(gè)易于配置的實(shí)用程序。你可以通過(guò)編寫(xiě)你自己的控制腳本,用放在 /etc.backup.d 中的不同的配置文件來(lái)運(yùn)行 backupninja 。甚至你還可以為 ninjahelper 編寫(xiě)助手程序,并將其包括在 ninjahelper 的主界面上。
例如,假如你在 /usr/share/backupninja目錄中創(chuàng)建了一個(gè)名為 xmodulo 的控制腳本,它將自動(dòng)運(yùn)行那些位于 /etc/backup.d 目錄中以 .xmodulo 為后綴的每個(gè)文件。如果你決定添加你的 xmodulo 控制腳本到 ninjahelper 中, 你可以編寫(xiě)相應(yīng)的助手程序,即 xmodulo.helper 。另外,假如你想 讓 backupninja 運(yùn)行其它的腳本,只需把它添加到 /etc/backup.d 目錄中就可以了。