先介紹一些文件的基本概念, 文件實際上是一個指向inode的鏈接, inode鏈接包含了文件的所有屬性, 比如權限和所有者, 數據塊地址(文件存儲在磁盤的這些數據塊中). 當你刪除(rm)一個文件, 實際刪除了指向inode的鏈接, 並沒有刪除inode的內容. 進程可能還在使用. 只有當inode的所有鏈接完全移去, 然後這些數據塊將可以寫入新的數據.
proc文件系統可以協助我們恢復數據. 每一個系統上的進程在/proc都有一個目錄和自己的名字: 裡面包含了一個fd(文件描述符)子目錄(進程需要打開文件的所有鏈接). 如果從文件系統中刪除一個文件, 此處還有一個inode的引用:
/proc/進程號/fd/文件描述符
接下來, 你需要知道打開文件的進程號(pid)和文件描述符(fd). 這些都可以通過lsof工具方便獲得, lsof的意思是”list open files, 列出(進程)打開的文件”. 然後你將可以從/proc拷貝出需要恢復的數據.
下面介紹在Fedora Core 5系統上使用lsof恢復誤刪的文件:
環境
主機: 使用微睦獨立主機, 一台基於vmware的虛擬獨立主機.
系統: Fedora Core 5
內核: 2.6.16-1.2122_FC5
lsof版本:
[zhaoke@fedora5 ~]$ /usr/sbin/lsof -v
lsof version information:
revision: 4.77
預備工作:
如果你的系統沒有安裝lsof, 可以從作者網站或pbone獲得.
作者網站: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
Pbone: http://rpm.pbone.net/
恢復過程:
首先, 我們需要創建一個文本文件, 刪除然後恢復:
[zhaoke@fedora5 ~]$ man lsof | col -b > myfile
然後看一下文件內容:
[zhaoke@fedora5 ~]$ less myfile