[转]Extundelete--数据恢复软件
前言
作為一名運維人員,保證數據的安全是根本職責,所以在維護系統的時候,要慎之又慎,但是有時難免會出現數據被誤刪除的情況,在這個時候該如何快速、有效地恢復數據顯得至關重要,extundelete就是其中的一個選擇。
如何使用”rm -rf”命令
在Linux系統下,通過命令“rm -rf”可以將任何數據直接從硬盤刪除,并且沒有任何提示,同時Linux下也沒有與Windows下回收站類似的功能,也就意味著,數據在刪除后通過常規的手段是無法恢復的,因此使用這個命令要非常慎重。在使用rm命令的時候,比較穩妥的方法是把命令參數放到后面,這樣有一個提醒的作用。其實還有一個方法。那就是將要刪除的東西通過mv命令移動到系統下的/tmp目錄下,然后寫個腳本定期執行清除操作,這樣做就可以在一定程度上降低誤刪除數據的危險性。
其實保證數據安全最好的方法是做好備份,雖然備份不是萬能的,但是沒有備份是萬萬不行的。任何數據恢復工具都有一定局限性,都不能保證完整地恢復出所有數據,因此,把備份作為核心,把數據恢復工具作為輔助是運維人員必須堅持的一個準則。
extundelete與ext3grep的異同
在Linux下,基于開源的數據恢復工具有很多,常見的有debugfs、R-Linux、ext3grep、extundelete等,比較常用的有ext3grep和extundelete,這兩個工具的恢復原理基本一樣,只是extundelete功能更加強大。
extundelete是基于Linux的一個數據恢復工具,它通過分析文件系統的日志,解析出所有文件的inode信息,從而可以恢復Linux下主流的ext3、ext4文件系統下被誤刪除的文件。而ext3grep僅支持ext3文件系統的恢復。在恢復速度上,extundelete要快很多,因為extundelete的恢復機制是掃描inode和恢復數據同時進行,并且支持單個文件恢復、單個目錄恢復、inode恢復、block恢復、完整磁盤恢復等,而ext3grep就略顯笨拙了,它需要首先掃描完要恢復數據的所有inode信息,然后才能開始數據恢復,所以在恢復速度上相對較慢,并且在功能上也不支持目錄恢復、時間段恢復等。
extundelete的恢復原理
在利用extundelete恢復文件時并不依賴特定文件格式,首先extundelete會通過文件系統的inode信息(根目錄的inode一般為2)來獲得當前文件系統下所有文件的信息,包括存在的和已經刪除的文件,這些信息包括文件名和inode。然后利用inode信息結合日志去查詢該inode所在的block位置,包括直接塊、間接塊等信息。最后利用dd命令將這些信息備份出來,從而恢復數據文件。
安裝extundelete
下載地址:http://sourceforge.net/projects/extundelete/
安裝的先決條件
開發工具
# yum groupinstall "Development Tools" -y安裝依賴包e2fsprogs-devel
# yum install e2fsprogs-devel.x86_64 -y安裝extundelete
# tar jxf extundelete-0.2.4.tar.bz2 # cd extundelete-0.2.4 # ./configure # make # make install默認情況下,如果在./configure時未指定安裝路徑,會將extundelete裝在/usr/local/文件夾下
extundelete用法詳解
extundelete用法如下:
extundelete --help命令格式:
extundelete [option] [action] device-file其中,參數(options)有:
- –version,-[Vv],顯示軟件版本號
- –help,顯示軟件幫助信息
- –superblock,顯示超級塊信息
- –journal,顯示日志信息
- –after dtime,時間參數,表示在某段時間之后被刪的文件或目錄
- –before dtime,時間參數,表示在某段時間之前被刪的文件或目錄
動作(action)有:
- –inode ino,顯示節點“ino”的信息
- –block blk,顯示數據塊“blk”的信息
- –restore-inode ino[,ino,…],恢復命令參數,表示恢復節點“ino”的文件,恢復的文件會自動放在當前目錄下的RESTORED_FILES文件夾中,使用節點編號作為擴展名
- –restore-file ‘path’,恢復命令參數,表示將恢復指定路徑的文件,并把恢復的文件放在當前目錄下的RESTORED_FILES目錄中
- –restore-files ‘path’,恢復命令參數,表示將恢復在路徑中已列出的所有文件
- –restore-all,恢復命令參數,表示將嘗試恢復所有目錄和文件
- -j journal,表示從已經命名的文件中讀取擴展日志
- -b blocknumber,表示使用之前備份的超級塊來打開文件系統,一般用于查看現有超級塊是不是當前所要的文件
- -B blocksize,通過制定數據塊大小來打開文件系統,一般用于查看已經知道大小的文件
實戰:使用extundelete恢復數據
在數據被誤刪除后,第一時間要做的是卸載被刪除數據所在的磁盤或者磁盤分區,如果是系統根分區的數據遭到誤刪除,就需要將系統進入單用戶,并且將根分區以只讀模式掛載。這樣做的原因很簡單,因為將文件刪除后,僅僅是將文件的inode節點中的扇區指針清零,實際文件還存儲在磁盤上,如果磁盤以讀寫模式掛載,這些已刪除的文件的數據塊就可能被操作系統重新分配出去,在這些數據塊被新的數據覆蓋后,這些數據就真的丟失了,恢復工具也無力回天。所以,以只讀模式掛載磁盤可以盡量降低數據塊中數據被覆蓋的風險,以提高恢復數據成功的比率。
通過extundelete恢復單個文件
模擬數據誤刪除環境
# mkdir /data # mkfs.ext4 /dev/sdb1 # mount /dev/sdb1 /data/ # cp /etc/passwd /data/ # cp -r /etc/sysconfig/network-scripts /data/ # mkdir /data/test # echo "extundelete test" > /data/test/mytest.txt # ls /data/ lost+found network-scripts passwd test # md5sum passwd 499b16cbdef03e814f3405fccd188dcc passwd # md5sum test/mytest.txt eb42e4b3f953ce00e78e11bf50652a80 test/mytest.txt # rm -rf /data/*卸載磁盤分區
在將數據誤刪除后,立即需要做的就是卸載這塊磁盤分區:# umount /data/ ?
注:卸載磁盤分區時必須先退出磁盤分區所掛載的目錄,否則將出現類似如下報錯
umount: /data: device is busy.(In some cases useful info about processes that usethe device is found by lsof(8) or fuser(1))查詢可恢復的數據信息
通過extundelete命令可以查詢/dev/sdb1分區可恢復的數據信息:
# extundelete /dev/sdb1 --inode 2 ... File name | Inode number | Deleted status . 2 .. 2 lost+found 11 Deleted passwd 12 Deleted network-scripts 8193 Deleted test 8194 Deleted根據上面的輸出,標記為Deleted狀態的是已經刪除的文件或目錄。同時還可以看到每個已刪除的文件的inode值,接下來就可以恢復文件了。
恢復單個文件
# extundelete /dev/sdb1 --restore-file passwd NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 16 groups loaded. Loading journal descriptors ... 57 descriptors loaded. Successfully restored file passwd # cd RECOVERED_FILES/ # ls passwd # md5sum passwd 499b16cbdef03e814f3405fccd188dcc passwd注:“–restore-file”后面指定的是恢復文件路徑,這個路徑是文件的相對路徑。相對路徑是相對于原來文件的存儲路徑而言的,比如,原來文件的存儲路徑是/data/passwd,那么參數后面直接指定passwd文件即可,如果原來文件的存儲路徑是/data/test/mytest.txt,那么在參數后面通過“test/mytest.txt”指定即可
在文件恢復成功后,extundelete命令默認會在執行命令的當前目錄下創建一個RECOVERED_FILES目錄,此目錄用于存放恢復的文件,所以執行extundelete命令的當前目錄是可寫的。
恢復成功后,通過md5sum命令校驗,校驗碼與之前的完全一致,表明文件恢復成功。
通過extundelete恢復單個目錄
extundelete除了支持恢復單個文件,也支持恢復單個目錄,在需要恢復目錄時,通過“–restore-directory”選項即可恢復指定目錄的所有數據。
# extundelete /dev/sdb1 --restore-directory network-scripts NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 16 groups loaded. Loading journal descriptors ... 57 descriptors loaded. Searching for recoverable inodes in directory /network-scripts ... 33 recoverable inodes found. Looking through the directory structure for deleted files ... 5 recoverable inodes still lost. # cd RECOVERED_FILES/ # ls network-scripts可以看到之前刪除的目錄network-scripts已經成功恢復了,進入這個目錄檢查發現,所有文件內容和大小都正常。
通過extundelete恢復所有刪除數據
當需要恢復的數據較多時,一個個地指定文件或目錄將是一項非常繁重和耗時的工作,此時可以通過“restore-all”選項來恢復所有被刪除的文件或文件夾。
# extundelete /dev/sdb1 --restore-all NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 16 groups loaded. Loading journal descriptors ... 57 descriptors loaded. Searching for recoverable inodes in directory / ... 33 recoverable inodes found. Looking through the directory structure for deleted files ... 0 recoverable inodes still lost. # cd RECOVERED_FILES/ # ls network-scripts passwd test # md5sum passwd 499b16cbdef03e814f3405fccd188dcc passwd # md5sum test/mytest.txt eb42e4b3f953ce00e78e11bf50652a80 test/mytest.txt?
通過extundelete恢復某個時間段的數據
有時候刪除了大量的數據,其中很多數據都是么用的,我們僅需要恢復其中的一部分數據,此時,如果采用恢復全部數據的辦法,不但耗時,而且浪費資源,在這種情況下,就需要采用另外一種恢復機制有選擇地恢復,extundelete提供了“–after”和“–before”參數,可以通過指定某個時間段,進而只恢復這個時間段內的數據。
# date +%s 1449027652 # extundelete --after 1449020452 --restore-all /dev/sdb1 Only show and process deleted entries if they are deleted on or after 1449020452 and before 9223372036854775807. NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 16 groups loaded. Loading journal descriptors ... 57 descriptors loaded. Searching for recoverable inodes in directory / ... 33 recoverable inodes found. Looking through the directory structure for deleted files ... 0 recoverable inodes still lost. # cd RECOVERED_FILES/ # ls network-scripts passwd test # md5sum passwd 499b16cbdef03e814f3405fccd188dcc passwd # md5sum test/mytest.txt eb42e4b3f953ce00e78e11bf50652a80 test/mytest.txt在上面的例子中恢復的是兩個小時之內被刪除的文件。在這個操作過程中,需要注意的是“–after”參數后面跟的時間是個總秒數。起算時間是“1970-01-01 00:00:00 UTC”,通過”date +%s”命令即可將當前時間轉換為總秒數,因為恢復的是兩個小時之內的數據,所以“1449020452”這個值就是通過“1449027652”減去“60602=7200”獲得的。
- EOF
本文作者:Koen
參考書籍:《高性能Linux服務器構建實戰:系統安全、故障排查、自動化運維與集群架構》
?
原文:http://xautlmx.github.io/2015-12-03-Extundelete-%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D%E8%BD%AF%E4%BB%B6.html
轉載于:https://www.cnblogs.com/lurenjiashuo/p/extundelete-data-recovery.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的[转]Extundelete--数据恢复软件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis使用in语句作为查询条件
- 下一篇: Python多线程参考资料