linux下使用extundelete恢复ext3/ext4分区数据
Windows平臺恢復誤刪數據so easy,但是linux就沒那么簡單了,因為沒有“回收站”。BUT,如果有一天真的不小心誤刪了文件,那如何是好?那就借助恢復神器extundelete了。
以下均為本人虛擬機上操作,經測試,文件系統ext3/ext4均適用。
一、安裝extundelete
1、需要安裝依賴包,否則編譯不通過
2、下載并安裝extundelete
下載地址:https://sourceforge.net/projects/extundelete/files/latest/download
[root@reed?/]#tar?-jxvf?extundelete-0.2.4.tar.bz2? [root@reed?/]#cd?extundelete-0.2.4 [root@reed?/]#./configure?--prefix=/usr/local/extundelete [root@reed?/]#make?&&?make?install3、配置臨時環境變量,如果永久則寫到profile
[root@reed?/]#PATH=$PATH:/usr/local/extundelete/bin4、驗證是否安裝成功
[root@reed?/]#?extundelete?-v extundelete?version?0.2.4 libext2fs?version?1.41.12 Processor?is?little?endian.二、恢復已刪除數據
為方便測試,新建了一個單獨的分區/dev/sdb1,掛載/reed
[root@reed?/]#mount?/dev/sdb1?/reed1、創建測試文件
[root@reed?/]#?cd?/reed/ [root@reed?reed]#?cp?~/extundelete-0.2.4.tar.bz2?. [root@reed?reed]#?echo?"reed">>del.file [root@reed?reed]#?ll total?132 -rw-r--r--?1?root?root??????5?Mar?16?07:20?del.file -rw-r--r--?1?root?root?108472?Mar?16?07:20?extundelete-0.2.4.tar.bz2 drwx------?2?root?root??16384?Mar?16?06:45?lost+found2、刪除文件
[root@reed?reed]#?rm?* rm:?remove?regular?file?`del.file'??y rm:?remove?regular?file?`extundelete-0.2.4.tar.bz2'??y rm:?cannot?remove?`lost+found':?Is?a?directory [root@reed?reed]#?ll total?16 drwx------?2?root?root?16384?Mar?16?06:45?lost+found3、查看/reed的inode值
[root@reed?reed]#?ls?-id?/reed 2?/reed4、卸載/reed分區
[root@reed?reed]#?cd?.. [root@reed?/]#?umount?/reed5、恢復已刪除數據
注:默認被刪文件會恢復到當前目錄下的RECOVERED_FILES目錄
5.1先查看已刪除文件
標記為”Deleted”的文件則是被刪除的文件
5.2恢復
[root@reed?/]#?extundelete?--restore-all?/dev/sdb1 NOTICE:?Extended?attributes?are?not?restored. Loading?filesystem?metadata?...?8?groups?loaded. Loading?journal?descriptors?...?23?descriptors?loaded. Searching?for?recoverable?inodes?in?directory?/?...? 2?recoverable?inodes?found. Looking?through?the?directory?structure?for?deleted?files?...? 0?recoverable?inodes?still?lost. [root@reed?/]#?ll?RECOVERED_FILES/ total?112 -rw-r--r--?1?root?root??????5?Mar?16?07:25?del.file -rw-r--r--?1?root?root?108472?Mar?16?07:25?extundelete-0.2.4.tar.bz25.3大功告成。
當然還有很多其它參數,如可以指定恢復某個時間點的文件。
三、延伸知識:linux系統rm刪除文件的原理
轉自:http://blog.csdn.net/grantlee1988/article/details/8057228
很多時候,我們都會發現,某個進程在對當前文件讀寫,但是我們依然能夠rm, 是不是很奇怪?而windows下面,肯定會報錯,”當前文件正在被使用“, 這就得從linux下面刪除文件的原理說起了。
Linux是通過link的數量來控制文件刪除的,只有當一個文件不存在任何link的時候,這個文件才會被刪除。一般來說,每個文件都有2個link計數器:i_count 和 i_nlink。
i_count的意義是當前文件使用者(或被調用)的數量,i_nlink 的意義是介質連接的數量(硬鏈接的數量);可以理解為i_count是內存引用計數器,i_nlink是磁盤的引用計數器。
當一個文件被某一個進程引用時,對應i_count數就會增加;當創建文件的硬鏈接的時候,對應i_nlink數就會增加。
對于刪除命令rm而言,實際就是減少磁盤引用計數i_nlink。這里就會有一個問題,如果一個文件正在被某個進程調用,而用戶卻執行rm操作把文件刪除了,那么會出現什么結果呢?當用戶執行rm操作刪除文件后,再執行ls或者其他文件管理命令,無法再找到這個文件了,但是調用這個刪除的文件的進程卻在繼續正常執行,依然能夠從文件中正確的讀取及寫入內容。這又是為什么呢?
這是因為rm操作只是將文件的i_nlink減少了,如果沒其它的鏈接i_nlink就為0了;但由于該文件依然被進程引用,因此,此時文件對應的i_count并不為0,所以即使執行rm操作,但系統并沒有真正刪除這個文件,當只有i_nlink及i_count都為0的時候,這個文件才會真正被刪除。也就是說,還需要解除該進程的對該文件的調用才行。
以上講的i_nlink及i_count是文件刪除的真實條件,但是當文件沒有被調用時,執行了rm操作刪除文件后是否還可以找回被刪的文件呢?
前面說了,rm操作只是將文件的i_nlink減少了,或者說置0了,實際就是將文件名到inode的鏈接刪除了,此時,并沒有刪除文件的實體即(block數據塊),此時,如果及時停止機器工作,數據是可以找回的,如果此時繼續寫入數據,那么當新數據就可能會被分配到被刪除的數據的block數據塊,此時,文件就會被真正的回收了
?
備注:根據以上原理,實際情況會出現以下問題,web服務器磁盤空間不夠了,刪除了所有無用日志還是先是磁盤空間不足,但是用du -sh /*發現磁盤空間占用的遠小于硬盤總大小,這就是因為只刪除了一個i_nlink,而還有其他進程在使用著這些log文件,apache或者tomcat,重啟再看就ok了。
轉載于:https://blog.51cto.com/luweikai/1751688
總結
以上是生活随笔為你收集整理的linux下使用extundelete恢复ext3/ext4分区数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装python的redis模块
- 下一篇: phpStorm如何用FTP,SSH连接