linux下使用extundelete恢復ext3/ext4分區數據

Windows平臺恢復誤刪數據so easy,可是linux就沒那麼簡單了,由於沒有「回收站」。BUT,若是有一天真的不當心誤刪了文件,那如何是好?那就藉助恢復神器extundelete了。node

如下均爲本人虛擬機上操做,經測試,文件系統ext3/ext4均適用。linux

1、安裝extundeleteweb

一、須要安裝依賴包,不然編譯不經過
apache

[root@reed /]#yum install e2fsprogs* -y

二、下載並安裝extundeletewindows

下載地址:https://sourceforge.net/projects/extundelete/files/latest/downloadtomcat

[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 install

三、配置臨時環境變量,若是永久則寫到profilebash

[root@reed /]#PATH=$PATH:/usr/local/extundelete/bin

四、驗證是否安裝成功服務器

[root@reed /]# extundelete -v
extundelete version 0.2.4
libext2fs version 1.41.12
Processor is little endian.

2、恢復已刪除數據ide

爲方便測試,新建了一個單獨的分區/dev/sdb1,掛載/reed測試

[root@reed /]#mount /dev/sdb1 /reed

一、建立測試文件

[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+found

二、刪除文件

[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+found

三、查看/reed的inode值

[root@reed reed]# ls -id /reed
2 /reed

四、卸載/reed分區

[root@reed reed]# cd ..
[root@reed /]# umount /reed

五、恢復已刪除數據

注:默認被刪文件會恢復到當前目錄下的RECOVERED_FILES目錄

5.1先查看已刪除文件

[root@reed /]# extundelete /dev/sdb1 --inode=2
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 8 groups loaded.
Group: 0
Contents of inode 2:
0000 | ed 41 00 00 00 10 00 00 ec 98 e8 56 e9 98 e8 56 | .A.........V...V
0010 | e9 98 e8 56 00 00 00 00 00 00 03 00 08 00 00 00 | ...V............
0020 | 00 00 00 00 00 00 00 00 41 02 00 00 00 00 00 00 | ........A.......
0030 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0050 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0080 | 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0090 | 6e 90 e8 56 00 00 00 00 00 00 00 00 00 00 00 00 | n..V............
00a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00b0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00d0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00f0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

Inode is Allocated
File mode: 16877
Low 16 bits of Owner Uid: 0
Size in bytes: 4096
Access time: 1458084076
Creation time: 1458084073
Modification time: 1458084073
Deletion Time: 0
Low 16 bits of Group Id: 0
Links count: 3
Blocks count: 8
File flags: 0
File version (for NFS): 0
File ACL: 0
Directory ACL: 0
Fragment address: 0
Direct blocks: 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Indirect block: 0
Double indirect block: 0
Triple indirect block: 0

File name                                       | Inode number | Deleted status
.                                                 2
..                                                2
lost+found                                        11
extundelete-0.2.4.tar.bz2                         12             Deleted
del.file                                          13             Deleted

標記爲」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.bz2

5.3大功告成。

固然還有不少其它參數,如能夠指定恢復某個時間點的文件。


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了。

相關文章
相關標籤/搜索