熊雄
Unix操作系統自七十年代初在Bell實驗室誕生以來,以其高效率、良好的開放性、安全性和穩定性深受用戶的歡迎,到目前歷經三十余年市場風雲變換,依然在企業級操作系統市場上占據巨大份額。特別是與其他主流操作系統相比,Unix系統突出的穩定性和安全性使其成為數據服務器或者文件服務器的首選操作系統,承擔著大部分企業的關鍵業務。
目前能夠威脅Unix系統平台的病毒並不多見,而Unix完善的文件系統也使得由於系統崩潰等軟件故障造成的數據丟失並不多見。但是由於多年來始終面向企業級用戶,Unix的用戶界面友好程度和Windows系列平台相比還有一定差距,許多系統管理的任務還需要通過命令行的方式完成,而且能夠完全通曉Unix系統管理命令及其選項的專業人員也不多,所以因誤操作造成數據丟失的情況屢屢發生。特別是由於Unix系統的超級賬號擁有無限的權利,所以如果是使用超級賬號的系統管理員進行了誤操作,可能造成的數據丟失是非常巨大的。此外,對Unix系統來說,由於突然掉電等原因造成系統不正常退出而發生的數據文件破壞要比在Windows系統下嚴重得多。所以,研究如何在Unix系統下查找和恢復丟失文件是非常實用和有意義的。但是Unix的磁盤格式和文件系統格式並不為人所熟知,我們在市場上很少見到能夠在Unix系統下進行文件恢復的技術和產品。本文通過分析Unix系統的磁盤和文件系統格式,向大家推薦一款能夠在這種格式下進行文件恢復的有效工具——FinalData。
Unix系統在發展過程中出現了非常多的分支和變種,其中比較重要的是AT&T公司開發的Unix System V和加州大學伯克利分校開發的BSD Unix。許多Unix平台硬件廠商都開發了自己的Unix版本,但這些Unix版本都是以System V或者BSD為藍本發展變化來的,如IBM公司的AIX系統、SUN公司的Solaris系統、惠普公司的HP-UX系統、SGI公司的IRIX系統及DEC公司(現已被康柏收購)的DEC Unix系統等。九十年代初誕生的Linux操作系統和Unix系統淵源很深,在很多方面也借鑒了Unix系統的設計思想。所以Linux與Unix系統在磁盤結構和文件系統結構上大同小異,FinalData在這些系統中的使用具有普遍適用性。下面我們將以SUN Solaris系統為例進行分析討論。
圖1
Unix的文件系統和Windows的文件系統一樣是采用樹狀分級目錄結構。但在Windows中每一個邏輯分區都是一棵獨立的目錄樹(即都從根目錄開始),而在Unix系統中只有一棵完整的目錄樹。這棵目錄樹缺省由主磁盤的第一個分區(類似Windows中的C驅動器)承載,而本磁盤上的其他分區及其他磁盤上的分區將安裝在目錄樹的不同節點上,圖1是一個Unix文件系統的可能的目錄樹結構。普通用戶通常只需要了解目錄信息而無需關心磁盤和分區的情況,但是作為管理員在進行日常系統維護工作和試圖恢復丟失的文件時,必須清楚文件和目錄具體所在的磁盤及分區位置。 Unix系統采用I節點表來記錄文件信息。一個典型的Unix磁盤分區結構如圖2所示。
圖2
可以看到,有關文件的詳細索引信息都記錄在I節點表中,進行文件恢復的關鍵在於查找和修復I節點表中的信息。下面先討論可能造成文件破壞的原因和一些常規的文件系統維護方法。
除了誤操作而刪除文件以外(對操作系統來說誤刪除和正常的文件刪除是沒有任何區別的),造成文件丟失的最大原因在於系統的不正常退出。這主要是由於在系統運行中,為了提高文件讀寫效率,很多的修改信息及I節點表內容會暫時保存在內存或者Cache(高速緩存)中,等到CPU及其他資源空閒時再向硬盤回寫。突然的退出(如掉電等原因造成)可能導致I節點表內容和硬盤文件不一致而造成文件丟失或者不可用。Unix系統在啟動時通常都會進行文件一致性檢查,即對I節點表內容和磁盤文件系統進行檢查和修復。當Unix系統不能自動進行文件一致性檢查時,我們也可以通過“fsck”命令手動進行文件系統修復(關於fsck命令的詳細用法和各選項含義可以通過Unix系統的使用手冊查看)。
經常進行文件系統備份和磁盤備份是保障數據安全的良好習慣。Unix系統本身帶有文件系統備份和磁盤備份的命令。用戶可以通過調用ufsdump和ufsrestore命令進行文件系統的備份和恢復;也可以調用dd和volcopy命令進行磁盤內容的備份。
當我們在Windows系統中刪除一個文件時,僅僅是目錄入口中相應文件的記錄項所保留的文件名的首字母被改成一個特殊的ASCII碼“E5h”,操作系統即認為該文件已被刪除,而文件的其他信息並未被破壞。所以在Windows中,我們只需要在目錄入口中查找“E5h”字符,就可以找到被刪除文件的大部分相關信息,從而把文件恢復出來。但是在Unix系統中,當刪除一個文件時,該文件所對應的I節點記錄被完全清除,所以如果事先沒有做任何備份,要想把文件完全恢復出來是非常困難的。
冠群聯想軟件公司新推出的數據恢復工具FinalData不僅可以幫助用戶進行Windows系統下的數據恢復,而且是目前僅有的可以支持Unix系統下的數據恢復的專業工具。
FinalData可以幫助用戶進行I節點表的備份。這種備份不同於通過ufsdump等命令進行備份,也不同於一些專用存儲備份軟件所提供的備份。因為它只備份I節點表而不是文件系統本身或者文件內容,所以占用資源非常少,備份速度快,對系統性能幾乎沒有影響,例如在SUN Ultra10工作站上對12GB的文件系統進行備份,耗時大約10秒鐘,占用磁盤空間不足200KB。由於文件刪除只是刪除文件對應的I節點表,文件內容依然存在,所以利用這種對I節點表的備份,在絕大多數情況下可以幫助我們完整恢復數據。而且由於這種備份資源占用非常少,我們可以通過Unix提供的cron命令,讓系統在規定的時間自動進行備份,當發現文件丟失之後,利用丟失前備份的I節點表我們就可以輕松地把文件恢復回來。
在大多數情況下普通用戶沒有養成數據備份的良好習慣,或者備份的時間間隔過長,難以恢復最近生成或者改動過的數據。FinalData還提供了一個刪除檢測功能。當Unix系統啟動時,一個非常小的後台進程會被自動啟動並駐留在內存中,監視用戶對磁盤的寫操作。當用戶刪除一個文件或者目錄時,該進程會自動抽取一些關鍵信息予以保留。通過利用這些保留的關鍵信息,FinalData可以很方便地恢復丟失的數據。
如果事先既沒有做任何備份,也沒有提前預裝FinalData,那麼恢復丟失的數據就變得非常困難。在這種情況下,利用FinalData軟件,我們有兩種方式可以進行文件恢復。其一是完整執行FinalData的磁盤掃描過程。這一過程可能會花費較長的時間(大約幾小時,根據磁盤容量大小而有所變化),但是通過磁盤掃描可以從磁盤上識別出大多數丟失的數據文件。使用這種方法的缺點在於由於I節點表被刪除,諸如文件名、創建和訪問時間、原始目錄位置等信息都被破壞,所以找到的文件都以起始存放簇號作為缺省文件名,我們很難從所磁盤掃描識別出的成百上千個被刪除的文件中挑出我們需要恢復的文件。另一種方法建立在對丟失的文件內容有一定了解的基礎上,通過FinalData的磁盤浏覽器,我們可以直接查看指定位置的磁盤內容。在磁盤浏覽器的查找功能中鍵入丟失的文件中比較特殊的字符串,磁盤浏覽器可以在整個磁盤范圍內查找該字符串,如圖3所示,在磁盤上查找“CALEGEND”字符串。
圖3
當我們利用查找功能找到磁盤上保存的相應字符串後,就可以從磁盤浏覽器中查看該位置附近的磁盤內容。
從磁盤浏覽器中可以看到該文件存儲在磁盤上的全部內容。我們可以通過鼠標從磁盤浏覽器中直接選擇需要恢復的文件內容,把它們保存到一個新建文件中去,就完成了對該文件的恢復。這種方法的限制在於必須對文件內容有一定的了解,而且能夠恢復的文件格式限於ASCII碼文件。
從以上的恢復方法可以看出,即使使用FinalData這樣的專業工具,在沒有預裝、沒有任何備份的情況下完全恢復原有文件也是相當困難的。作為Unix系統管理員或者對數據安全非常關心的用戶,養成良好的數據備份習慣,以及預先安裝類似FinalData這樣的專業恢復工具,是維護數據安全的重要保障。