發新話題
打印

Linux 備份與恢復速成指南

Linux 備份與恢復速成指南

級別: 初級
Chris Walden
電子商務架構師, IBM Developer Relations
2004 年 1 月
IBM 電子商務架構師 Chris Walden 將透過他在 developerWorks 上發表的九篇系列文章來指導您如何在 Linux 環境中運用您的 Windows 操作技巧。本部分將考察 Linux 系統上的內容,同時在考慮到恢復和安全的情況下,計畫並實現常規備份。
Linux 是一個穩定而可靠的環境。但是任何計算系統都有無法預料的事件,比如硬體故障。擁有關鍵配置訊息的可靠備份是任何負責任的管理計畫的組成部分。在 Linux 中可以透過各種各樣的方法來執行備份。所涉及的技術從非常簡單的腳本驅動的方法,到精心設計的商業化軟體。備份可以保存到遠程網路設備、卡帶驅動器和其他可移動媒體上。備份可以是基于文件的或基于驅動器映像的。可用的選項很多,您可以混合搭配這些技術,為您的環境設計理想的備份計畫。
確定策略
可以採用許多不同的方法來備份系統。欲了解關於這方面的一些訊息,您可以閱讀本文結尾處 參考資料 中列出的“Introduction to Backing Up and Restoring Data”一文。
所備份的內容很大程度上取決于您備份它們的理由。您是否試圖從嚴重的故障(比如硬碟驅動器問題)中恢復?您是否想歸檔以便能在需要時恢復舊的文件?您計畫從一個冷系統和還原著手,還是從一個預加載的備用系統著手?
確定要備份的內容
在備份和還原系統時,Linux 基于文件的性質成了一個極大的優點。在 Windows 系統中,註冊表與系統是非常相關的。配置和軟體安裝不僅僅是將文件放到系統上。因此,還原系統就需要有能夠處理 Windows 這種特性的軟體。在 Linux 中,情況就不一樣了。配置文件是基于文本的,並且除了直接處理硬體時以外,它們在很大程度上是與系統無關的。硬體驅動程式的現代方法是,使它們以動態加載的模塊的形式可用,這樣內核就變得更加與系統無關。不同于讓備份必須處理作業系統如何安裝到系統和硬體上的複雜細節,Linux 備份處理的是文件的打包和解包。
• 一般情況下,以下這些目錄是需要備份的︰
• /etc
包含所有核心配置文件。這其中包括網路配置、系統名稱、防火牆規則、用戶、組,以及其他全局系統項。
• /var
包含系統守護進程(服務)所使用的訊息,包括 DNS 配置、DHCP 租期、郵件緩沖文件、HTTP 伺服器文件、db2 實例配置,等等。
• /home
包含所有用戶的默認用戶主目錄。這包括他們的個人設置、已下載的文件和用戶不希望失去的其他訊息。
• /root
是根(root)用戶的主目錄。
/opt
是安裝許多非系統文件的地方。IBM 軟體就安裝在這裡。OpenOffice、JDK 和其他軟體在默認情況下也安裝在這裡。
• 有些目錄是應該考慮 不備份的。
• /proc
應該永遠不要備份這個目錄。它不是一個真實的文件系統,而是營運內核和環境的虛擬化視圖。它包括諸如 /proc/kcore 這樣的文件,這個文件是整個營運內存的虛擬視圖。備份這些文件只是在浪費資源。
/dev
包含硬體設備的文件表示。如果計畫還原到一個空白的系統,那就可以備份 /dev。然而,如果計畫還原到一個已安裝的 Linux 系統,那么備份 /dev 是沒有必要的。
其他目錄包含系統文件和已安裝的包。在伺服器環境中,這其中的許多訊息都不是自定義的。大多數自定義都發生在 /etc 和/home 目錄中。不過出于完整性的考慮,您可能希望備份它們。
在生產環境中,我希望確保數據不會丟失,因而我會備份除 /proc 目錄之外的整個系統。如果最擔心用戶和配置,我會僅備份 /etc、/var、/home 和 /root 目錄。
備份工具
正如前面提到過的, Linux 備份在很大程度上就是打包和解包文件。這允許使用現有的系統實用工具和腳本來執行備份,而不必購買商業化的套裝軟件。在許多情況下,這類備份將是足夠的,並且為管理員提供了極大的控制能力。備份腳本可以使用 cron 命令來自動化,這個命令控制 Linux 中預定的事件。
tar
tar 是一個已移植到 Linux 中的經典 UNIX 命令。 tar 是 tape archive(卡帶歸檔)的縮寫,最初設計用于將文件打包到卡帶上。如果您下載過 Linux 源代碼,或許已經碰到過 tar 文件。這是一個基于文件的命令,它本質上是連續地、首尾相連地堆放文件。
使用 tar 可以打包整個目錄樹,這使得它特別適合用于備份。歸檔文件可以全部還原,或從中展開單獨的文件和目錄。備份可以保存到基于文件的設備或卡帶設備上。文件可以在還原時重定向,以便將它們重新放到一個與最初保存它們的目錄(或系統)不同的目錄(或系統)。 tar 是與文件系統無關的。它可以使用在 ext2、ext3、 jfs、Reiser 和其他文件系統上。
使用 tar 非常類似于使用諸如 PKZip 這樣的文件實用工具。只需將它指向一個目的(可以是文件或設備),然後指定您想要打包的文件。您可以透過標準的壓縮類型來動態壓縮歸檔文件,或指定一個自己選擇的外部壓縮程式。要透過 bzip2 壓縮或解壓縮文件,可使用 tar -z 命令。
要使用 tar 來把除 /proc 目錄之外的整個文件系統備份到 SCSI 卡帶設備︰

