linux下恢復誤刪文件

 linux下文件實際上是一個指向inode的鏈接, inode鏈接包含了文件的所有屬性, 比如權限和所有者, 數據塊地址(文件存儲在磁盤的這些數據塊中). 當你刪除(rm)一個文件, 實際刪除了指向inode的鏈接, 並沒有刪除inode的內容. 進程可能還在使用. 只有當inode的所有鏈接完全移去, 然後這些數據塊將可以寫入新的數據.

 
proc文件系統可以協助我們恢復數據. 每一個系統上的進程在/proc都有一個目錄和自己的名字: 裏面包含了一個fd(文件描述符)子目錄(進程需要打開文件的所有鏈接). 如果從文件系統中刪除一個文件, 此處還有一個inode的引用: 
/proc/進程號/fd/文件描述符 
 
$ lsof | grep delete #查看進程裏面是否有被刪除文件的連接,如下形式:
[root@local ~]$ lsof | grep myfile
 
less 9104 root 4r REG 253,0 116549 492686 /home/root/myfile (deleted)
 
[root@local ~]$ ls -l /proc/9104/fd/4
lr-x—— 1 root root 64 Nov 20 13:00 /proc/9104/fd/4 -> /home/root/myfile (deleted)
[root@local ~]$ cp -a /proc/9104/fd/4 myfile.wrong
[root@local ~]$ ls -l myfile.wrong
lrwxrwxrwx 1 root root 29 Nov 20 13:02 myfile.wrong -> /home/root/myfile (deleted)
[root@local ~]$ file myfile.wrong
myfile.wrong: broken symbolic link to `/home/root/myfile (deleted)’
[root@local ~]$ file /proc/9104/fd/4
/proc/9104/fd/4: broken symbolic link to `/home/root/myfile (deleted)’
 
然後, 使用cp拷貝出數據(最好是在被刪除文件的目錄下進行以下操作):
 
[root@local ~]$ cp /proc/9104/fd/4 myfile.saved
 
最後, 確認一下文件:
 
[root@local ~]$ ls -l myfile.saved
-rw-rw-r– 1 root root 116549 Nov 20 13:03 myfile.saved
 

[root@local ~]$ cmp myfile.saved myfile.new #cmp比較無任何顯示, 表示兩個文件完全相同, 恢復成功 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章