文件恢復的原理:
首先簡單介紹一下 Linux 文件系統的最基本單元:inode。inode 譯成中文就是索引節點,每一個存儲設備(例如硬盤)或存儲設備的分區被格式化爲文件系統後,應該有兩部份,一部份是 inode,另外一部份是 block,block 是用來存儲數據用的。而 inode 呢,就是用來存儲這些數據的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫權限等。inode 爲每一個文件進行信息索引,因此就有了 inode 的數值。在 ext3 和 ext4 文件系統中,每一個文件都是經過 inode 來描述其數據存放的具體位置,當文件被刪除之後,inode 的數據指針部分被清零,文件目錄區沒有太多變化。文件的讀寫都是經過 inode 來實現,當 inode 數據指針被清零之後,即使文件內容還在,也沒有辦法把文件內容組合出來。當 ext3 和 ext4 文件系統中的元數據 metadata 發生變化時,相應的元數據 metadata 在日誌文件會有一份拷貝。好比一個文件被刪除了,它的 inode 信息會在日誌文件中先保存一份,而後把要刪除文件 inode 相關信息清零。這個日誌文件是循環使用的,當操做過多時,刪除的文件的 inode 日誌記錄會被新的數據替換,這就完全喪失了根據 inode 找回數據的機會了。若是是大量文件的刪除,這個日誌文件會被反覆循環利用屢次,只留給最後刪除的那些文件的恢復機會。node
linux 操做系統下可使用 ls –id 或者 stat 命令來查看文件或者目錄的 inode 值
[root@crushlinux ~]# stat install.log
File: 「install.log」
Size: 34226 Blocks: 80 IO Block: 4096 通常文件
Device: 303h/771d Inode: 4672098 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-05-06 14:49:22.000000000 +0800
Modify: 2013-05-04 22:24:21.000000000 +0800
Change: 2013-05-04 22:24:38.000000000 +0800
[root@crushlinux ~]# ls -i install.log
4672098 install.loglinux
上面信息給出install.log文件的inode號碼爲:4672098api
formost 是一個基於文件頭和尾部信息以及文件的內建數據結構恢復文件的命令行工具。這個過程一般叫作數據挖掘(data carvubg)。formost 能夠分析由 dd、Safeback、Encase 等生成的鏡像文件,也能夠直接分析驅動器。文件頭和尾能夠經過配置文件設置,也能夠經過命令行開關使用 formost 內建的文件類型。formost 最初是由美國空軍特別調查室(Air Force Office of Special Investigations)和信息系統安全研究中心(The Center for Information Systems Security Studies and Research)開發的,如今使用 GPL 許可。Foremost 支持恢復以下格式:avi, bmp, dll, doc, exe, gif, htm, jar, jpg, mbd, mov, mpg, pdf, png, ppt, rar, rif, sdw, sx, sxc, sxi, sxw, vis, wav, wmv, xls, zip。安全
針對 Linux 下的 ext 文件系統來講,經常使用的 Linux 文件刪除恢復工具備 debugfs、ext3grep、extundelete 等。extundelete 是一個開源的數據恢復工具,支持 ext三、ext4 文件系統,其官方站點位於 http://extundelete.sourceforce.net/ ,目前最新穩定版本爲 0.2.0。數據結構
上面介紹的兩種命令行工具 foremost 和 extundelete 兩者相比,foremost 支持的文件系統比較多(包括 ext二、 ext3 、vfat、NTFS、ufs、jfs 等)和 extundelete 支持的文件系統較少(ext三、ext4)文件系統。不過 foremost 只能支持恢復特定格式的文件。ide
模擬實驗環境:
[root@crushlinux ~]# cd ~/Desktop
[root@crushlinux Desktop]# ls
desktop.png
[root@crushlinux Desktop]# rm -f desktop.png
[root@crushlinux Desktop]# cd /root/
下載並編譯安裝 foremost:
[root@crushlinux ~]# wget http://foremost.sourceforge.net/pkg/foremost-1.5.7.tar.gz
[root@crushlinux ~]# tar xf foremost-1.5.7.tar.gz -C /usr/src/
[root@crushlinux ~]# cd /usr/src/foremost-1.5.7/
[root@crushlinux foremost-1.5.7]# ls
api.c cli.c dir.c extract.c foremost.8.gz helpers.c main.h ole.h state.c
CHANGES config.c engine.c extract.h foremost.conf main.c Makefile README工具
[root@crushlinux foremost-1.5.7]# make && make install
先肯定被刪除文件的所在分區,個人文件在/root/Desktop/下屬於/,而/上掛載了設備 /dev/hda3
[root@crushlinux foremost-1.5.7]# mount
/dev/hda3 on / type ext3 (rw)
[root@crushlinux foremost-1.5.7]# foremost -t png -i /dev/hda3
恢復完成後會在你的當前所在目錄中創建一個 output 目錄,並在在 output 目錄下會創建 png 子目錄下會包括全部已經恢復回來的 png 格式的文件。
注意:恢復回來的文件,文件名已經改變,另外 output 目錄下有一個 audit.txt 文件是恢復成功文件的列表。
[root@crushlinux output]# pwd
/usr/src/foremost-1.5.7/output
[root@crushlinux output]# ls
audit.txt png
[root@crushlinux output]# cd png
[root@crushlinux png]# ls -l 38019080.png
-rw-r--r-- 1 root root 13024 05-06 14:39 38019080.pngui
本來叫 desktop.png 的文件恢復回來以後文件名改爲 38019080.png,須要本身找哦!!操作系統
恢復多種類型文件
[root@crushlinux abc]# ls
file.doc file.pdf
[root@crushlinux abc]# rm -f *
[root@crushlinux abc]# ls
[root@crushlinux abc]# foremost -v -t pdf,doc -i /dev/hda1 -o /tmp/recover.net
[root@crushlinux abc]# ls
file.doc file.pdf
[root@crushlinux abc]# rm -f *
[root@crushlinux abc]# ls
[root@crushlinux abc]# foremost -v -t pdf,doc -i /dev/hda1 -o /tmp/recover
foremost version 1.5.7 by Jesse Kornblum, Kris Kendall, and Nick Mikus.
foremost [-v|-V|-h|-T|-Q|-q|-a|-w-d] [-t <type>] [-s <blocks>] [-k <size>]
[-b <size>] [-c <file>] [-o <dir>] [-i <file]
-V - display copyright information and exit
顯示版權信息並退出
-t - specify file type. (-t jpeg,pdf ...)
指定的文件類型
-d - turn on indirect block detection (for UNIX file-systems)
打開間接塊檢測
-i - specify input file (default is stdin)
指定輸入文件
-a - Write all headers, perform no error detection (corrupted files)
寫出全部頭文件,檢測是否有錯誤
-w - Only write the audit file, do not write any detected files to the disk
只寫審計文件,不寫全部檢測到的文件到磁盤
-o - set output directory (defaults to output)
指定輸出目錄
-c - set configuration file to use (defaults to foremost.conf)
設置配置文件並使用
-q - enables quick mode. Search are performed on 512 byte boundaries.
可以使用快速模式,搜索是在512字節邊界進行。
-Q - enables quiet mode. Suppress output messages.
可以使用快速模式,抑制輸出消息。
-v - verbose mode. Logs all messages to screen
詳細模式,記錄全部消息到屏幕
切記:硬盤有價,數據無價!!