1. 程式人生 > >Ubuntu如何備份和恢復系統

Ubuntu如何備份和恢復系統

Linux備份策略研究

世界上沒有絕對安全的系統。如果想獲得絕對安全的系統,只有不連線網路,不讓管理員之外的人使用,刷卡管制人員進出,使用監視器監視錄影,甚至於不 要開機。但是這是完全不切實際的,我們僅能寄望儘量讓系統能在承擔低風險的情況下工作,因為任何作業系統都不可能毫無漏洞。那麼怎樣才能讓系統承擔最低的 風險呢?回答因該是在保障系統儘量安全的基礎上,做好各個系統上的資料備份工作。一旦系統遭受到毀滅性的打擊,可將平時做好的備份資料及時恢復,這樣才能 使被破壞的系統迅速恢復正常,以避免不必要的損失。
下面針對Linux作業系統上的資料備份方法發表一下自己的看法。


資料備份種類

總的來說,在Linux作業系統中將備份分為兩類:系統備份,實現對作業系統和應用程式的備份;使用者備份,實現對使用者檔案的備份。在下面我們會看到,系統備份和使用者備份是不同的。

系統備份

系統備份就是對作業系統和應用程式的備份,進行系統備份的原因是儘量在系統崩潰以後能快速簡單完全地恢復系統的執行。進行備份的最有效方法是僅僅備份那些對於系統崩潰後恢復所必需的資料。

Linux系統中很多重要的檔案位於/etc目錄之下,如:

/etc/group : 組使用者資訊;

/etc/passwd : 包含所有的使用者資訊,如密碼,登入shell等;

/etc/fstab : 配置系統有哪些檔案系統;

/etc/inittab : 配置init在不同執行級別下分別如何啟動系統;

/etc/hosts : 域名解析的配置資訊;

/etc/inetd.conf : 程序控制資訊;

/etc/printcap:配置如何與印表機通訊;

/etc/XF86Config:包含XFree86的初始配置;

上面這些重要的配置檔案都需要定期的做備份。

不 同的系統可能有很多重要配置檔案,可以看到/etc目錄下的配置檔案非常重要。當然,某些程式使用了其他目錄下的一些檔案,但是Linux的基本配置檔案 絕大多數都位於/etc目錄下。很多人曾經花費了好長時間才正確的配置了XF86Config檔案,想到如果重新再做一遍,就很費時費力。再舉個例子, /etc目錄下的passwd檔案,如果誤操作,將此檔案更改,或刪除了,則整個系統使用者無法正常登入,如果定期或及時的對其備份,遇到上面的情況後,就 可以非常快速的恢復。

如果修改了某個程式所使用的配置檔案,一般不能將其搬移到其它的地方,因為程式通常在固定的地方尋找配置檔案。因此記錄對系統所做的修改也非常重要,無論所做的修改如何小,當系統崩潰時才能輕鬆的恢復系統。

使用者備份

使用者備份不同於系統備份,因為使用者的資料變動更加頻繁一些。當備份使用者資料時,只是為使用者提供一個虛擬的安全網路空間,合理的放置最近使用者資料檔案的備份,當出現任何問題,例如,誤刪除某些檔案或者硬碟發生故障時,使用者可以恢復自己的資料。

使用者備份應該比系統備份更加頻繁,也許每天都需要進行備份,或使用cron程式自動定期執行某個程式的方法來備份資料。

資料備份策略

不 管系統多麼可靠,總會發生一些意想不到的事情,致使系統資料丟失。因此使用備份來保護資料不丟失是一種非常重要的手段,尤其在系統資料非常重要的時候。經 常進行資料備份能夠減少偶然破壞造成的損失,保證系統能夠從錯誤中恢復正常執行。備份不應該成為一個長時間痛苦的事情,但它是作為系統管理必不可少的工 作,在著手之前進行詳細的考慮和計劃是應該的。

在進行備份之前,首先要選擇合適的備份策略,這將決定何時需要備份,以及出現故障時進行恢復的方式。通常使用的備份方式有三種:

完全備份: 每隔一定時間就對系統進行一次全面的備份,這樣在備份間隔期間出現資料丟失等問題,可以使用上一次的備份資料恢復到前次備份時資料狀況。這是最基本的備份 方式,但是每次都需要備份所有的資料,並且每次備份的工作量也很大,需要大量的備份介質,因此這種備份不能進行的太頻繁,只能每隔一段較長時間才進行一次 完整的備份。但是這樣一旦發生資料丟失,只能恢復到上次備份的資料,這期間內更新的資料就有可能丟失。

增量備份: 首先進行一次完全備份,然後每隔一個較短時間進行一次備份,但僅僅備份在這個期間更改的內容。當經過一個較長的時間後再重新進行一次完全備份,開始前面的 迴圈過程。由於只有每個備份週期進行一次完全備份,其他只進行更新資料的備份,因此工作量小,可以進行頻繁的備份。例如以一個月為一個週期,一個月進行一 次完全備份,每天晚上0點進行這一天改變的資料備份。這樣一旦發生資料丟失,首先恢復到前一個完全備份,然後按日期一個一個恢復每天的備份,就能恢復到前 一天的情況。這種備份方法比較經濟。

累計備份:這種備份方法與增量備份相似,首先每月進行一次完全備 份,然後每天進行一次更新資料的備份。但不同在於,增量備份是備份該天更改的資料,而累計備份是備份從上次進行完全備份後更改的全部資料檔案。一旦發生數 據丟失,可以使用前一個完全備份恢復到前一個月的狀態,再使用前一個累計備份恢復到前一天的情況。這樣做的缺點是每次做累計備份工作的任務比增量備份的工 作量要大,但好處在於,增量備份每天都備份,因此要儲存資料備份數量太多,而累計備份則不然,只需儲存一個完全備份和一個累計備份就可以恢復故障以前的狀 態。另外在進行恢復工作時,增量備份要順序進行多次備份的恢復,而累計備份只需兩次恢復,因此它的恢復工作相對簡單。

增量備份和累計備份 都能以比較經濟的方式對系統進行備份,在這些不同的策略之間進行選擇不但與系統資料更新的方式相關,也依賴於管理員的習慣。通常在系統資料更新不是太頻繁 的話,可以選用更新備份的方式。但是如果系統資料更新太快,使每個備份週期後的幾次累計備份的資料量相當大。這時候可以考慮增量備份或混用累計備份和增量 備份的方式,或者縮短備份週期。

資料備份命令

在Linux系統中常用的備份命令通常有下面幾種:

1.使用tar命令

Linux的實用程式tar最初是為了製作磁帶存檔而設計的(把檔案和目錄複製到磁帶中,然後從存檔中提取或恢復檔案),而現在的應用中可以把它用於任何裝置,它是資料備份中最常用的命令之一。

下面具體介紹tar命令的使用方法:

(1)格式:tar 引數 ......

(2)引數:

c: 建立備份(Create)

v: 表示回顯模式(Verbose),將產生一系列備份的檔案列表

f: 指定使用的備份檔案,它後面的引數為輸出的備份檔名

x: 展開備份檔案

t: 顯示備份檔案的內容

T: 後面跟隨一個檔案引數,指定從這個檔案中讀取要備份的各個檔案的路徑。如果不使用T引數,那麼就需要一個引數,指明進行備份檔案和目錄的路徑

Z: 使用壓縮方式建立和解開備份檔案,這是GNU的新版tar的功能,需要同時安裝gzip。

例如:

$ tar cvf backup.tar /etc

上 面的命令將/etc下的所有檔案打包成tar存檔檔案backup.tar。tar的第一個引數“cvf”,是tar的命令引數,“c”告訴tar建立一 個存檔檔案;“v”選項迫使tar採用冗長模式,即在存檔時列印每個檔名;“f”選項告訴tar下一個引數backup.tar是建立的存檔檔名。

下面一行的命令將tar檔案backup.tar解開並放到當前工作目錄下。必須說明的是這樣做是有危險的,因為在從tar檔案中解開檔案時,舊檔案將被覆蓋。

$ tar xvf backup.tar

在解開tar檔案之前,知道在何處開啟檔案是非常重要的。例如,假設存檔以下檔案:/etc/hosts,/etc/group和/etc/passwd。如果用下述命令:

$ tar cvf backup.tar /etc/hosts /etc/group /etc/passwd

目錄/etc會被加到每個檔名前。為了將檔案展開到正確位置,需要用下述命令:

