硬件不肯定是可靠的 軟件肯定是不可靠的 人不肯定是不可靠的 而自然肯定是可靠的 本張說明為什麼、如何、何時要做備份,及如何回存備份的東西。 備份的重要 數據是有價值的。重新產生它需要你花費時間和努力,並且要花費金錢或至少傷心和眼淚,有時甚至不可
硬件不肯定是可靠的
軟件肯定是不可靠的
人不肯定是不可靠的
而自然肯定是可靠的
本張說明為什麼、如何、何時要做備份,及如何回存備份的東西。
備份的重要
數據是有價值的。重新產生它需要你花費時間和努力,並且要花費金錢或至少傷心和眼淚,有時甚至不可能重新產生,例如一些實驗結果。由於數據是一種投資,你必須保護它,並采取措施避免丟失。
丟失數據一般有4個原因:硬件失敗、軟件曲線、人為因素或自然災害。 雖然現代硬件已經相當可靠,但仍可能自然損壞。存儲數據最決定性的硬件是硬盤,它依賴微小的磁區在充滿電噪聲的世界上保存數據。現代軟件依然不可靠,一個真正可靠的程序是理想、罕見的,而不是規律。人更不可靠,他們很容易犯錯誤,甚至為某種目的惡意地破壞數據。自然可能不是邪惡的,但也可能造成破壞。一切的一切,希望什麼都正常、完美幾乎是不可能的。
備份是保護數據投資的方法。有數據的多個拷貝,就不怕某個損壞(所需做的僅僅是從備份中恢復丟失的數據)。
正確的備份是很重要的。正如物理世界中任何東西都與其他相關,備份也遲早會失效。好的備份確保有效,你不希望你的備份無效。 如果你的備份又壞了,這將雪上加霜,如果你只有一個備份,它可能根本是壞的,只留下你和硬盤中冒煙的灰燼。 或者當你恢復時,發現忘了備份一些重要的東西,比如15000個用戶站點的用戶
數據庫。 Best of all, all your backups might be working perfectly, but the last known tape drive reading the kind of tapes you used was the one that now has a bucketful of water in it.
When it comes to backups, paranoia is in the job description.
選擇備份介質
備份所需的最重要的決定是選擇備份介質。需要考慮成本、可靠性、速度、可得到、可用性。
成本是很重要的,因為你的數據可能需要多個存儲、多個備份。便宜的介質可以用很多。
可靠性是最重要的,因為壞的備份會雪上加霜。備份介質必須能存儲數據多年而不損壞。作為備份介質,使用方法影響可靠性。硬盤一般是很可靠的,但作為備份介質並非很可靠,如果它和備份源在同一計算機裡的話。
速度通常不太重要,如果備份可以非交互地完成。備份花2個小時無所謂,無須監督,多長時間都沒有關系。另一方面,if the backup can't be done when the computer would otherwise be idle, 那麼速度也是個問題。
可得到是明顯必要的,因為你無法使用不存在的備份介質。不太明顯的是要在將來還能得到這種介質,並且能在其他計算機上使用。否則災害之後,你可能無法恢復你的備份。
可用性是決定備份周期的主要因素。備份越容易使用越好。備份介質不能難以使用。
一般用軟盤和磁帶。軟盤很便宜,還算可靠,不太快,很容易得到,但數據量大時不容易使用。磁帶也很便宜,還算可靠,還算快,很容易得到,而且,依賴於磁帶的容量,使用很輕松。
還有其他選擇。但通常可得性不好,但如果這不成問題,有時也不錯。例如,磁光盤同時具有軟盤(隨機存取,可以快速地恢復單個文件)和磁帶(大容量)的優點.
選擇備份工具
備份有很多工具,傳統的
UNIX備份工具是tar 、 cpio 和dump 。另外,還可以使用大量第三方軟件包(包括freeware和商業版)。備份介質的選擇可能影響工具的選擇。
tar 和cpio 類似,從備份來看二者基本等效。都能將文件存到磁帶並取出文件。都能使用幾乎所有介質,因為核心設備驅動處理低級設備操作,對用戶級程序看來所有設備都差不多。有寫
Unix版本的tar 和cpio 對不是普通文件可能有問題(符號連接、設備文件、極長路徑名的文件等等),但
Linux的能正確處理所有文件。
dump 不同,它直接讀文件系統,而不通過文件系統。 It is also written specifically for backups; tar 和cpio are really for archiving files, although they work for backups as well.
直接讀文件系統有些優點,它可能不考慮time stamps備份所有文件;對於tar 和cpio ,必須先將文件系統只讀安裝。直接讀文件系統更有效,如果所有東西都要備份,因為它使磁頭移動最少。它的主要缺點是每個文件系統種類需要特定的備份程序, Linux的dump 程序只理解ext2文件系統。
dump 也直接支持備份級(下面討論);對tar 和cpio ,這必須用其他工具實現。
第三方備份工具的比較超出了本書的范圍。Linux Software Map列出了許多freeware的。
簡單備份
一個簡單的備份方案是一次備份所有東西,然後備份上次備份後改變的所有東西。第一個備份叫全備份full backup,後來的叫i增量備份ncremental backups。全備份比增量備份費時費力,因為有更多的東西寫到磁帶,而且全備份可能不能放如一盤磁帶中(更別說軟盤了)。回存增量備份比全備份可能要花更多的時間。備份可以這樣優化,就是自上次全備份以後,總用增量備份保存所有改過的文件。這樣,備份可能需要多一些的工作,但你只需回存一個全備份和一個增量備份。
如果有6盤磁帶想每天備份,可以用磁帶1做第一個全備份(比如在星期五),用磁帶2-5做增量備份(周一到周四)。然後用磁帶6做新的全備份(第二個周五),然後再用磁帶2-5做增量備份。在做完新的全備份之前不要覆蓋舊的全備份(磁帶1),一面在做全備份的時候出現問題。有了新的全備份磁帶6以後,最好在另一個地方保存磁帶1,這樣如果有一個全備份磁帶在火災中損失了,還能有一個。當再做下一個全備份是,再用磁帶1而保存磁帶6。
如果你有多於6盤磁帶,可以用多的做全備份。每次做全備份,應該使用最老的磁帶。這樣你會有最近幾周的全備份,對你如果想找到一個現在已經刪除的就文件,或一個文件的舊版本很有用。
用tar備份
一個全備份可以很容易地用tar 實現:
# tar -create -file /dev/ftape /usr/src
tar: Removing leading / from absolute path names in the archive
#
上面的例子使用GNU版本的tar 及其長選項名。傳統版本的tar 只理解單字符選項。 GNU版還能處理一盤磁帶或一張磁盤不能容納的備份,及很長的路徑名;這不是所有傳統的版本能作到的。 (Linux只使用GNU tar 。)
如果你的備份一盤磁帶不能容納,你需要使用-multi-volume (-M)選項:
# tar -cMf /dev/fd0H1440 /usr/src
tar: Removing leading / from absolute path names in the archive
Prepare volume #2 for /dev/fd0H1440 and hit return:
#
注意開始備份前要格式化所有軟盤,或在tar 需要新軟盤時用另一個虛擬控制台或虛擬終端格式化它。
備份完後,應該檢查它是否完好,用-compare (-d)選項:
# tar -compare -verbose -f /dev/ftape
usr/src/
usr/src/
linux usr/src/linux-1.2.10-includes/
....
#
失敗的備份檢查意味著如果你丟失了原始數據,備份也無法恢復。
增量備份可用帶-newer (-N)選項的tar 來實現:
# tar -create -newer '8 Sep 1995' -file /dev/ftape /usr/src -verbose
tar: Removing leading / from absolute path names in the archive
usr/src/
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/modules/
usr/src/linux-1.2.10-includes/include/asm-generic/
usr/src/linux-1.2.10-includes/include/asm-i386/
usr/src/linux-1.2.10-includes/include/asm-mips/
usr/src/linux-1.2.10-includes/include/asm-alpha/
usr/src/linux-1.2.10-includes/include/asm-m68k/
usr/src/linux-1.2.10-includes/include/asm-sparc/
usr/src/patch-1.2.11.gz
#
不幸的是,tar 不能知道一個文件的i節點信息變化,例如,文件的權限位變化,或文件名變化。這可用find 命令和比較當前文件系統狀態和先前備份的文件列表。用於此的Scripts和程序可以在Linux FTP站點上找到。
用tar回存
tar 的-extract (-x)選項展開文件:
# tar -extract -same-permissions -verbose -file /dev/fd0H1440
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/kernel.h
...
#
也可以用命令行只展開特定的文件和目錄(及其中的文件和子目錄):
# tar xpvf /dev/fd0H1440 usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
#
用-list (-t)選項看一個備份卷中有什麼文件:
# tar -list -file /dev/fd0H1440
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/kernel.h
...
#
注意tar 永遠是順序讀一個備份卷,因此大的卷會很慢。使用磁帶機或其他順序介質時不可能使用隨機存取數據庫技術。
tar 不處理刪除文件屬性。如果你需要從一個全備份和一個增量備份恢復一個文件系統,並且2個備份之間你刪除了一個文件,當你恢復完後,這個文件又存在了。如果這個文件包含應該刪除的敏感數據,這是個大問題。
多級備份
上面的章節概述了簡單備份的方法,對個人使用或小的站點使用。對於多數重負荷的使用,多級備份更適用。
簡單備份有2個備份級:全備份和增量備份。通常可以有任意數量的備份級。全備份是0級,不同級別的增量備份是1、2、3...級,每個增量備份級備份同一或上一級別的上次備份後改變的所有東西。
這樣多的目的是更便宜地允許更長的備份歷史backup history。在前面的例子中,備份歷史追溯到上一個全備份。可以增多磁帶來擴展備份歷史,但每個新磁帶擴展一周,這樣可能太貴。更長的備份歷史是有用的,因為刪除或損壞的文件可能長時間未被發現。即使不是一個文件的最新版本,也比沒有好。
多級備份可以更便宜地擴展備份歷史。例如,如果你有10盤磁帶,可用磁帶1和2做月備份(每月的第一個周五),磁帶3-6做周備份(其他周五,因為每月最多可能有5個周五,因此需要4盤磁帶),磁帶7-10做日備份(周一到周四)。只增加了4盤磁帶,就將2周的備份歷史擴展到2個月。誠然,我們無法恢復這2個月中每個文件的所有版本,但這樣恢復的經常是足夠好了。
備份級可使文件系統恢復用最少的時間。如果你有許多只是單調增長級別數的增量備份,要恢復整個文件系統,你需要回存所有備份。而如果級別數不是單調增長,可以減少備份和回存的數目。
為了將回存需要的磁帶數據減至最小,可以用小的級別做每個增量磁帶。然而,這樣做每個增量備份的時間會增加(每個備份拷貝了上次全備份後改變的所有東西)。一個好的方案建議在dump man頁中給出,並在表 9.2中說明。 Use the following su
clearcase/" target="_blank" >ccession of backup levels: 3, 2, 5, 4, 7, 6, 9, 8, 9... 這使備份和回存所用的時間保持較少。 The most you have to backup is two day's worth of work. 恢復所需磁帶數有賴於全備份的間隔,但它比簡單的方案少。
一個好的方案降低了工作量,並能追尋更多的東西。You must decide if it is worth it.
dump 對備份級有內置的支持。而tar 和cpio 則必須用shell scripts實現。
備份什麼?
你可能想盡多備份。主要的例外是容易重安裝的軟件, 但即使是它們,也有配置文件,對備份很重要,以免對這些軟件全部重新配置。另一個主要的例外是/proc 文件系統,因為他們只包含通常由核心自動產生的數據,備份它們絕不是個好主意。特別是/proc/kcore 文件更是不必要,因為它只是你當前物理內存的映象,而且很大。
Gray areas include the news spool, log files, and many other things in /var . 你必須決定重點考慮什麼。
備份最明顯的是用戶文件(/home )和系統配置文件(/etc ,但還可能有散落在文件系統其他地方的其他東西。
壓縮備份
備份占用大量空間,要花費大量金錢。為了降低空間
需求,備份可以壓縮。有幾種方法。有些程序內置支持壓縮。例如GNU tar 的-gzip (-z)選項,通過管道(pipe),在寫到備份介質前,先用 gzip 壓縮程序壓縮。
不幸的是,壓縮備份可能導致問題。由於壓縮工作的原理,如果一個bit錯誤,可能導致所有其他壓縮數據不可用。有些備份程序內置錯誤校正,但沒有辦法處理大量的錯誤。就是說,如果用GNU tar 壓縮備份,一個單獨的錯誤回導致整個備份丟失。備份必須可靠,這樣的壓縮方法不好。
還有一個方法是單獨壓縮每個文件,這也回導致一個文件的丟失,但不會影響其他文件。丟失的文件可能已經因為什麼原因損壞,因此這種情況比不使用壓縮差不了多少。 afio 程序(cpio 的一個變種)可以這樣。
壓縮需要時間,which may make the backup program unable to write data fast enough for a tape drive. 這可以靠輸出緩沖來避免(如果備份程序足夠智能,可以內置,否則可以通過其他程序), but even that might not work well enough. 這只會在慢的計算機上是個問題。