Linux中國

rdiff-backup:一個 Linux 中的遠程增量備份工具

rdiff-backup 是一個用於本地/遠程增量備份的強大而易用的 Python 腳本,它適用於任何 POSIX 操作系統,如Linux、Mac OS X 或 Cygwin。它集合了鏡像和增量備份的顯著特性。

值得注意的是,它保留了子目錄、dev 文件、硬鏈接,以及關鍵的文件屬性,如許可權、uid/gid 所有權、修改時間、擴展屬性、acl 以及 resource fork。它可以通過管道以高效帶寬的模式工作,這與流行的 rsync 備份工具類似。

rdiff-backup 通過使用 SSH 將單個目錄備份到另一個目錄,這意味著數據傳輸被加密並且是安全的。目標目錄(在遠程系統上)最終會得到源目錄的完整副本,但是此外的反向差異會存儲在目標目錄的特殊子目錄中,從而可以恢復前一段時間丟失的文件。

依賴

要在 Linux 中使用 rdiff-backup,你需要在系統上安裝以下軟體包:

  • Python v2.2 或更高版本
  • librsync v0.9.7 或更高版本
  • pylibacl 和 pyxattr Python 模塊是可選的,但它們分別是 POSIX 訪問控制列表(ACL)和擴展屬性支持必需的。
  • rdiff-backup-statistics 需要 Python v2.4 或更高版本。

如何在 Linux 中安裝 rdiff-backup

重要:如果你通過網路運行它,則必須在兩個系統中都安裝 rdiff-backup,兩者最好是相同版本。

該腳本已經存在於主流 Linux 發行版的官方倉庫中,只需運行以下命令來安裝 rdiff-backup 及其依賴關係:

在 Debian/Ubuntu 中

$ sudo apt-get update
$ sudo apt-get install librsync-dev rdiff-backup

在 CentOS/RHEL 7 中

# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
# rpm -ivh epel-release-7-9.noarch.rpm
# yum install librsync rdiff-backup

在 CentOS/RHEL 6 中

# wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install librsync rdiff-backup

在 Fedora 中

# yum install librsync rdiff-backup
# dnf install librsync rdiff-backup [Fedora 22+]

如何在 Linux 中使用 rdiff-backup

如前所述,rdiff-backup 使用 SSH 連接到網路上的遠程計算機,SSH 的默認身份驗證方式是用戶名/密碼,這通常需要人工交互。

但是,要自動執行諸如腳本等自動備份之類的任務,那麼你需要配置使用 SSH 密鑰無密碼登錄 SSH,因為 SSH 密鑰增加了兩台 Linux伺服器之間的信任來簡化文件同步或傳輸

在你設置了 SSH 無密碼登錄後,你可以使用下面的例子開始使用該腳本。

備份文件到不同分區

下面的例子會備份 /etc 文件夾到另外一個分區的 Backup 文件夾內:

$ sudo rdiff-backup /etc /media/aaronkilik/Data/Backup/mint_etc.backup

Backup Files to Different Partition

備份文件到不同分區

要排除一個特定文件夾和它的子目錄,你可以如下使用 --exclude 選項:

$ sudo rdiff-backup --exclude /etc/cockpit --exclude /etc/bluetooth /media/aaronkilik/Data/Backup/mint_etc.backup

我們可以如下使用 --include-special-files 包含所有的設備文件、fifo 文件、socket 文件和鏈接文件:

$ sudo rdiff-backup --include-special-files --exclude /etc/cockpit /media/aaronkilik/Data/Backup/mint_etc.backup

還有另外兩個重要標誌來用於選擇文件,--max-file-size 用來排除大於給定位元組大小的文件,--min-file-size 用於排除小於給定位元組大小的文件:

$ sudo rdiff-backup --max-file-size 5M --include-special-files --exclude /etc/cockpit /media/aaronkilik/Data/Backup/mint_etc.backup

在本地 Linux 伺服器上備份遠程文件

要這麼做,我們使用:

Remote Server (tecmint)         : 192.168.56.102 
Local Backup Server (backup)    : 192.168.56.10

如前所述,你必須在兩台機器上安裝相同版本的 rdiff-backup,如下所示,請嘗試在兩台機器上檢查版本:

$ rdiff-backup -V

