如何使用 backupninja 來備份 Debian 系統

Gabriel Cánepa發表於2015-03-21

小心謹慎或災難體驗會讓每一個系統管理都認識到頻繁的系統備份的重要性。你可以通過編寫管用的舊式 shell 指令碼,或使用一個(或幾個)適合這項工作的備份工具來完成備份任務。因此,當你要實施一個備份解決方案時,你瞭解的備份工具越多,你做出的決策就會越明智。

在這篇文章中,我們將為你介紹 backupninja ,這是一個輕量且易於配置的系統備份工具。在諸如 rdiff-backupduplicity,mysqlhotcopy 和 mysqldump 等程式的幫助下, Backupninja 可以提供常用的備份功能,如執行遠端的、安全的和增量式的檔案系統備份,加密備份以及 MySQL/MariaDB 資料庫備份。你可以選擇性地開啟使用 Email 狀態報告功能,也可以對一般的硬體和系統的資訊進行備份。 backupninja 的一個關鍵功能是它擁有一個內建的基於控制檯的嚮導程式(被稱為 ninjahelper),而後者允許你為不同的備份情景輕鬆地建立配置檔案。

(題圖來自:blogspot.com)

如果非要說的話,backupninja 的缺點是:為了充分使用其所有的功能,它要求安裝一些其他“助手”程式。儘管 backupninja 有針對基於 Red Hat(紅帽)的發行版本的 RPM 安裝包,但 backupninja 針對 Debian 及其衍生髮行版本的依賴進行了優化。所以不建議在基於 Red Hat 的系統上嘗試 backupninja 。

在這篇教程中,我們將介紹如何在基於 Debian 的發行版本上安裝 backupninja 。

安裝 Backupninja

以 root 賬戶來執行下面的命令:

# aptitude install backupninja

在安裝的過程中,有幾個檔案和目錄將被建立:

  • /usr/sbin/backupninja 是個 bash shell 的主指令碼;
  • /etc/cron.d/backupninja, 預設情況下,設定 cron 任務來每隔一個小時執行上面的主指令碼;
  • /etc/logrotate.d/backupninja 截斷由 backupninja 程式產生的日誌;
  • /etc/backup.d/ 是備份操作的配置檔案駐留的目錄;
  • /etc/backupninja.conf 是包含一般選項的主配置檔案。這個檔案帶有良好的註釋且詳細解釋了每個選項的含義;
  • /usr/share/backupninja 是那些 backupninja 所使用的指令碼所處的目錄。這些指令碼檔案負責執行實際的工作。在這個目錄中,你還可以找到 .helper 檔案,它們可以被用來配置和設定 ninjahelper 的選單;
  • /usr/share/doc/backupninja/examples 含有操作配置檔案(即通過 ninjahelper 產生的檔案)的模板。

首次執行 Ninjahelper

當我們嘗試啟動 ninjahelper 時,我們可以看到可能需要一個內部依賴程式。假如系統進行了提示,請輸入 “yes” 並敲下Enter鍵來安裝 dialog(一個用於從 shell 指令碼中顯示友好對話方塊的工具)。

當你在鍵入 yes 後再敲Enter鍵時,backupninja 將會安裝 dialog,一旦安裝完成,將呈現出下面的截圖:

案例 1: 備份硬體和系統資訊

在啟動了 ninjahelper 之後,我們將建立一個新的備份操作:

如果必要的助手程式沒有被安裝,下面的截圖將會呈現在我們眼前。假如這些軟體包已經在你的系統上安裝了,請跳過這一步。

接下來的一步需要你選取相關條目來作為此次備份任務的一部分。前四個條目已經預設被選上了,但你可以通過在條目上按空格鍵來撤消選擇。

一旦你完成了上面的步驟,按 OK 選項來繼續。接著你將能夠選擇是願意使用預設的配置檔案(/etc/backup.d/10.sys)來完成這次備份操作,還是建立一個新的配置檔案。若為後者,一個含有與預設配置檔案內容相同的檔案將會在相同的目錄下被建立,但它被命名為 11.sys,後續的備份操作將會建立類似的檔案(注:只不過命名的序號不同)。需要說明的是一旦這個新的配置檔案被建立,你便可以使用你喜愛的文字編輯器來編輯該檔案。

案例 2: 一個遠端目錄的增量式 Rsync 拉取備份

正如你最有可能知道的那樣, rsync 被廣泛地用於通過網路同步檔案或資料夾。在接下來的例子中,我們將討論一個使用硬連結來為一個遠端目錄做增量式拉取備份的方法,它被用來儲存歷史資料以及在我們本地的檔案伺服器中恢復這些歷史資料。這個方法將幫助我們節省空間並增強位於伺服器端的安全性。

步驟 1:編寫一個帶有如下內容的自定義指令碼,放在 /etc/backup.d,並將它的許可權設定為 600 。需要說明的是,除了一般的配置檔案,這個目錄可能還包含當 backupninja 執行時你想執行的一些指令碼檔案,它們可以發揮出位於主配置檔案中的變數的優勢。

# 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’ 選項的作用是為位於 $localdir-old 目錄中那些沒有改變的檔案(包含所有屬性) 硬連結到目標目錄($localdir)。

步驟 2:在 backupninja 第一次執行之前,上層目錄(這個例子中指的是 /home/gacanepa) 是空的。第一次我們執行下面的命令:

# backupninja -n

backup.0 目錄就被建立了,並在接下來的過程中,它的名稱將會被更改為 backup.1。

當我們第二次執行 backupninja 時, backup.0 將會被重新建立,而 backup.1 保持不動。

步驟 3: 確保 backup.1 裡面的檔案硬連結到 backup.0 裡的檔案,我們可以通過比較檔案的 inode(i 節點)數和目錄的大小來達到此目的。

總結

Backupninja 不僅是一個經典的備份工具,它也是一個易於配置的實用程式。你可以通過編寫你自己的控制指令碼,用放在/etc.backup.d 中的不同的配置檔案來執行 backupninja 。甚至你還可以為 ninjahelper 編寫助手程式,並將其包括在 ninjahelper 的主介面上。

例如,假如你在 /usr/share/backupninja目錄中建立了一個名為 xmodulo 的控制指令碼,它將自動執行那些位於 /etc/backup.d目錄中以 .xmodulo 為字尾的每個檔案。如果你決定新增你的 xmodulo 控制指令碼到 ninjahelper 中, 你可以編寫相應的助手程式,即 xmodulo.helper 。另外,假如你想 讓 backupninja 執行其它的指令碼,只需把它新增到 /etc/backup.d 目錄中就可以了。

歡迎使用下面的評論框來留下你的評論、問題或建議。聽到你的回應將會使我們很高興。

相關文章