Ext3 日誌式檔案系統刪除檔案後,inode 與資料區塊不會立即清零,透過 debugfs 讀取 Journal 可恢復誤刪檔案。前提:刪除後未重啟系統,Journal 尚未覆寫。
# 建立測試檔
echo "this is test file" > test.txt
ls -il test.txt
# 15 -rw-rw-r-- 2 root root 20 Apr 17 12:08 test.txt (inode 15)
# 刪除檔案
rm test.txt
debugfs /dev/sda5
debugfs: logdump -i <15>
關鍵輸出:
Blocks: (0+1): 10234 # 資料區塊位址
dd if=/dev/sda5 of=/tmp/test.txt bs=4096 count=1 skip=10234
bs=4096:區塊大小 (Ext3 預設 4KB)skip=10234:跳過 10234 區塊,讀取第 10235 區塊count=1:讀取 1 區塊cat /tmp/test.txt
# this is test file
debugfs /dev/sda5
debugfs: ls -d
# 輸出含:<2121567> (20) mytest.txt # 尖括號表示已刪除 inode
debugfs: logdump -i <2121567>
尋找 Type: regular 且含 Blocks: 的記錄:
Blocks: (0+1): 2142216
dd if=/dev/sda5 of=/home/user/mytest_recovered.txt bs=4096 skip=2142216 count=1
cat /home/user/mytest_recovered.txt
# this is my test file
debugfs: ls -d 找刪除檔 inode (尖括號標記)debugfs: logdump -i <inode> 找資料區塊位址 (Blocks: 行)dd if=裝置 of=恢復檔 bs=4096 skip=區塊號 count=1 提取資料lsdel 指令亦可列出刪除 inode,但輸出較難解析alias rm='rm -i' 強制確認trash-cli 移至回收桶而非直接刪除掌握 debugfs 與 dd 配合 Journal 的恢復技巧,可在關鍵時刻挽回誤刪損失,但建立完備備份策略才是根本之道。