tar -cpf /dev/st0 / --exclude=/proc
在上面的例子中, -c 開關表示歸檔文件正在被創建。 -p 開關表示我們希望保留文件許可權限,這對良好的備份來說是很關鍵的。 -f 開關指向該歸檔文件的文件名。在本例中,我們使用的是原始卡帶設備 /dev/st0。/ 表示我們想要備份的內容。既然我們想要備份整個系統,因此把這個開關指定為根(root)。當把 tar 指向一個目錄(以 / 結尾)時,它會自動遞歸。最後,我們排除了 /proc 目錄,因為它沒有包含需要保存的任何內容。如果單盒卡帶容納不下這個備份,我們需要添加 -M 開關(本例中沒有顯示)以進行多卷備份。
以防萬一
不要忘了 Linux 是區分大小寫的。例如, tar 命令應該總是以小寫的形式執行。命令行開關可以是大寫、小寫或大小寫的混合。例如, -t 和 -T 執行不同的功能。文件或目錄名稱可以混合使用大小寫,而且就像命令和命令行開關一樣,是區分大小寫的。
要还原一个或多个文件,可以使用带提取开关( -x )的 tar 命令:

tar -xpf /dev/st0 -C /
這裡的 -f 開關同樣指向歸檔文件, -p 開關表明我們想要還原歸檔的權限。 -x 開關表明從歸檔中提取文件。 -C / 表明我們想要讓還原從 / 開始。 tar 通常還原到營運這個命令的目錄。 -C 開關使我們的當前目錄不再相關。
您可能會經常使用的另外兩個 tar 命令是 -t 和 -d 開關。 -t 開關列出某個歸檔文件的內容。 -d 開關將歸檔文件的內容與系統上的當前文件作比較。
為便于操作和編輯,您可以將想要歸檔的文件和目錄放進一個文本文件中,然後在命令行透過 -T 開關引用這個文本文件。這些文件和目錄可以與命令行上列出的其他目錄結合起來。下面的命令行备份 MyFiles 中列出的所有文件和目录、/ 根目录和 /tmp 目录中的所有 iso 文件。