Check rdiff Version on Servers

檢查伺服器中 rdiff 版本

在備份伺服器中,像這樣創建一個存儲備份文件的目錄:

# mkdir -p /backups

現在在備份伺服器中,運行下面的命令來將遠程 Linux 伺服器 192.168.56.102 中的 /var/log//root 備份到 /backups 中:

# rdiff-backup root@192.168.56.102::/var/log/ /backups/192.168.56.102_logs.backup
# rdiff-backup root@192.168.56.102::/root/ /backups/192.168.56.102_rootfiles.backup

下面的截圖展示了遠程伺服器 192.168.56.102 中的 root 文件夾以及 192.168.56.10 備份伺服器中的已備份文件:

Backup Remote Directory on Local Server

在本地伺服器備份遠程目錄

注意截圖中 「backup」 目錄中創建的 rdiff-backup-data 文件夾,它包含了備份過程和增量文件的重要數據。

rdiff-backup - Backup Process Files

rdiff-backup – 備份過程文件

現在,在 192.168.56.102 伺服器中,如下所示 root 目錄已經添加了額外的文件:

Verify Backup Directory

驗證備份目錄

讓我們再次運行備份命令以獲取更改的數據,我們可以使用 -v[0-9](其中數字指定詳細程度級別,默認值為 3,這是靜默模式)選項設置詳細功能:

# rdiff-backup -v4 root@192.168.56.102::/root/ /backups/192.168.56.102_rootfiles.backup 

Incremental Backup with Summary

帶有摘要的增量備份

要列出 /backups/192.168.56.102_rootfiles.backup 目錄中包含的部分增量備份的數量和日期,我們可以運行:

# rdiff-backup -l /backups/192.168.56.102_rootfiles.backup/

使用 cron 自動進行 rdiff-back 備份

使用 --print-statistics 成功備份後,我們可以列印摘要統計信息。但是,如果我們不設置此選項,我們可以仍從會話統計中獲得。在手冊頁的 「STATISTICS」 部分中閱讀有關此選項的更多信息。

-remote-schema 選項使我們能夠指定使用替代方法連接到遠程計算機。

現在,我們開始在備份伺服器 192.168.56.10 上創建一個 backup.sh 腳本,如下所示:

# cd ~/bin
# vi backup.sh

添加下面的行到腳本中。

#!/bin/bash
#This is a rdiff-backup utility backup script
#Backup command
rdiff-backup --print-statistics --remote-schema 'ssh -C %s "sudo /usr/bin/rdiff-backup --server --restrict-read-only  /"'  root@192.168.56.102::/var/logs  /backups/192.168.56.102_logs.back
#Checking rdiff-backup command success/error
status=$?
if [ $status != 0 ]; then
#append error message in ~/backup.log file
echo "rdiff-backup exit Code: $status - Command Unsuccessful" >>~/backup.log;
exit 1;
fi
#Remove incremental backup files older than one month
rdiff-backup --force --remove-older-than 1M /backups/192.168.56.102_logs.back

保存文件並退出,接著運行下面的命令在伺服器 192.168.56.10 上的 crontab 中添加此腳本:

# crontab -e

添加此行在每天午夜運行你的備份腳本:

0   0  *  *  * /root/bin/backup.sh > /dev/null 2>&1

保存 crontab 並退出,現在我們已經成功自動化了備份過程。確保一切如希望那樣工作。

閱讀 rdiff-backup 的手冊頁獲取更多信息、詳盡的使用選項以及示例:

# man rdiff-backup

rdiff-backup 主頁: http://www.nongnu.org/rdiff-backup/

就是這樣了!在本教程中,我們向你展示了如何安裝並基礎地使用 rdiff-backup 這個易於使用的 Python 腳本,用於 Linux 中的本地/遠程增量備份。 請通過下面的反饋欄與我們分享你的想法。

(題圖:Pixabay,CC0)

作者簡介:

Aaron Kili 是 Linux 和 F.O.S.S 愛好者,將來的 Linux SysAdmin 和 web 開發人員,目前是 TecMint 的內容創建者,他喜歡用電腦工作,並堅信分享知識。

via: http://www.tecmint.com/rdiff-backup-remote-incremental-backup-for-linux/

作者:Aaron Kili 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國