每個人都告訴你備份是如何的重要,但是目前卻缺乏如何進行備份的詳細的教程來討論需要備份哪些文件,備份間隔應該是多少?這篇文章將為你回答這些問題,通過該文章你可以定義適合自己的備份策略。
總的來說,可以將備份分為兩類:系統備份,其實現對操作系統和應用程序的備份(只要系統管理員的才能進行這項工作);用戶備份,其實現對用戶文件的備份(我不知道是否別人也使用這些術語,但是本文中都這樣使用)。我們會看到,系統備份和用戶備份應該區別對待。
系統備份
進行系統備份的原因是盡量在系統崩潰以後能快速簡單完全地恢復系統的運行。然而當然你不會希望花費幾個月來備份你的系統。進行有效備份的最有效的方法是僅僅備份那些對於系統崩潰恢復所必需的數據。
想想下面這種情況,你的系統大部分都非常穩定-/usr/bin的內容並不是那麼經常變動,為了使事情簡化,你也許已經有了系統的粗糙拷貝。大多數人都是使用某種發布安裝Linux系統,然後對系統進行自己的定制。原始的發布就是我們進行系統恢復的出發點。
Linux區別於其他大多數操作系統的一個方面是操作系統和大多數應用程序一次被安裝,而Windows或者其他Unix系統則是應用程序與操作系統是分開來安裝的,首先是安裝操作系統,然後才逐漸安裝各個應用程序,對於這些系統,備份整個系統才是必要的,這些操作系統在初次安裝時需要花費大量的時間和精力。而對於Linux來說,初次或再次安裝一個基本系統(包括絕大多數應用程序)是非常簡單和快速的。
上面說到系統的大部分都非常穩定,下面我們來考慮哪部分比較容易變動。定制自己的系統的一個方面是安裝新的應用程序(沒有隨發布安裝的應用程序)。當安裝新的軟件時,你應該嚴格要求自己,將新安裝的軟件和初始安裝的內容分隔開來,最恰當的目錄位置是/usr/local之下。/usr/local目錄的目的就是包含那些相對系統來說"本地化"的內容。這樣做的一個優點就是你可以容易的察看哪些程序可以從發布光盤中恢復,哪些程序需要從備份中恢復。
另外一個你會需要修改的地方是標准程序使用的配置文件。大多數Linux應用程序的的配置文件都是純文本格式,你可以根據需要編輯配置文件來定制軟件的運行。有時候發布將自動基於你回答的問題答案來編輯某些配置文件,但是大多數情況下你需要自己編輯它們。
很多重要的文件位於/etc目錄之下,如:
/etc/printcap---配置如何與打印機通信
/etc/fstab---配置系統有哪些文件系統
/etc/passwd---包含所有的用戶信息,如密碼,登錄shell等
/etc/inittab---配置init在不同運行級別下分別如何啟動系統
/etc/XF86Config---包含XFree86的初始配置
不同的系統可能有很多其他的的重要配置文件,可以看到/etc目錄非常重要,包含在該目錄下的文件可能是數小時的工作成果。我就曾經花費了好長時間才正確的配置了XF86Config文件。想到如果重新再做一遍,我就害怕。當然,某些程序使用了其他目錄下的一些文件,但是Linux的基本配置文件絕大多數都位於/etc目錄下。
當你修改了某個程序所使用的配置文件,你不能將其搬移到其他地方,因為程序通常在固定的地方尋找配置文件。因此記錄對系統所做的修改就非常重要,無論所做的修改如何的微小,這樣當系統崩潰時才能輕松的恢復系統。
記錄對系統的修改的最好的工具是一桿筆和一張紙。記錄下對系統進行了哪些修改的詳細描述及為什麼要進行修改是非常必要的。不要自以為是的認為經過六個月你仍然能記得你如何編譯安裝了某個應用,或你為什麼你要修改某個配置,而實際情況是你往往會忘記。即使你在一個單獨的目錄下安裝了一個新的軟件(比較容易查找修改),也應詳細的記錄如何安裝的程序,什麼時候安裝的及是否有任何事情還不是非常清楚。
現在我們已經討論了哪些系統文件需要進行備份,下面我們考慮多長時間應該備份一次。每次你對系統進行了修改可能是進行備份的時刻,但是不要忘記在修改系統以前對要修改的部分備份,以防止在出現問題時可以恢復。關鍵點是系統只有在你修改了它以後才會變動,而修改往往不是經常的事情,因此對系統的備份應該對應於這個情況。
用戶備份
用戶備份不同於系統備份,因為用戶的數據變動更加頻繁一些,因此幾乎不可能建立某個用戶的精確到每分鐘的備份。當備份用戶數據,你只是為用戶提供一個虛擬的安全網絡-合理的最近它數據文件的備份,當出現任何問題如誤刪除某些文件或者硬盤發生故障時,使用戶可以恢復自己的數據。
用戶備份應該比系統備份更加頻繁,也許是每天都進行備份(cron程序提供了自動定期運行某個程序的方法)。而幾乎所有的備份程序(包括tar)都提供了一個有用的特性:僅僅備份特定時間(如上次備份)以後被修改的文件。這可以顯著的減少進行用戶備份所需要花費的時間,因為一個用戶在特定時間段內一般僅僅是修改了很少量的文件。你可以對用戶數據進行完全備份和增量備份的手段結合起來使用。
雖然可以是用軟盤作為備份的存儲介質,但是每張軟盤只能存儲少量的數據。很多備份程序允許一個備份跨越若干個磁盤,但是這也意味著在進行備份時必須自行更換軟盤。若你僅僅是管理具有若干個用戶的小型系統,這也許非常簡單,但是情況往往不是這樣。數字或磁記錄帶也許是一個更好的選擇,因為它們具有更大的存儲容量。Linux支持很多不同類型的磁帶設備,或者通過ftape模塊或者通過對SCSI的支持(數字記錄帶往往是SCSI設備)。而且從性價比來說磁帶設備的成本現在非常低廉,因此它非常實用。可選的,你的Linux可能和其他帶有磁帶機的計算機在同一個局域網之中,Linux可以訪問其他遠程機器的磁帶設備。
無論選擇什麼介質進行備份,都需要管理這些介質設備。你的備份是在發生了問題時才會被使用的,這時你會依賴於備份,因此你必須經常驗證你的備份。一個沒有驗證的備份甚至比沒有備份更糟。
你同樣應該保持多個備份集合,一個流行的策略是基於“祖父-父親-兒子”思想。這裡你擁有三套備份,最新的一份(兒子),中間的一份(父親),最老的一份(祖父)。當你進行下一次備份,你應該覆蓋掉最老的那一份,使其變為最新的一份。這種策略的優點是即使其中的一份失效,你仍然可以根據其他的備份進行恢復,但是你不必每次進行兩次備份。
最後一個忠告也許有些奇怪:保持至少一個備份遠離源機器,最好完全放在另外一棟大樓裡。為什麼呢?這是為了防止源機器所在地發生災難如火災等等,你可以重新實用一台新的機器,使用新的Linux發布,但是你不能得到一個新的備份磁帶。計算機中的數據是最珍貴的,不可替代的,因此應該小心的保護它。
如何進行備份
OK,理論部分已經足夠了,下面我們來看一些例子。有很多的備份程序可供選擇,包括自由軟件和商業軟件,每種都有其優點。但是我們這裡使用tar(GNU version 1.11.2)來作為示例說明。
這裡假定系統中剛剛在/usr/local中安裝了很多新軟件,並且需要備份系統中/usr/local下的所有內容。這裡你沒有磁帶設備,因此你使用了軟盤,使用如下的命令:
$ tar -cWMf /dev/fd0 /usr/local
c選項標識創建一個存檔,W表示在寫入備份內容到備份設備以後再讀出來進行驗證以提高可靠性,M選項指示tar若需要時可以跨越多張磁盤,f選項通知將存檔寫入到哪裡,在這裡是/dev/df0。在很多系統中,你必需具有root的身份才能訪問/dev/df0。
雖然上面這個例子指定進行驗證,但是仍然可以對備份進行檢測:
$ tar -tMf /dev/fd0
將顯示該磁盤備份的文件的列表。依賴於/usr/local目錄下內容的大小,也許會需要多張軟盤來備份該目錄下的內容,當然可以是用tar命令的壓縮選項-z來減少需要的磁盤數目,該選項指定tar將存檔使用gzip進行壓縮處理以減小存檔大小。這個特性有好處也有壞處,好處就是可以減少存檔大小,壞處是壓縮存檔的任何一處的錯誤就會導致整個存檔不可恢復。某些程序在備份文件以前將這些文件一個個單獨壓縮,這時一個好主意。
前面我提到可以僅僅備份某個時間以後被修改的文件,使用tar,你能使用N選項來進行這樣的存檔,例如:
$ tar -cf /dev/ftape -N yesterday /home
將備份/home目錄下昨天以後被修改的所有文件。這一次數據被備份到軟磁帶設備/dev/ftape中。實現該功能的另外一個可選的方法是聯合使用find和tar命令:
$ find /home -cnewer /etc/last_backup -type f i-print > back_these_up
$ tar -cf /dev/ftape -T back_these_up
$ touch /etc/last_backup
find命令用來查找所有在/etc/last_backup被修改以後內容發生了變化的文件,並將查找結果存放在文件back_these_up之中,T選項指示tar命令備份文件back_these_up中指定的的所有文件;隨後touch文件/etc/last_backup,其將作為下次備份的時間點。將若干個這樣的命令連接在一起使用是非常有用的。作為一個副產品我們的到了我們備份的文件的名字的列表文件,及最新一次備份的時間。(文件etc/last_backup的時間戳)。
我們可以做的另外一件事情就是過濾文件列表,從而使特定的文件不被備份。例如,也許會希望不備份對象文件或者DVI文件,因為它們可以由源文件生成。若僅僅希望忽略一種類型的文件則一個簡單的grep -v將完成這個功能,egrep則可以被用來忽略多種類型的文件,如下例所示我們只要修改上例的第一行即可:
$ find /home -cnewer /etc/last_backup -type f i-print | egrep
-v '<<<>.o$|<<<>.dvi$' > back_these_up
這個功能也可以使用find來實現,當然可能不如egrep那麼強大:
$ find /home -cnewer /etc/last_backup -type f ! ( -name *.o -o -name
*.dvi ) -print > back_these_up
常常會出現你的備份要求不能僅用一個簡單的tar命令完成的情況,這個時候應該自己寫腳本來完成需要的功能。這個腳本可能簡單到上面的示例那樣只有幾行程序,也可能非常復雜。一個非常簡單的腳本,定期使用cron來運行,能使備份變為非常簡單的過程。
備份不應該成為一個長時間的痛苦的事情,但它是作為系統管理必不可少的工作。在著手之前進行詳細的考慮和計劃是應該的。做出對系統進行完全備份的決定是非常容易的,同樣做出六個月以前的幾個文件的老備份也是可以滿足需要的決定也是非常容易的,而實際是最好的策略是在兩者之間。
摘自:http://www.linuxaid.com.cn