$ cd /

$ tar xvf backup.tar

這是因為檔案從存檔檔案中抽取出路徑名,如果用下述命令存檔檔案:

$ cd /etc

$ tar cvf hosts group passwd

這樣目錄名就不存在存檔檔案中,因此需要在展開檔案之前用“cd /etc”命令進入目錄etc。由此可見,tar檔案的建立方式與在何處展開有很大關係。

命令:

$ tar tvf backup.tar

在解開tar檔案之前顯示tar檔案的索引,用這種方式可以看到存檔檔案中與檔名有關的目錄名,從而在正確位置上展開存檔檔案。

2.gzip和compress 命令

與MS-DOS的存檔程式不同, tar在存檔過程中並不壓縮檔案。因此,如果儲存兩個1MB的檔案,那麼tar檔案大小為2MB,gzip命令用來壓縮檔案(被壓縮的檔案並不需要是tar格式)。

例如:

$ gzip -9 backup.tar

壓縮backup.tar檔案,產生的檔案為backup.tar.gz,開關“-9”告訴gzip用最高的壓縮比。gunzip命令用來解開一個gzip壓縮的檔案,用“gzip -d”也可以達到同樣效果。

例如:

$ gunzip backup.tar.gz

$ gzip -d backup.tar.gz

3. 聯合使用

介紹了這些命令之後,我們來嘗試組合使用這些命令。為了壓縮儲存一組檔案,可以用下述命令:

$ tar cvf backup.tar /etc

$ gzip -9 backup.tar

結果是形成檔案backup.tar.gz。展開該檔案時,用相反的命令:

$ gunzip backup.tar.gz

$ tar xvf backup.tar

tar命令還包括“z”選擇項,它會自動採用gzip壓縮演算法來聯機壓縮/解壓檔案。例如,下列命令:

$ tar cvfz backup.tar.gz /etc

上面一行的命令等價於:

$ tar cvf backup.tar /etc

$ gzip backup.tar

而命令:

$ tar xvfz backup.tar.Z

可以用來代替下述命令:

$ uncompress backup.tar.Z

$ tar xvf backup.tar

案例實驗

案例:使用tar進行備份。

選定了備份方式之後,可以使用tar、cpio、dump等備份工具軟體將資料備份到磁帶上。對於一般的備份,使用tar就足夠了。tar能夠建立備份文件,能夠備份到磁帶上或者產生一個檔案,如:

$ tar cvf root.tar /root

將/root目錄下的所有文件備份到root.tar檔案中,root.tar為指定輸出的備份檔案,/roo t指出要做備份的目錄。如果要備份到磁帶上,將輸出的備份檔案指定為磁帶裝置檔案即可:

$ tar cvf /dev/rmt/0h /root

如果設定了環境變數TAPE,則可以不使用選項“f”指定輸出磁帶裝置名字:

$ TAPE=/dev/rmt/0h; export TAPE

$ tar cv /root

要進行增量備份,必須找出哪些檔案在這個期間進行更新。這個任務可以由命令find來完成,例如查詢過去七天更改的檔案,並使用tar的“-T”引數制定進行備份的檔案,命令如下:

$ find / -mtime -7 -print > /tmp/filelist

$ tar -c -T /tmp/filelist -f /dev/rmt/0h

由 於要使用find來找出需要備份的檔案列表,那麼就需要利用檔案的修改時間進行查詢,需要使用“-mtime” 引數。另一個更有用的引數是“-newer”,可以查找出所有比某個檔案更新的檔案,由於備份是週期進行的,因此可以在完全備份之後生成一個標記檔案,那 麼所有比這個檔案新的檔案都需要進行更新備份。

$ find / -newer full_back_tag_file -print > /tmp /filelist

進 行資料備份需要定期執行,不能完全依賴於管理員手工進行備份。備份也應該選擇在系統比較空閒時進行,以免影響系統的正常處理任務。通常可以選擇半夜 0:00點之後進行備份,這樣更不能將這個任務由管理員手工完成了。但Linux提供了定時服務cron程式,能夠在確定的時間中執行一系列任務,因此數 據備份必須和cron合作來完成,或者使用/etc下的daily,weekly,monthly檔案做定時備份的操作。