DOS/Windows 刪除檔案仍保留檔名、長度、起始簇號等資訊;UNIX 完全依賴 i-node (索引節點) 描述檔案屬性、資料區塊表等,刪除時 i-node 被清空,直接恢復幾乎不可能,必須另闢蹊徑。
/usr/include/sys/filsys.h。s_isize 決定,描述檔案屬性、長度、擁有者、資料區塊表等,結構見 /usr/include/sys/ino.h。. (本目錄)、.. (父目錄) 及一般檔案項。rm:標準流程。mv file1 file2:釋放 file2 資料區塊 → file1 改名為 file2 → 釋放 file2 原 i-node。> file:新檔僅申請 i-node 不寫內容;清空舊檔則釋放資料區塊、長度歸零。前提:刪除後無寫入操作、僅刪一檔。系統建檔依特定演算法分配區塊,刪除釋放回分配表,重建檔案時分配結果相同。UNIX 檔案最後一區塊尾部全 0,可作為結束判斷。
步驟:
① 申請 i-node (# > /tmp/xx)
② 呼叫 getnextfreeblock() 取得區塊號記入位址表
③ 讀區塊判斷尾部是否全 0,否則回 ②,是則 ④
④ fstat 取 /tmp/xx i-node 號,寫入位址表、計算長度寫入 di_size
⑤ 回寫 i-node 表完成恢復。
注意:分配演算法因版本異;SCO UNIX 5.0 用動態鏈表,恢復更易 (找鏈表尾)。
UNIX 多程序、多用戶,開關機、硬體/通訊故障皆寫日誌,現場極易破壞。四種內容恢復法:
df -k 確認裝置名 → searchfs() 逐區塊讀取比對 comp() 條件。具體實作依賴特定 UNIX 版本檔案系統結構與區塊分配演算法,本文提供通用思路與策略框架。