ubuntu环境下数据误删除恢复--extundelete的恢复原理
1、 數(shù)據(jù)恢復(fù)軟件extundelete介紹
作為一名運(yùn)維人員,保證數(shù)據(jù)的安全是根本職責(zé),所以在維護(hù)系統(tǒng)的時(shí)候,要慎之又慎,但是有時(shí)難免會(huì)出現(xiàn)數(shù)據(jù)被誤刪除的情況,在這個(gè)時(shí)候該如何快速、有效地恢復(fù)數(shù)據(jù)呢?本節(jié)我們就來(lái)介紹一下Linux系統(tǒng)下常用的幾個(gè)數(shù)據(jù)恢復(fù)工具。
2、 如何使用“rm -rf”命令
在Linux系統(tǒng)下,通過(guò)命令“rm -rf”可以將任何數(shù)據(jù)直接從硬盤(pán)刪除,并且沒(méi)有任何提示,同時(shí)Linux下也沒(méi)有與Windows下回收站類(lèi)似的功能,也就意味著,數(shù)據(jù)在刪除后通過(guò)常 規(guī)的手段是無(wú)法恢復(fù)的,因此使用這個(gè)命令要非常慎重。在使用rm命令的時(shí)候,比較穩(wěn)妥的方法是把命令參數(shù)放到后面,這樣有一個(gè)提醒的作用。其實(shí)還有一個(gè)方 法,那就是將要?jiǎng)h除的東西通過(guò)mv命令移動(dòng)到系統(tǒng)下的/tmp目錄下,然后寫(xiě)個(gè)腳本定期執(zhí)行清除操作,這樣做可以在一定程度上降低誤刪除數(shù)據(jù)的危險(xiǎn)性。
其實(shí)保證數(shù)據(jù)安全最好的方法是做好備份,雖然備份不是萬(wàn)能的,但是沒(méi)有備份是萬(wàn)萬(wàn)不行的。任何數(shù)據(jù)恢復(fù)工具都有一定局限性,都不能保證完整地恢復(fù)出所有數(shù)據(jù),因此,把備份作為核心,把數(shù)據(jù)恢復(fù)工具作為輔助是運(yùn)維人員必須堅(jiān)持的一個(gè)準(zhǔn)則。
3、 extundelete與ext3grep的異同
在Linux下,基于開(kāi)源的數(shù)據(jù)恢復(fù)工具有很多,常見(jiàn)的有debugfs、R-Linux、ext3grep、extundelete等,比較常用 的有ext3grep和extundelete,這兩個(gè)工具的恢復(fù)原理基本一樣,只是extundelete功能更加強(qiáng)大,本節(jié)重點(diǎn)介紹 extundelete的使用方式。
extundelete是基于Linux的一個(gè)數(shù)據(jù)恢復(fù)工具,它通過(guò)分析文件系統(tǒng)的日志,解析出所有文件的inode信息,從而可以恢復(fù)Linux 下主流的ext3、ext4文件系統(tǒng)下被誤刪除的文件。而ext3grep僅支持ext3文件系統(tǒng)的恢復(fù)。在恢復(fù)速度上,extundelete要快很 多,因?yàn)閑xtundelete的恢復(fù)機(jī)制是掃描inode和恢復(fù)數(shù)據(jù)同時(shí)進(jìn)行,并且支持單個(gè)文件恢復(fù)、單個(gè)目錄恢復(fù)、inode恢復(fù)、block恢復(fù)、 完整磁盤(pán)恢復(fù)等,而ext3grep就略顯笨拙了,它需要首先掃描完要恢復(fù)數(shù)據(jù)的所有inode信息,然后才能開(kāi)始數(shù)據(jù)恢復(fù),所以在恢復(fù)速度上相對(duì)較慢, 并且在功能上也不支持目錄恢復(fù)、時(shí)間段恢復(fù)等。
4、 extundelete的恢復(fù)原理
在介紹使用extundelete進(jìn)行恢復(fù)數(shù)據(jù)之前,簡(jiǎn)單介紹下關(guān)于inode的知識(shí)。在Linux下可以通過(guò)“l(fā)s -id”命令來(lái)查看某個(gè)文件或者目錄的inode值,例如查看根目錄的inode值,可以輸入:
[root@cloud1~]#ls-id/
2/
由此可知,根目錄的inode值為2。
在利用extundelete恢復(fù)文件時(shí)并不依賴(lài)特定文件格式,首先extundelete會(huì)通過(guò)文件系統(tǒng)的inode信息(根目錄的inode一 般為2)來(lái)獲得當(dāng)前文件系統(tǒng)下所有文件的信息,包括存在的和已經(jīng)刪除的文件,這些信息包括文件名和inode。然后利用inode信息結(jié)合日志去查詢(xún)?cè)?inode所在的block位置,包括直接塊、間接塊等信息。最后利用dd命令將這些信息備份出來(lái),從而恢復(fù)數(shù)據(jù)文件。
5、 安裝extundelete
extundelete的官方網(wǎng)站是http://extundelete.sourceforge.net/ ,其目前的穩(wěn)定版本是extundelete-0.2.4。在安裝extundelete之前需要安裝e2fsprogs和e2fsprogs-libs兩個(gè)依賴(lài)包。
e2fsprogs和e2fsprogs-libs安裝非常簡(jiǎn)單,這里不做介紹。但是對(duì)ubuntu系統(tǒng)而言需要安裝的依賴(lài)包是
sudo apt-get install e2fslibs-dev
下面是extundelete的編譯安裝過(guò)程:
[root@cloud1app]#tarjxvfextundelete-0.2.4.tar.bz2
[root@cloud1app]#cdextundelete-0.2.4
[root@cloud1extundelete-0.2.4]#./configure
[root@cloud1extundelete-0.2.4]#make
[root@cloud1extundelete-0.2.4]#makeinstall
成功安裝extundelete后,會(huì)在系統(tǒng)中生成一個(gè)extundelete可執(zhí)行文件。extundelete的使用非常簡(jiǎn)單,可以通過(guò)“extundelete --help”獲得此軟件的使用方法。
6、 extundelete用法詳解
extundelete --help
安裝完成后,就可以執(zhí)行數(shù)據(jù)恢復(fù)操作了,本節(jié)詳細(xì)介紹extundelete每個(gè)參數(shù)的含義。extundelete用法如下:
extundelete[options][action]device-file
其中,參數(shù)(options)有:
--version, -[vV],顯示軟件版本號(hào)。
--help,顯示軟件幫助信息。
--superblock,顯示超級(jí)塊信息。
--journal,顯示日志信息。
--after dtime,時(shí)間參數(shù),表示在某段時(shí)間之后被刪的文件或目錄。
--before dtime,時(shí)間參數(shù),表示在某段時(shí)間之前被刪的文件或目錄。
動(dòng)作(action)有:
--inode ino,顯示節(jié)點(diǎn)“ino”的信息。
--block blk,顯示數(shù)據(jù)塊“blk”的信息。
--restore-inode ino[,ino,...],恢復(fù)命令參數(shù),表示恢復(fù)節(jié)點(diǎn)“ino”的文件,恢復(fù)的文件會(huì)自動(dòng)放在當(dāng)前目錄下的RESTORED_FILES文件夾中,使用節(jié)點(diǎn)編號(hào)作為擴(kuò)展名。
--restore-file 'path',恢復(fù)命令參數(shù),表示將恢復(fù)指定路徑的文件,并把恢復(fù)的文件放在當(dāng)前目錄下的RECOVERED_FILES目錄中。
--restore-files 'path',恢復(fù)命令參數(shù),表示將恢復(fù)在路徑中已列出的所有文件。
--restore-all,恢復(fù)命令參數(shù),表示將嘗試恢復(fù)所有目錄和文件。
-j journal,表示從已經(jīng)命名的文件中讀取擴(kuò)展日志。
-b blocknumber,表示使用之前備份的超級(jí)塊來(lái)打開(kāi)文件系統(tǒng),一般用于查看現(xiàn)有超級(jí)塊是不是當(dāng)前所要的文件。
-B blocksize,通過(guò)指定數(shù)據(jù)塊大小來(lái)打開(kāi)文件系統(tǒng),一般用于查看已經(jīng)知道大小的文件。
7、 實(shí)戰(zhàn):extundelete恢復(fù)數(shù)據(jù)的過(guò)程
在數(shù)據(jù)被誤刪除后,第一時(shí)間要做的是卸載被刪除數(shù)據(jù)所在的磁盤(pán)或磁盤(pán)分區(qū),如果是系統(tǒng)根分區(qū)的數(shù)據(jù)遭到誤刪除,就需要將系統(tǒng)進(jìn)入單用戶(hù),并且將根分 區(qū)以只讀模式掛載。這樣做的原因很簡(jiǎn)單,因?yàn)閷⑽募h除后,僅僅是將文件的inode結(jié)點(diǎn)中的扇區(qū)指針清零,實(shí)際文件還存儲(chǔ)在磁盤(pán)上,如果磁盤(pán)以讀寫(xiě)模式 掛載,這些已刪除的文件的數(shù)據(jù)塊就可能被操作系統(tǒng)重新分配出去,在這些數(shù)據(jù)塊被新的數(shù)據(jù)覆蓋后,這些數(shù)據(jù)就真的丟失了,恢復(fù)工具也無(wú)力回天。所以,以只讀 模式掛載磁盤(pán)可以盡量降低數(shù)據(jù)塊中數(shù)據(jù)被覆蓋的風(fēng)險(xiǎn),以提高恢復(fù)數(shù)據(jù)成功的比率。
8、通過(guò)extundelete恢復(fù)單個(gè)文件
8.1. 模擬數(shù)據(jù)誤刪除環(huán)境
在演示通過(guò)extundelete恢復(fù)數(shù)據(jù)之前,我們首先要模擬一個(gè)數(shù)據(jù)誤刪除環(huán)境,這里我們以ext3文件系統(tǒng)為例,在ext4文件系統(tǒng)下的恢復(fù)方式與此完全一樣。簡(jiǎn)單的模擬操作過(guò)程如下:
[root@cloud1 ~]# mkdir /data
[root@cloud1 ~]# mkfs.ext3 /dev/sdc1
[root@cloud1 mount /dev/sdc1 /data
[root@cloud1 ~]# cp /etc/passwd /data
[root@cloud1 ~]# cp -r /app/ganglia-3.4.0 /data
[root@cloud1 ~]# mkdir /data/test
[root@cloud1 ~]# echo "extundelete test" > /data/test/mytest.txt
[root@cloud1 ~]# cd /data
[root@cloud1 data]# md5sum passwd
0715baf8f17a6c51be63b1c5c0fbe8c5 passwd
[root@cloud1 data]# md5sum test/mytest.txt
eb42e4b3f953ce00e78e11bf50652a80 test/mytest.txt
[root@cloud1 data]# rm -rf /data/*
8.2. 卸載磁盤(pán)分區(qū)
在將數(shù)據(jù)誤刪除后,立刻需要做的就是卸載這塊磁盤(pán)分區(qū):
[root@cloud1 data]# cd /mnt
[root@cloud1 mnt]# umount /data
8.3. 查詢(xún)可恢復(fù)的數(shù)據(jù)信息
通過(guò)extundelete命令可以查詢(xún)/dev/sdc1分區(qū)可恢復(fù)的數(shù)據(jù)信息:
[root@cloud1 /]# extundelete /dev/sdc1 --inode 2
......
File name | Inode number | Deleted status
. 2
.. 2
lost+found 11 Deleted
passwd 49153 Deleted
test 425985 Deleted
ganglia-3.4.0 245761 Deleted
根據(jù)上面的輸出,標(biāo)記為Deleted狀態(tài)的是已經(jīng)刪除的文件或目錄。同時(shí)還可以看到每個(gè)已刪除文件的inode值,接下來(lái)就可以恢復(fù)文件了。
8.4. 恢復(fù)單個(gè)文件
執(zhí)行如下命令開(kāi)始恢復(fù)文件:
[root@cloud1 /]# extundelete /dev/sdc1 --restore-file passwd
Loading filesystem metadata ... 40 groups loaded.
Loading journal descriptors ... 54 descriptors loaded.
Successfully restored file passwd
[root@cloud1 /]# cd RECOVERED_FILES/
[root@cloud1 RECOVERED_FILES]# ls
passwd
[root@cloud1 RECOVERED_FILES]# md5sum passwd
0715baf8f17a6c51be63b1c5c0fbe8c5 passwd
extundelete恢復(fù)單個(gè)文件的參數(shù)是“--restore-file”,這里需要注意的是,“--restore-file”后面指定的是 恢復(fù)文件路徑,這個(gè)路徑是文件的相對(duì)路徑。相對(duì)路徑是相對(duì)于原來(lái)文件的存儲(chǔ)路徑而言的,比如,原來(lái)文件的存儲(chǔ)路徑是/data/passwd,那么在參數(shù) 后面直接指定passwd文件即可,如果原來(lái)文件的存儲(chǔ)路徑是/data/test/mytest.txt,那么在參數(shù)后面通過(guò)“test /mytest.txt”指定即可。
在文件恢復(fù)成功后,extundelete命令默認(rèn)會(huì)在執(zhí)行命令的當(dāng)前目錄下創(chuàng)建一個(gè)RECOVERED_FILES目錄,此目錄用于存放恢復(fù)的文件,所以執(zhí)行extundelete命令的當(dāng)前目錄必須是可寫(xiě)的。
根據(jù)上面的輸出,通過(guò)md5sum命令校驗(yàn),校驗(yàn)碼與之前的完全一致,表明文件恢復(fù)成功。
9、 通過(guò)extundelete恢復(fù)單個(gè)目錄
extundelete除了支持恢復(fù)單個(gè)文件,也支持恢復(fù)單個(gè)目錄,在需要恢復(fù)目錄時(shí),通過(guò)“--restore-directory”選項(xiàng)即可恢復(fù)指定目錄的所有數(shù)據(jù)。
繼續(xù)在上面模擬的誤刪除數(shù)據(jù)環(huán)境下操作,現(xiàn)在要恢復(fù)/data目錄下的ganglia-3.4.0文件夾,操作如下:
[root@cloud1 mnt]# extundelete /dev/sdc1 --restore-directory /ganglia-3.4.0
Loading filesystem metadata ... 40 groups loaded.
Loading journal descriptors ... 247 descriptors loaded.
Searching for recoverable inodes in directory /ganglia-3.4.0 ...
781 recoverable inodes found.
Looking through the directory structure for deleted files ...
4 recoverable inodes still lost.
[root@cloud1 mnt]# ls
RECOVERED_FILES
[root@cloud1 mnt]# cd RECOVERED_FILES/
[root@cloud1 RECOVERED_FILES]# ls
ganglia-3.4.0
可以看到之前刪除的目錄ganglia-3.4.0已經(jīng)成功恢復(fù)了,進(jìn)入這個(gè)目錄檢查發(fā)現(xiàn):所有文件內(nèi)容和大小都正常。
轉(zhuǎn)載參考:http://book.51cto.com/art/201409/452478.htm
總結(jié)
以上是生活随笔為你收集整理的ubuntu环境下数据误删除恢复--extundelete的恢复原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 优秀的程序员VS糟糕的程序员
- 下一篇: 计算机系统基础 数据的表示和存储