硬件不願定是可靠的 軟件確定是不可靠的 人不願定是不可靠的 而天然確定是可靠的 本張說明爲何、如何、什麼時候要作備份,及如何回存備份的東西。 備份的重要 數據是有價值的。從新產生它須要你花費時間和努力,而且要花費金錢或至少傷心和眼淚,有時甚至不可能從新產生,例如一些實驗結果。因爲數據是一種投資,你必須保護它,並採起措施避免丟失。 丟失數據通常有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級,不一樣級別的增量備份是一、二、3...級,每一個增量備份級備份同一或上一級別的上次備份後改變的全部東西。 這樣多的目的是更便宜地容許更長的備份歷史backup history。在前面的例子中,備份歷史追溯到上一個全備份。能夠增多磁帶來擴展備份歷史,但每一個新磁帶擴展一週,這樣可能太貴。更長的備份歷史是有用的,由於刪除或損壞的文件可能長時間未被發現。即便不是一個文件的最新版本,也比沒有好。 多級備份能夠更便宜地擴展備份歷史。例如,若是你有10盤磁帶,可用磁帶1和2作月備份(每個月的第一個週五),磁帶3-6作周備份(其餘週五,由於每個月最多可能有5個週五,所以須要4盤磁帶),磁帶7-10作日備份(週一到週四)。只增長了4盤磁帶,就將2周的備份歷史擴展到2個月。誠然,咱們沒法恢復這2個月中每一個文件的全部版本,但這樣恢復的常常是足夠好了。 備份級可以使文件系統恢復用最少的時間。若是你有許多隻是單調增加級別數的增量備份,要恢復整個文件系統,你須要回存全部備份。而若是級別數不是單調增加,能夠減小備份和回存的數目。 爲了將回存須要的磁帶數據減至最小,能夠用小的級別作每一個增量磁帶。然而,這樣作每一個增量備份的時間會增長(每一個備份拷貝了上次全備份後改變的全部東西)。一個好的方案建議在dump man頁中給出,並在表 9.2中說明。 Use the following succession 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. 這隻會在慢的計算機上是個問題。