原理主要是刪除的文件並沒有實際上從硬盤上摸去,只是inode索引刪除了相關的信息,因此只要找到剛刪除文件的block上,就可以恢復已經刪除的文件。
以下方法在ext3的文件系統上測試通過,ext2的沒有測試過。假設刪除的文件在dir下面,位於/dev/sda5上。
主要借助debugfs
1 運行debugfs,進入調度模式
2 執行open /dev/sda5
3 執行ls -d dir 會列出此目錄最近的操作,其中可以看到<num>的日志刪除記錄
4 執行logdump -i <num> 顯示此日志內容
5 在輸出中尋找刪除文件對應的block,記錄下來blockid
6退出debugfs,運行dd if=/dev/sda5 of=/tmp/saved bs=1024 count=1 skip=blockid
此時就把刪除的文件恢復了,不過這個方法有個問題,如果刪除的是大文件,則占用多個block,操作起來比較麻煩。
debugfs在調試模式下,命令行比較難用,不過其支持-R選項,可以在SHELL里執行,就是用多個-R把要執行的命令連接起來,若命令中需要指定參數則需要加"",否則SHELL解析會有問題。
比較好用的工具有testdisk,之前用過他來恢復和備份系統的分區表,沒有恢復過文件。以后出問題也可以試試。
來源:http://blog.csdn.net/zzulp/article/details/7466866