Unix刪除檔案的找回方法 我們知道Unix刪除一個檔案的過程很簡單,那就是釋放索引節點表和檔案佔用的資料區塊,清空檔案佔用的索引節點,但不清除檔案內容。但刪除檔案與刪除目錄的處理不盡相 同,不同命令刪除檔案的過程也不相同。 www.2cto.com Unix刪除一個檔案的具體步驟是: 根據檔案i節點的地址表逐一釋放檔案佔用的磁碟資料區塊,然後清空相應的節點,最後釋放i節點。 刪除一個目錄的過程是: 首先逐一刪除目錄裡的所有檔案,然後刪除目錄。目錄本身也是一個檔案,故Unix刪除方法與刪除檔案一致。 要恢複被刪除的檔案,只能根據刪除後留下的東西去做文章。Unix刪除檔案後留下了什麼呢?由上述分析可知: 其一,留下了檔案的內容; 其二,留下了“現場”。檔案的恢複策略只能從這兩個方面來分析。 1.根據磁碟現場進行恢複 如果檔案被刪除,現場未被破壞(即檔案被刪除後硬碟未發生過寫操作),而且假定只Unix刪除了一個檔案,那麼可根據系統的分配演算法進行恢複。因為系統建立一個文 件時,必定根據某一特定的分配演算法決定檔案佔用的資料區塊位置。 而當Unix刪除該檔案後,它所佔用的資料區塊被釋放,又回到系統的分配表中,這時如果重建立立一個 檔案,系統根據原來的分配演算法分配出的資料區塊必定跟該檔案原來佔用的資料區塊一致。 而且我們知道,Unix檔案最後一個資料區塊尾部多出的位元組是全部置0的, 據此只要調用系統的資料分配演算法,在系統中一塊一塊地申請資料區塊,只要發現一個分配出的資料區塊中尾部全為0,即可認為檔案結束,由此可確定檔案長度和內 容,進而實現恢複。方法如下: ● 申請一個索引節點,即向系統申請建立一個新檔案名稱而不寫入任何內容。如: #>/tmp/xx。 ● 調用系統分配資料區塊演算法getnextfreeblock()得到一個資料區塊號,記入某一地址表變數中。 ● 讀出這個資料區塊,判斷其尾部是否全部連續為0,若不是,則回到第二步,若是,則進行第四步。 ● 首先用系統函數fstat得到/tmp/xx的i節點號,然後將第二步所得的地址表寫入索引節點的地址表中(注意間址問題),並根據資料區塊個數和最後一塊中有效資料長度計算出檔案大小,寫入i節點的di_size欄位。 ● 回寫系統的索引節點表即可。 需要說明的是: 第一,系統分配資料區塊的演算法因不同的Unix版本而不同; 第二,有的Unix如SCO Unix 5.0版,其空閑資料區塊的分配和回收是使用一種動態鏈表的資料結構來實現的,它們的檔案恢複更加容易,只要在空閑鏈表中的表尾去尋找即可。