tar -cpf /dev/st0 -T MyFiles /root /tmp/*.iso
文件列表只是一個文本文件,其中列出文件或目錄。下面是一个例子:

/etc


/var


/home


/usr/local


/opt


請注意 tar -T (或 files-from )命令不能接受通配符。文件必須明確地列出。上面的例子展示了一種單獨地引用文件的方法。您還可以執行腳本來搜索系統,然後建立一個列表。下面就是这样一个脚本的例子:

#!/bin/sh


cat MyFiles > TempList


find /usr/share -iname *.png >> TempList


find /tmp -iname *.iso >> TempList


tar -cpzMf /dev/st0 -T TempList


上面的腳本首先將 MyFiles 中的所有現有文件列表複製到 TempList。然後它執行兩個 find 命令來搜索文件系統中匹配某個模式的文件,並將它們附加到 TempList。第一次是搜索 /usr/share 目錄樹中以 .png 結尾的所有文件。第二次是搜索 /tmp 目錄樹中以 .iso 結尾的所有文件。在建立好列表之后, tar 然後在文件設備 /dev/st0 (第一個 SCSI 卡帶設備)上創建 一個新的歸檔文件,該文件使用 g zip 格式來壓縮,並保留所有文件權限。該歸檔文件將跨越多個卷。要歸檔的文件的名稱將從 TempList 文件中提取。
還可以使用腳本來執行更精細的操作,比如增量備份。Gerhard Mourani 在他的 Securing and Optimizing Linux 一書中給出了一個優秀的腳本,您可在本文結尾處的 參考資料中找到關於這本書的訊息。
也可以編寫腳本來還原文件,雖然還原通常是手動進行的。正如上面提到過的,用于提取文件的 -x 開關代替了 -c 開關。可以還原整個歸檔文件,或者還原指定的個別文件或者目錄。使用通配符來引用歸檔文件中的文件是可以的。還可以使用開關來轉儲和還原。
dump 和 restore
dump 可以執行類似 tar 的功能。然而, dump 傾向于考慮文件系統而不是個別的文件。下面是引自 dump 手冊文件中的內容︰“dump 檢查 ext2 文件系統上的文件,並確定哪些文件需要備份。這些文件將出于安全保護而被複製到給定的磁片、卡帶或其他存儲媒體上……大于輸出媒體容量的轉儲將被劃分到多個卷。在大多數媒體上,容量是透過一直寫入直至返回一個 end-of-media 標記來確定的。”
配合 dump 的程式是 restore ,它用于從轉儲映像還原文件。
restore 命令執行轉儲的逆向功能。可以首先還原文件系統的完全備份,而后續的增量備份可以在已還原的完全備份之上覆蓋。可以從完全或部分備份中還原單獨的文件或者目錄樹。
dump 和 restore 都能在網路上營運,因此您可以透過遠程設備進行備份或還原。 dump 和 restore 使用卡帶驅動器和提供廣泛選項的文件設備。然而,兩者都僅限用于 ext2 和 ext3 文件系統。如果使用的是 JFS、Reiser 或者其他文件系統,您將需要其他的實用工具,比如 tar 。
使用 dump 執行備份
使用 dump 執行備份是相當簡單的。下面的命令执行一个完全 Linux 备份,它把所有 ext2 和 ext3 文件系统备份到一个 SCSI 磁带设备。

dump 0f /dev/nst0 /boot


dump 0f /dev/nst0 /


在這個例子中,系統中有兩個文件系統。一個用于 /boot,另一個用于 / ,這是常見的配置。它們必須在執行備份時單獨地引用。 /dev/nst0 引用第一個 SCSI 卡帶驅動器,不過是以非重繞的模式引用。這樣確保各個卷在卡帶上一個接一個地排列。
dump 的一個有趣特性是其內置的增量備份功能。在上面的例子中, 0 表示 0 級或基本級備份。這是完全系統備份,您要定期執行以保存整個系統。對于后續的備份,您可以使用其他數字(1-9)來代替 0,以改變備份級別。1 級備份會保存自從執行 0 級備份以來更改過的所有文件。2 級備份會保存自從執行 1 級備份以來更改過的所有文件,以此類推。使用 tar 和腳本可以執行相同的功能,但要求腳本創建人員提供一種機製來確定上次備份是何時執行的。 dump 具有它自己的機製,即它在執行備份時會輸出一個更新文件(/etc/dumpupdates)。這個更新文件將在每次執行 0 級備份時被重設。后續級別的備份會保留它們的標記,直至執行另一次 0 級備份。如果您在執行基于卡帶的備份, dump 會自動跟蹤多個卷。
跳過文件
標記將被 dump 跳過的文件和目錄是可以做到的。实现此目的的命令是 chattr ,它改变 ext2 和 ext3 文件系统上的扩展属性。

chattr +d
上面的命令向文件添加一個標記,讓 dump 在執行備份時跳過該文件。
使用 restore 來執行還原
要還原使用 dump 保存的訊息,可以使用 restore 命令。像 tar 一樣, dump 能夠列出( -t )歸檔文件的內容,並與當前文件作比較( -C )。使用 dump 時必須小心的地方是還原數據。有兩種非常不同的還原方法,您必須使用正確的方法才能獲得可預測的結果。
重建 (-r)
記住,在設計 dump 時考慮得更多的是文件系統,而不是單獨的文件。因此,存在兩種不同的文件還原風格。要重建一個文件系統,可使用 -r 命令行開關。設計重建的目的是為了能在空文件系統上操作,並將它還原為已保存的狀態。在執行重建之前,您應該已經創建、格式化和裝載(mount)了該文件系統。不應該對包含文件的文件系統執行重建。
下面是使用上面执行的转储来执行完全重建的例子。

restore -rf /dev/nst0
上面這個命令需要針對要還原的每個文件系統分別執行。
在需要的時候,可以重複這個過程來添加增量備份。
提取 (-x)
如果需要使用單獨的文件而不是使用整個文件系統,您必須使用 -x 開關來提取它們。例如,要仅从我们的磁带备份中提取 /etc 目录,可使用以下命令:

restore -xf /dev/nst0 /etc
交互式還原 (-i)
restore 提供的另外一個特性是交互式模式。使用命令:

restore -if /dev/nst0
將把您置於交互式 shell 中,同時還顯示了包含在該歸檔文件中的項。鍵入“help”將會顯示一個命令列表。然後您就可以瀏覽並選擇希望提取的項。務必記住,您提取的任何文件都將進入當前目錄。
dump 與 tar
dump 和 tar 都有一批擁護者。兩者都各有優點和缺點。如果您營運的是除 ext2 或 ext3 之外的任何文件系統,那么 dump 就對您不可用。然而如果不是這種情況,那么只需最少的腳本就能營運 dump ,並且 dump 還具有可用于幫助還原的交互式模式。
我傾向于使用 tar ,因為我喜歡編寫腳本來獲得額外的控制級別。此外還有用于操作 .tar 文件的多平台工具。
其他工具
在 Linux 中,任何能夠複製文件的程式都可以用來執行某種程度的備份。有人就使用 cpio 和 dd 來執行備份 。 cpio 是又一個與 tar 差不多的打包實用工具,但使用得不太普遍。 dd 是一個文件系統複製實用工具,它產生文件系統的二進製副本。 dd 還可用于產生硬碟驅動器的映像,類似于使用諸如 Symantec 的 Ghost 這樣的產品。然而, dd 不是基于文件的,因此您只能使用它來將數據還原到完全相同的硬碟驅動器分區。
商業化備份產品
可用于 Linux 的商業化備份產品有很多。商業化產品一般提供了便利的界面和報告系統,而在使用諸如 dump 和 tar 這樣的工具時,您必須自食其力。商業化產品很廣泛,通常提供大量的特性。使用商業套裝軟件的最大好處是,有一個預先建立的用于處理備份的策略,您可以立即投入工作。商業化的開發人員已經犯了您即將要犯的許多錯誤,他們的智慧的代價相比于丟失您的寶貴數據來說是廉價的。
Tivoli Storage Manager
Tivoli Storage Manager 或許是現下可用于 Linux 的最好的商業化備份和存儲管理實用工具。Tivoli Storage Manager 伺服器可營運在多種平台上,包括 Linux,而客戶機則可以營運在更多種類的平台上。
本質上,Storage Manager 伺服器是透過適合于備份該環境的設備來配置的。要參與備份的任何系統都要加載一個與伺服器通信的客戶機。備份可以按計畫執行、透過 Tivoli Storage Manager 客戶機界面手動執行,或者使用基于 Web 的界面遠程執行。
TSM 基于策略的性質意味著無需經常調整文件列表,就能夠為備份行為定義中心規則。此外,IBM Tivoli Storage Resource Manager 還能夠識別、評估、控制和預測企業存儲資產的利用情況,能夠檢測潛在的問題並自動應用自修復調整。更多細節請參見 Tivoli Web 站點(參見 參考資料中的鏈接)。
图 1. Tivoli Storage Manager 菜单

然後備份和還原就透過遠程設備來處理 。
图 2. Tivoli Storage Manager 界面

前瞻和回顧
擁有良好備份的第一步是擁有計畫。首先知道您需要保存的數據以及需要什麼恢復策略,然後使用最適合該策略的工具。
Linux 附帶了一些現成的(out of the box)有用備份工具。其中兩個最常用的是 tar 和 dump/restore 。兩者都能執行完全系統備份。使用創造性的腳本,您能夠設計一個自定義的方案來本地和遠程地備份系統。
然而,編寫自己的備份腳本可能是一項繁重的任務,對于複雜的企業來說更是如此。諸如 Tivoli Storage Manager 這樣的商業化軟體降低了學習難度,並允許您立即控制自己的備份,但是您可能必須調整自己的策略來適應這些工具的功能。
• 參考資料
• 您可以參閱本文在 developerWorks 全球站點上的 英文原文.
• 閱讀 Windows 到 Linux 之旅系列文章的其他部分( developerWorks,2003 年 11 月)。
• Linux Administrator's Security Guide是一個安全指南,其中有一個非常優秀的小節討論了 Linux 備份和恢復實踐。
• Introduction to Backing Up and Restoring Data是一篇與作業系統或系統體系架構無關的概述。作者在本文中探討了備份技術以及如何為備份製定計畫。
• Linux Administration Made Easy是一篇較舊的參考資料,但是仍然有用,因為 Linux 的一般過程和技術仍然保持一致。
• The Linux System Administrator's Guide為初學人介紹了 Linux 系統的系統管理。
• Securing and Optimizing Linux - A Hands on Guide (Red Hat Edition) 一書的 第 7 章“備份和還原”是另一份不錯的指南,其中包括一個腳本,用于執行基于 tar 的增量備份。
• The TAO of Backup是對備份哲學的有趣展示,以哲學的形式呈現出來。雖然它和一款商業化的產品相關,但是這段訊息寫得非常好。
• IBM developerWorks教程“ Linux 機器備份”指導您完成創建和貫徹備份策略的過程。
• 在 CD 上存儲數據和其他內容很容易︰在 IBM developerWorks文章“ 在 Linux 上燒錄 CD”中學習如何做到這點。
• 如果正在從 Windows 環境轉換到 Linux 環境,您還需要閱讀 Linux 用戶技術 FAQ。
• The Tivoli Storage Manager 被評為 LinuxWorld 2003 最佳存儲解決方案。從 IBM 站點的 Linux 專區了解更多關於 Tivoli Storage Manager for Linux的訊息。
• Tivoli 產品頁 包含關於 Tivoli 的更多訊息,包括安全和隱私特性。
• “Linux 文檔計畫”中 Introduction to Linux的第 3 章 討論了文件權限和安全。
在 developerWorksLinux 專區可以找到更多 為 Linux 開發者準備的參考資料。
關於作者
Chris Walden 是德克薩斯州奧斯汀的 IBM Developer Relations Technical Consulting(也稱為 dragonslayers )的一名電子商務架構師,該公司為 IBM 商業伙伴提供教育、實現和咨詢。他致力于 Linux 相關工作,一有機會就向身邊的人宣傳 Linux 的種種好處。除了完成他的架構師的職責之外,他還精通 Linux 基礎設施伺服器的各個領域,包括混合平台用戶環境下的文件、打印以及其他應用服務等。Chris 有 10 年的計算機行業經驗,從現場支持到 Web 應用開發和顧問,各個領域他都曾涉足。您可以透過電子郵件 [email protected] 與 Chris 聯繫。

TOP

發新話題