全新的備份利器推薦:Duplicity使用評測
原創(chuàng)【51CTO精選譯文】備份是系統(tǒng)管理員的必修課。在51CTO的專題《Linux 系統(tǒng)備份——操作實踐與工具介紹》中介紹了一些常用的備份工具,但這僅僅是數(shù)量眾多的備份工具當(dāng)中的一部分。本文介紹的是一個新備份利器:Duplicity。下面這篇評測文章出自知名的英文運維博客Everything Sysadmin,作者Tom Limoncelli現(xiàn)在是Google的系統(tǒng)管理員。
曾經(jīng),我需要將一個服務(wù)器備份到遠(yuǎn)程硬盤上,有幾種方式,而且我也可以自己動手寫一個方法。不過,我找到了 Duplicty,現(xiàn)在我向你強(qiáng)烈推薦:
Duplicity 使用 librsync 生產(chǎn)一個非常小的額外備份。它能夠生成遞增備份,然后使用 GPG 進(jìn)行加密,能夠適用常用的方法發(fā)送至另一個服務(wù)器上,比如:scp、ftp、sftp、rsync等等??梢詮娜魏文夸涢_始備份,不限于加載點(mountpoint),并且可以指定你想要排除的文件。
安裝
如果你之前沒有做過,那最難的部分就是設(shè)置 GPG 密鑰。你需要保護(hù)好你的密鑰。比如,你的機(jī)器著火丟失了所有數(shù)據(jù),而且沒有做密鑰備份,那將無法進(jìn)行恢復(fù)。我把密鑰刻錄了幾張 CD 作為多個備份。
我要備份的機(jī)器是 colo 上的虛擬機(jī)。他們沒有提供備份服務(wù),所以不得不自己動手。機(jī)器使用的是 FreeBSD 8.0-RELEASE-p4并且運行正常。代碼也是非常便攜式的:Python、GPG、librsync等等。沒有涉及內(nèi)核或原始設(shè)備等類似問題。
我寫了一個簡單腳本,掃描所有我想要備份的目錄,然后運行:
duplicity --full-if-older-than 5W --encrypt-key="${PGPKEYID}" $DIRECTORY scp://myarchives@mybackuphost/$BACKUPSET$dir
“--full-if-older-than 5W”表示進(jìn)行遞增備份,每隔 35 天進(jìn)行一次完全的備份。我用 5W 而不是 4W,因為我想確保完全備份不會低于一個月。我每個月支付寬帶費用,我不想在一個月遇到兩件麻煩事,這會讓人崩潰。
我的方法:使用 scp 將文件備份到另一個機(jī)器上,這是一個很便宜的 USB2.0 硬盤,容量 1T。這樣設(shè)置,以便我能夠用 ssh 從源機(jī)器訪問目標(biāo)機(jī)器而無需密碼。上例中的“myarchives”是我做備份用的用戶名,“mybackuphost”是主機(jī)。事實上,我指定了主機(jī)名,使用 .ssh/confi 將默認(rèn)用戶名設(shè)置為“myarchives”。這樣,我可以在其他 shell 腳本中指定“mybackuphost”。
恢復(fù)
當(dāng)然,人們真實關(guān)心的不是備份,而是恢復(fù)。在恢復(fù)文件時,duplicity 找到哪些遞增和完整備份需要進(jìn)行恢復(fù)和解密。你只需指定日期(默認(rèn)是“the lastest”,即***),然后它會自動完成所有工作。我所需的工作如此至少,這點讓我印象非常深刻。
系統(tǒng)運行一段時間之后,就需要進(jìn)行恢復(fù)了,以確保一切正常。
恢復(fù)語法有點讓人困惑,文檔中也沒有提供太多示例。最常見的情況并非是對所有備份組進(jìn)行恢復(fù),而是:“某個文件有問題,或者我覺得某個文件有問題,所有我需要恢復(fù)舊版本(從某個特定日期來看)到 /tmp,來看看這個文件原本是什么樣的。”
我感到困惑的是:
1) 指定了文件或目錄的路徑,但你沒有列出指向備份加載點或目錄的路徑。事后來看,這是顯而易見的事情,當(dāng)時這的確讓我很納悶。讓我明白過來的是,當(dāng)我列出文件時,文件會顯示出來,而沒有加載點
2) 指定備份放置的地方時,你必須非常小心。你可以在命令行中指定,并在“--file-to-restore”選項中指定恢復(fù)的文件。你不能在命令行中指定所有文件,然后讓 duplicity 去猜從哪里分割——它做不到。
為了不用在意外刪除了重要文件之后的緊急情況下重新溫習(xí)那些命令,我做了一個如何進(jìn)行恢復(fù)的記錄。為了服務(wù)新手們,我又進(jìn)行了一些改善如下:
***步:列出所有備份到 “home/ta”區(qū)的文件:
duplicity list-current-files scp://mybackuphost/directoryname/home/tal
要理出它們在某個特定日期的情況,添加:--restore-time "2002-01-25"
第二步:從該列表恢復(fù)文件(不是恢復(fù)到最初位置):
duplicity restore --encrypt-key=XXXXXXXX --file-to-restore=path/you/saw/in/listing scp://mybackuphost/directoryname/home/tal /tmp/restore
假設(shè)舊文件在“/home/tal/path/to/file”,備份在“/home/tal”,你需要指定--file-to-restore 作為“”,而不是“/home/tal/path/to/file”。你可以列出一個目錄來獲取所有文件。/tmp/restore 應(yīng)是一個已經(jīng)存在的目錄。
恢復(fù)某個特定日期的文件,添加:--restore-time "2002-01-25"
結(jié)論:Duplicity 非常棒,而且速度也很快。這是因為善用 libsync 讓備份變得很小,同時也因為他們保持了備份文件的索引,這樣為了獲得文件列表無需對整個備份進(jìn)行讀取。備份文件很小,劃分為多個小文件,這樣源機(jī)器就不需太多的臨時空間。用起來也非常簡單:他們能夠完成所有遞增和完整備份的工作,從而讓你能夠把關(guān)注焦點放在對什么進(jìn)行備份和恢復(fù)上。
提示:與如何備份系統(tǒng)一樣,你需要不時進(jìn)行一下“消防演習(xí)”,對恢復(fù)流程進(jìn)行試驗。建議你將備份流程打包在一個 shell 腳本中,這樣每次都可以使用同一種方式。
再次強(qiáng)烈推薦: http://duplicity.nongnu.org
原文:http://everythingsysadmin.com/2010/10/review-the-duplicity-backup-sy.html
作者:Tom Limoncelli
【編輯推薦】