Linux 多用戶多任務特性下,檔案一旦刪除極難恢復。雖 rm 僅在 inode 標記刪除、不清除資料,但其他用戶/寫入進程會快速覆蓋。單機家用環境或誤刪後及時搶救,仍有恢復可能。本文實戰演示 debugfs 與手動 inode 編輯兩大恢復法。
# 假設檔案在 /usr 分區
mount -o remount,ro /usr
# -r 唯讀;-n 不寫 /etc/mtab(恢復 /etc 時需加)
# 若提示 busy,查找佔用進程
fuser -vm /usr
# 停止非關鍵進程
fuser -kvm /usr
# 單一大分區可進單用戶模式:開機提示符輸入 linux single
# 恢復出來的資料勿寫回原分區,可掛載 DOS/Windows 分區存放
mount -o ro /dev/hda1 /mnt/hda
假設 Linux 在 /dev/hda5:
debugfs /dev/hda5
debugfs: lsdel
# 列出已刪除 inode,欄位:Inode、Owner、Mode、Size、Blocks、Time deleted
# 依大小與刪除時間判斷目標,例 inode 196829
debugfs: stat <196829>
# 顯示 inode 詳細資訊,含 BLOCKS 清單
debugfs: dump <196829> /mnt/hda/01.sav
# 恢復檔案至指定路徑
debugfs: quit
debugfs: mi <196829>
# 互動式修改各欄位,按 Enter 保持原值
# 關鍵修改:
Deletion time [0x31a9a574] 0 # 改為 0 表示未刪除
Link count [0] 1 # 改為 1 恢復連結計數
# 其他欄位保持預設
debugfs: quit
fsck /dev/hda5
# 系統提示發現遺失資料區塊,置入 lost+found 目錄,即為恢復檔案
debugfs 操作需極度小心,建議先備份重要分區映像