extundelete工具恢復rm -rf 刪除的目錄(ext4、ext3)
extundelete工具恢復rm -rf 刪除的目錄(ext4)
ext3grep工具只能用於恢復ext3檔案系統下刪除的檔案,對於ext4檔案系統,可以使用extundelete工具。使用的方法類似ext3grep。 ext3grep 僅對 ext3 檔案系統有效, extundelete 對 ext3 與 ext4 檔案系統都有效
# extundelete /dev/sdb1 --inode 2
# extundelete /dev/sdb1 --restore-inode 57146
[root@rhel6lhr extundelete-0.2.4]# df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 ext4 48G 16G 31G 34% / tmpfs tmpfs 2.0G 80K 2.0G 1% /dev/shm /dev/sda1 ext4 283M 58M 210M 22% /boot /dev/mapper/vg_orasoft-lv_orasoft_u01 ext4 49G 36G 11G 78% /u01 /dev/mapper/vg_orasoft-lv_orasoft_u02 ext4 7.3G 4.8G 2.2G 69% /u02 /dev/mapper/vg_orasoft-lv_orasoft_u03 ext4 6.8G 4.2G 2.4G 65% /u03 /dev/mapper/vg_oradata-lv_oradata_u04 ext4 40G 20G 18G 52% /u04 /dev/mapper/vg_oradata-lv_oradata_u05 ext4 40G 25G 14G 65% /u05 /dev/mapper/vg_orasoft-lv_orasoft_mysql ext4 976M 323M 603M 35% /var/lib/mysql /dev/mapper/vg_orasoft-lv_orasoft_u06 ext4 11G 5.5G 4.7G 54% /u06 /dev/mapper/vg_orasoft-lv_orasoft_u07 ext4 14G 8.2G 4.8G 64% /u07 /dev/mapper/vg_mysqlsoft-lv_mysqlsoft_55 ext4 2.9G 817M 2.0G 30% /usr/local/mysql55 /dev/mapper/vg_mysqlsoft-lv_mysqlsoft_56 ext4 2.9G 1.4G 1.4G 50% /usr/local/mysql56 /dev/mapper/vg_mysqlsoft-lv_mysqlsoft_57 ext4 4.8G 3.3G 1.3G 72% /usr/local/mysql57 /dev/mapper/vg_mysqlsoft-lv_mysqlsoft_80 ext4 5.8G 2.7G 2.9G 49% /usr/local/mysql80 /dev/sr0 iso9660 3.6G 3.6G 0 100% /media/lhr/cdrom
軟體下載: http://sourceforge.net/projects/extundelete/
作為一名運維人員,保證資料的安全是根本職責,所以在維護系統的時候,要慎之又慎,但是有時難免會出現資料被誤刪除的情況,在這個時候改如何快速、有效地恢復資料呢?本文我們就來介紹一下Linux系統下常用的幾個資料恢復工具。
https://blog.51cto.com/ixdba/1566856
一、 如何使用“rm -rf”命令
在Linux系統下,通過命令“rm -rf”可以將任何資料直接從硬碟刪除,並且沒有任何提示,同時Linux下也沒有與Windows下回收站類似的功能,也就意味著,資料在刪除後通過常規的手段是無法恢復的,因此使用這個命令要非常慎重。在使用rm命令的時候,比較穩妥的方法是把命令引數放到後面,這樣有一個提醒的作用。其實還有一個方法,那就是將要刪除的東西通過mv命令移動到系統下的/tmp目錄下,然後寫個指令碼定期執行清除操作,這樣做可以在一定程度上降低誤刪除資料的危險性。
其實保證資料安全最好的方法是做好備份,雖然備份不是萬能的,但是沒有備份是萬萬不行的。任何資料恢復工具都有一定侷限性,都不能保證完整地恢復出所有資料,因此,把備份作為核心,把資料恢復工具作為輔助是運維人員必須堅持的一個準則。
二、 extundelete與ext3grep的異同
在Linux下,基於開源的資料恢復工具有很多,常見的有debugfs、R-Linux、ext3grep、extundelete等,比較常用的有ext3grep和extundelete,這兩個工具的恢復原理基本一樣,只是extundelete功能更加強大,本文重點介紹extundelete的使用。
三、 extundelete的恢復原理
在介紹使用extundelete進行恢復資料之前,簡單介紹下關於inode的知識。在Linux下可以通過“ls –id”命令來檢視某個檔案或者目錄的inode值,例如檢視根目錄的inode值,可以輸入:
由此可知,根目錄的inode值為2。
在利用extundelete恢復檔案時並不依賴特定檔案格式,首先extundelete會通過檔案系統的inode資訊(根目錄的inode一般為2)來獲得當前檔案系統下所有檔案的資訊,包括存在的和已經刪除的檔案,這些資訊包括檔名和inode。然後利用inode資訊結合日誌去查詢該inode所在的block位置,包括直接塊,間接塊等資訊。最後利用dd命令將這些資訊備份出來,從而恢復資料檔案。
四、 安裝extundelete
extundelete的官方網站是http://extundelete.sourceforge.net/ ,其目前的穩定版本是extundelete-0.2.4。,在安裝extundelete之前需要安裝e2fsprogs和e2fsprogs-libs兩個依賴包。
e2fsprogs和e2fsprogs-libs安裝非常簡單,這裡不做介紹。下面是extundelete的編譯安裝過程:
成功安裝extundelete後,會在系統中生成一個extundelete可執行檔案。extundelete的使用非常簡單,讀者可以通過“extundelete --help”獲得此軟體的使用方法。
五、 extundelete用法詳解
extundelete安裝完成後,就可以執行資料恢復操作了,本節詳細介紹下extundelete每個引數的含義。extundelete用法如下:
extundelete --help
命令格式:
其中引數(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',恢復命令引數,表示將恢復指定路徑的檔案,並把恢復的檔案放在當前目錄下的RECOVERED_FILES目錄中。
--restore-files 'path' ,恢復命令引數,表示將恢復在路徑中已列出的所有檔案。
--restore-all,恢復命令引數,表示將嘗試恢復所有目錄和檔案。
-j journal,表示從已經命名的檔案中讀取擴充套件日誌。
-b blocknumber,表示使用之前備份的超級塊來開啟檔案系統,一般用於檢視現有超級塊是不是當前所要的檔案。
-B blocksize,表示使用資料塊大小來開啟檔案系統,一般用於檢視已經知道大小的檔案。
六、 實戰:extundelete恢復資料的過程
在資料被誤刪除後,第一時間要做的是解除安裝被刪除資料所在的磁碟或磁碟分割槽,如果是系統根分割槽的資料遭到誤刪除,就需要將系統進入單使用者,並且將根分割槽以只讀模式掛載。這樣做的原因很簡單,因為將檔案刪除後,僅僅是將檔案的inode結點中的扇區指標清零,實際檔案還儲存在磁碟上,如果磁碟以讀寫模式掛載,這些已刪除的檔案的資料塊就可能被作業系統重新分配出去,在這些資料塊被新的資料覆蓋後,這些資料就真的丟失了,恢復工具也回力無天。所以,以只讀模式掛載磁碟可以儘量降低資料塊中資料被覆蓋的風險,以提高恢復資料成功的比率。
6.1 通過extundelete恢復單個檔案
1. 模擬資料誤刪除環境
在演示通過extundelete恢復資料之前,我們首先要模擬一個資料誤刪除環境,這裡我們以ext3檔案系統為例,在ext4檔案系統下的恢復方式與此完全一樣。簡單的模擬操作過程如下:
2. 解除安裝磁碟分割槽
在將資料誤刪除後,立刻需要做的就是解除安裝這塊磁碟分割槽:
3. 查詢可恢復的資料資訊
通過extundelete命令可以查詢/dev/sdc1分割槽可恢復的資料資訊:
根據上面的輸出,標記為Deleted狀態的是已經刪除的檔案或目錄。同時還可以看到每個已刪除檔案的inode值,接下來就可以恢復檔案了。
4. 恢復單個檔案
執行如下命令開始恢復檔案:
extundelete恢復單個檔案的引數是“--restore-file”,這裡需要注意的是,“--restore-file”後面指定的是恢復檔案路徑,這個路徑是檔案的相對路徑。相對路徑是相對於原來檔案的儲存路徑而言的,比如,原來檔案的儲存路徑是/data/passwd,那麼在引數後面直接指定passwd檔案即可,如果原來檔案的儲存路徑是/data/test/mytest.txt,那麼在引數後面通過“test/mytest.txt”指定即可。
在檔案恢復成功後,extundelete命令預設會在執行命令的當前目錄下建立一個RECOVERED_FILES目錄,此目錄用於存放恢復出來的檔案,所以執行extundelete命令的當前目錄必須是可寫的。
根據上面的輸出,通過md5sum命令校驗,校驗碼與之前的完全一致,表明檔案恢復成功。
6.2 通過extundelete恢復單個目錄
extundelete除了支援恢復單個檔案,也支援恢復單個目錄,在需要恢復目錄時,通過 “--restore-directory”選項即可恢復指定目錄的所有資料。
繼續在上面模擬的誤刪除資料環境下操作,現在要恢復/data目錄下的ganglia-3.4.0資料夾,操作如下:
可以看到之前刪除的目錄ganglia-3.4.0已經成功恢復了,進入這個目錄檢查發現:所有檔案內容和大小都正常。
6.3 通過extundelete恢復所有誤刪除資料
當需要恢復的資料較多時,一個個地指定檔案或目錄將是一個非常繁重和耗時的工作,不過,extundelete考慮到了這點,此時可以通過“--restore-all”選項來恢復所有被刪除的檔案或資料夾。
仍然在上面模擬的誤刪除資料環境下操作,現在要恢復/data目錄下所有資料,操作過程如下:
可以看到所有資料全部完整地恢復了。
6.4 通過extundelete恢復某個時間段的資料
有時候刪除了大量的資料量,其中很多資料都是沒用的,我們僅需要恢復其中的一部分資料,此時,如果採用恢復全部資料的辦法,不但耗時,而且浪費資源,在這種情況下,就需要採用另外的一種恢復機制有選擇地恢復,extundelete提供了“—after”“和”--before“引數,可以通過指定某個時間段,進而只恢復這個時間段內的資料。
下面通過一個簡單示例,描述下如何恢復某個時間段內的資料。
我們首先假定在/data目錄下有個剛剛建立的壓縮檔案ganglia-3.4.0.tar.gz,然後刪除此檔案,接著解除安裝/data分割槽,開始恢復一小時內的檔案,操作如下:
可以看到,剛才刪除的檔案,已經成功恢復,而在/data目錄下還有很多被刪除的檔案卻沒有恢復,這就是”--after“引數控制的結果,因為/data目錄下其他檔案都是在一天之前刪除的,而我們恢復的是一個小時之內被刪除的檔案,這就是沒有恢復其他被刪除檔案的原因。
在這個操作過程中,需要注意是“--after”引數後面跟的時間是個總秒數。起算時間為“1970-01-01 00:00:00 UTC”,通過“date +%s”命令即可將當前時間轉換為總秒數,因為恢復的是一個小時之內的資料,所以“1379146740”這個值就是通過“1379150340”減去“60*60=3600”獲得的。
1.在安裝extundelete包./configure時遇到configure: error: C++ compiler cannot create executables問題
[root@localhost extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
configure: error: in `/root/Desktop/extundelete-0.2.4':
configure: error: C++ compiler cannot create executables
See `config.log' for more details
經過查詢知道需要安裝gcc-c++包
安裝gcc-c++
[root@localhost Packages]# rpm -ivh gcc-c++-4.4.7-3.el6.i686.rpm
warning: gcc-c++-4.4.7-3.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
error: Failed dependencies:
libstdc++-devel = 4.4.7-3.el6 is needed by gcc-c++-4.4.7-3.el6.i686
有依賴關係先裝
libstdc++-devel-4.4.7-3.el6.i686.rpm
[root@localhost Packages]# rpm -ivh libstdc++-devel-4.4.7-3.el6.i686.rpm
warning: libstdc++-devel-4.4.7-3.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:libstdc++-devel ########################################### [100%]
再安裝
gcc-c++-4.4.7-3.el6.i686.rpm
[root@localhost Packages]# rpm -ivh gcc-c++-4.4.7-3.el6.i686.rpm
warning: gcc-c++-4.4.7-3.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:gcc-c++ ########################################### [100%]
[root@localhost Packages]# rpm -qa | grep gcc-c++
gcc-c++-4.4.7-3.el6.i686
2.重新./configure顯示
[root@localhost extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
configure: error: Can't find ext2fs library
經過查詢知道缺少
e2fsprogs-devel,下面開始安裝
[root@localhost Packages]# rpm -ivh e2fsprogs-devel-1.41.12-14.el6.i686.rpm
warning: e2fsprogs-devel-1.41.12-14.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
error: Failed dependencies:
libcom_err-devel
= 1.41.12-14.el6 is needed by e2fsprogs-devel-1.41.12-14.el6.i686
pkgconfig(com_err) is needed by e2fsprogs-devel-1.41.12-14.el6.i686
有依賴的包,所以先安裝依賴包
[root@localhost Packages]# ll | grep libcom_err-devel
-r--r--r-- 49 root root 31984 12月 19 2012 libcom_err-devel-1.41.12-14.el6.i686.rpm
[root@localhost Packages]# rpm -ivh libcom_err-devel-1.41.12-14.el6.i686.rpm
warning: libcom_err-devel-1.41.12-14.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:libcom_err-devel ########################################### [100%]
解決了依賴關係,在安裝
e2fsprogs-devel
[root@localhost Packages]# rpm -ivh e2fsprogs-devel-1.41.12-14.el6.i686.rpm
warning: e2fsprogs-devel-1.41.12-14.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:e2fsprogs-devel ########################################### [100%]
3。再./configure出現,表示成功了;
[root@localhost extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
Writing generated files to disk
4.進行make & make install
[root@localhost extundelete-0.2.4]# make
make -s all-recursive
Making all in src
extundelete.cc:571: 警告:未使用的引數‘flags’
[root@localhost extundelete-0.2.4]# make install
Making install in src
/usr/bin/install -c extundelete '/usr/local/bin'
https://www.cnblogs.com/patf/p/3368765.html
首先。Linux下很多人都喜歡用rm -rf去刪除目錄。但是rm --help提示這是一個非常危險的命令、謹慎用之。
這裡公司一臺伺服器。同事在操作的過程中誤刪掉一個目錄。而且是非常重要的。
嘗試恢復cat /etc/redhat-release 檢視為rhel4版本。很老了這就有一個問題出現yum無法用。
先用一個ext3grep 工具恢復。但是該工具--help 提示沒有針對目錄恢復的引數 只有一個all 我嘗試用時間戳恢復當時時間段的資料效果不理想、
而且跟要命的是當我檢視分割槽的時候df -aT發現這個刪除的目錄進入奇蹟般的劃分在了與/一個分割槽。0 0這意味著我掛載為只讀分割槽時要殺掉一
切與/根分割槽有關的程式;所有反覆思索後決定一個好的辦法:
USB行動硬碟安裝一個便攜Linux系統,並在其上面安裝extundelete工具因為這個工具需要幾個包的支援。而rhel4的系統現在yum已經無法使用
安裝支援包都很困難。索性放棄。
關於USB行動硬碟系統。與我們用的stat 硬碟安裝系統一樣。可以用光碟映象安裝選擇USB裝置為安裝裝置。或者用虛擬機器安裝都可以。這裡我就
不多說推薦虛擬機器 Virtual Box和 VMware(優點是你有映象但無法刻盤)。
好了進入centOS6.4後
下載extundelete:wget http://pkgs.fedoraproject.org/repo/pkgs/extundelete/extundelete-0.2.4.tar.bz2/77e626ad31433680c0a222069295d2ca/extundelete-0.2.4.tar.bz2
1 [root@vbok src]# wget http://pkgs.fedoraproject.org/repo/pkgs/extundelete/extundelete-0.2.4.tar.bz2/77e626ad31433680c0a222069295d2ca/extundelete-0.2.4.tar.bz2
1 [root@vbok src]# tar jxvf extundelete-0.2.4.tar.bz2
直接./configure make make install 但我執行./configure時報錯:
1 [root@vbok src]# cd extundelete-0.2.42 [root@vbok extundelete-0.2.4]# ./configure 3 Configuring extundelete 0.2.44 configure: error: Can't find ext2fs library
提示 ext2fs library 少幾個包的支援
1 [root@vbok extundelete-0.2.4]# yum -y install ext2fs
OK 在執行make三部曲
[root@vbok extundelete-0.2.4]# ./configure Configuring extundelete 0.2.4Writing generated files to disk
當然如果你make完後就可以使用這個工具的
1 [root@vbok extundelete-0.2.4]# make2 make -s all-recursive3 Making all in src4 extundelete.cc:571: 警告:未使用的引數‘flags’
直接在~/src/extundelete --help
[root@vbok extundelete-0.2.4]# src/extundelete --help
或者在執行 make install 這時會安裝到/usr/local/bin/extundelete 下
我還是推薦make完就成了。因為假如你要恢復的目錄正好是/usr 那你就還需要在./configure下加引數。浪費時間效果一樣
OK來演示下恢復吧
1 [root@vbok /]# df -h 2 檔案系統 容量 已用 可用 已用%% 掛載點 3 /dev/mapper/vg_vbok-gen 4 25G 541M 23G 3% / 5 tmpfs 943M 232K 943M 1% /dev/shm 6 /dev/sdb1 485M 36M 424M 8% /boot 7 /dev/mapper/vg_vbok-home 8 20G 172M 19G 1% /home 9 /dev/mapper/vg_vbok-opt10 11G 156M 9.9G 2% /opt11 /dev/mapper/vg_vbok-usr12 39G 3.2G 34G 9% /usr13 /dev/sdb3 51G 16K 51G 1% /vfat
我在/opt下建立了個目錄 “1“ 下面有多個子目錄和檔案。然後我將其刪除。
(看看現在的時間)並回到extundelete 安裝目錄下將opt目錄掛載為只讀為了保護資料防止重寫。
1 root@vbok /]# cd opt/ 2 [root@vbok opt]# ls 3 1 lost+found rh 4 [root@vbok opt]# date 5 2013年 10月 14日 星期一 16:44:55 CST 6 [root@vbok opt]# rm -rf 1 7 [root@vbok opt]# ls 8 lost+found rh 9 [root@vbok opt]# cd /usr/local/src/extundelete-0.2.410 [root@vbok extundelete-0.2.4]# mount -o remount,ro /dev/mapper/vg_vbok-opt
這裡說下我要用到的引數 src/extundelete --help
1 --restore-directory 'path'2 Will restore directory 'path'. 'path' is relative to the3 --restore-all Attempts to restore everything.4 --after dtime Only process entries deleted on or after 'dtime'.5 --before dtime Only process entries deleted before 'dtime'.
第一個是 恢復目錄 path為路徑後面跟要恢復那個目錄的路徑
第二個是 恢復所有
第三個是 恢復dtime這個時間戳以後刪除的檔案
第四個是恢復這個時間戳以前刪除的檔案 (這裡說下,卡時間恢復是非常好用的引數。你可以指定恢復那個時間到那個時間之間的資料)
基本這幾個選項就夠恢復了,當然還有--restore-files 引數來恢復單個檔案。
OK開始
我上面在刪除的時間date了下系統時間所以我就來生成下 刪除前和刪除後的時間戳用來定位我要恢復的目錄,然後利用工具恢復刪除的目錄
[root@vbok extundelete-0.2.4]# date -d "2013-10-14 16:43" +%s1381740180[root@vbok extundelete-0.2.4]# date -d "2013-10-14 16:58" +%s 1381741080[root@vbok extundelete-0.2.4]# src/extundelete /dev/mapper/vg_vbok-opt --after /1381740180 --before 1381741080 --restore-directory 1
OK恢復完成,這裡要注意的是在用恢復目錄選項的時候,後面接的目錄是以opt後的目錄。也就是說 /dev/mapper/vg-vbox-opt 已經代表了/opt這個目錄我們只需要接著寫 opt後面的目錄 例如要恢復/opt/1/2/3 這個目錄 我們後面的路徑為 1/2/3 就可以恢復3這個目錄了 當然有時間戳指定時間段後就可以用--restore-all恢復這個時間段刪除的所有資料了。OK
1 NOTICE: Extended attributes are not restored. 2 Loading filesystem metadata ... 86 groups loaded. 3 Loading journal descriptors ... 91 descriptors loaded. 4 Searching for recoverable inodes in directory 1 ... 5 9 recoverable inodes found. 6 Looking through the directory structure for deleted files ... 7 1 recoverable inodes still lost. 8 [root@vbok extundelete-0.2.4]# cd RECOVERED_FILES/ 9 [root@vbok RECOVERED_FILES]# LS10 -bash: LS: command not found11 [root@vbok RECOVERED_FILES]# ls12 113 [root@vbok RECOVERED_FILES]# cd 114 [root@vbok 1]# ls15 11 2216 [root@vbok 1]# cd 11/17 [root@vbok 11]# ls18 2 a19 [root@vbok 11]# cd ../22/c 20 -bash: cd: ../22/c: 不是目錄21 [root@vbok 11]# cd ../22/c
資料 完好無損。
在講/opt這個分割槽掛載回讀寫的,不會的可以reboot重啟下也可以
一、 將磁碟分割槽掛載為只讀
這一步很重要,並且 在誤刪除檔案後應儘快將磁碟掛載為只讀。越早進行,恢復的成功機率就越大。
1. 檢視被刪除檔案位於哪個分割槽
[root
@localhost
~]
#
mount
/dev
/mapper
/VolGroup
-lv_root on
/ type ext4(rw)
/dev
/mapper
/VolGroup
-lv_home on
/home type ext4(rw)
2. 嘗試將對應目錄重新掛載為只讀
[root
@localhost
~]
#
mount -r -n -o remount /home
mount
:
/home is busy
3. 如果顯示 xxx is busy
[root
@localhost
~ ]
#
fuser -v -m /data
找出相關程式,kill.
4. 成功將目錄掛載為只讀
[root
@localhost
~ ]
#
mount -r -n -o remount /home
此時在/home目錄 touch 檔案時,會報錯:
[root
@localhost
~ ]
#
touch txt
touch
: cannot touch
`txt’
: Read
-only file system
二、 使用資料恢復工具 extundelete
之前嘗試了debugfs + dd,未果。
後來安裝 extundelete-0.2.4 ,:
1. 下載
(1) 因為sourceforge被牆,伺服器上直接wget不成功,所以只能在本地翻 牆下載,連結如下:
(2) 把下載的檔案放到伺服器
啟動本地的nginx,然後在伺服器上wget(當然通過其它方法也可以,只要能傳到伺服器):
wget http
://本機IP
/extundelete
-0.
2.
4.tar.bz2
(3) 解壓
tar jxf extundelete
-
0 .
2 .
4 .tar.bz2
2. 編譯
(1) configure
[root
@localhost extundelete
-0.
2.
4]
#
./configure
configure時報錯,看了下config.log,確定是本機沒編譯環境 。
yum -y install gcc+ gcc-c++
等待,有一點慢。
安裝完成後,再次config,依然報錯
Configuring extundelete
0.
2.
4
configure
: error
: Can’t find ext2fs library
這是因為extundelete依賴e2fsprogs。
安裝e2fsprogs後再次configure,成功。
[root
@localhost extundelete
-0.
2.
4]
#
yum install e2fsprogs-devel
[root
@localhost extundelete
-0.
2.
4]
# ./configure
Configuring extundelete
0.
2.
4
Writing generated files to disk
(2) make & make install
[root
@localhost extundelete
-0.
2.
4]
#make & make install
如果沒有異常資訊,基本說明安裝成功.
(3) 可以到src目錄驗證下.
[root
@localhost extundelete
-0.
2.
4]
# cd src
[root
@localhost src]
#
./extundelete
No action specified; implying
--superblock.
.
/extundelete
: Missing device name.
Usage
: .
/extundelete [options] [
--] device
-file
.............
[root
@localhost src]#
./extundelete -v
extundelete version 0.2.4
libext2fs version 1.41.12
Processor is little endian.
如上資訊,證明安裝成功。
下面才真正開始資料恢復。
三、 掛載新硬碟
(如果原伺服器磁碟空間夠大,可以跳過這一步。)
因為被誤刪的資料很大(約200G),原伺服器所在的物理機上也沒有磁碟空間了。因些需要到遠端掛載另一臺伺服器B上的磁碟,B是xen虛出的機器,空間也不夠,但所在的物理機上還有磁碟空間,這時需要從宿主機上分空間給B。
1 在xen上掛載一塊磁碟給B
因為是圖形操作,就不再細說。只需分配足夠大的空間就可以了,我當時選的是300G。
2 登入伺服器B, 準備掛載新磁碟。
(1) 檢視新磁碟是否已掛載
[nmen
@dev
-ubuntu
-server]
ls
/dev
/sd
*
/dev
/sda
/dev
/sda1
/dev
/sda2
/dev
/sda5
/dev
/sda6
/dev
/sda7
/dev
/sda8
/dev/sdb
/dev/sdb確實已掛載。
此時新盤是未分割槽,也未格式化,因此需要先進行這兩件事。
(2) 分割槽
下圖是hdb的硬碟,sdb的盤也一樣的操作。
(本圖來自:
http://www.shyw.net/bbs/yxt443333-1-1.html)
(3) 格式化
[nmen
@dev
-ubuntu
-server]
:~$
sudo mkfs -t ext3 /dev/sdb1
mke2fs
1.
41.
11 (
14-Mar
-2010)
Filesystem label
=
OS type
: Linux
Block size
=4096 (log
=2)
Fragment size
=4096 (log
=2)
Stride
=0 blocks, Stripe width
=0 blocks
22937600 inodes,
91749215 blocks
4587460 blocks (
5.00
%) reserved
for the super user
First data block
=0
Maximum filesystem blocks
=4294967296
2800 block groups
32768 blocks per group,
32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks
:
32768,
98304,
163840,
229376,
294912,
819200,
884736,
1605632,
2654208,
4096000,
7962624,
11239424,
20480000,
23887872,
71663616,
78675968
Writing inode tables
:
done
Creating journal (
32768 blocks)
:
done
Writing superblocks
and filesystem accounting information
:
done
This filesystem will be automatically checked every
33 mounts
or
180 days, whichever comes first. Use tune2fs
-c
or
-i to override.
顯示以上資訊說明已成功格式化。
(4) 設定卷標
sudo
e2label
/dev
/sdb1
/restore
(5) 掛載
[nmen
@dev
-ubuntu
-server]
:~$ mkdir
/restore
[nmen
@dev
- ubuntu
- server]
:
~ $
mount
-vl
-t ext3
/dev
/sdb1
/restore
至此伺服器B上掛載新硬碟結束,現在有足夠空間來做存放要恢復的資料了。
四、通過NFS遠端掛載
通過網路, 將遠端主機B共享的檔案系統,掛載到需要做資料恢復的機器A。
1. 伺服器B上安裝NFS
(1) 安裝
B是ubuntu系統,預設沒安裝nfs.
# sudo apt-get install nfs-kernel-server
(2) 配置
修改/etc/exports , 新增如下語句。
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/restore *(rw,sync,no_root_squash,no_subtree_check)
其中 :
/restore -- 需要與客戶機共享的目錄;
* -- 表示任何主機均可訪問本目錄,也可指定IP;
(w,sync,no_root_squash,no_subtree_check) -- 配置客戶機的許可權;
因為是臨時使用,並且是伺服器位於內網,所以設定相對隨意。
(3) 使配置生效
# exportfs –rv
# /etc/init.d/nfs-kernel-server restart
(4) 驗證是否配置成功
顯示NFS伺服器輸出目錄列表:
nmen
@dev
-ubuntu
-server
:
showmount -e
Export list
for chinahrd
-ubuntu
-dev
:
/restore
*
(5) 防火牆
因為時間緊急,並且是內網,所以臨時關閉了B上的防火牆:
sudo
ufw
disable
可通過以下命令啟用防火牆:
sudo ufw enable
2. 伺服器A上掛載遠端目錄
將/restore目錄從伺服器 B 掛載到 /mnt 上。
mount
-t nfs [B的IP]
:/restore
/mnt
命令詳解如下:
# mount -t nfs [-o mount-options] server:/directory /mount-point
-o mount
-options
指定可以用來掛載 NFS 檔案系統的掛載選項。
server
:/directory
指定包含共享資源的伺服器主機名,以及要掛載的檔案或目錄的路徑。
/mount
-point
指定要掛載檔案系統的目錄。
五、資料恢復
1. 得到刪除的大概時間
這一步不是必須,但這個有助於更快的回覆想要的資料。
date
-d
"Fri Apr 15:40:00 2014"
+%s
1397202000
1397202000這個時間值,我們後期會用到。
2. 檢視被刪除檔案
# extundelete /dev/sdb1 --inode 2
File name | Inode number | Deleted status
. 9
.. 11
lost+found 24 Deleted
data 82 Deleted
一個分割槽掛載到一個目錄下時,”根”目錄的inode值為一般是2。
狀態為deleted的是被刪除的檔案。
3. 資料恢復
進入剛mount的遠端目錄/restore;
指定--after "1397202000", 表示恢復這個時間點之後的檔案;
檔案預設會被恢復到當前目錄下的RECOVERED_FILES目錄中。
cd
/restore
[root
@localhost restore]#[extundelete的安裝路徑]
./extundelete --restore-all --after
"1397202000"
/dev
/mapper
/VolGroup
-lv_home
Only show and process deleted entries if they are deleted on or after 1397202000 and before 9223372036854775807.
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 6924 groups loaded.
Loading journal descriptors ... 27149 descriptors loaded.
Searching for recoverable inodes in directory / ...
696 recoverable inodes found.
Looking through the directory structure for deleted files ...
Unable to restore inode 27394319 (VMware/9.50_ps/9.55locate.vmx.lck): Space has been reallocated.
Unable to restore inode 27402241 (VMware/9.35win7/9.35win7.vmx.lck): Space has been reallocated.
Unable to restore inode 27396032 (VMware/9.35win7/9.35win7-Snapshot1.vmsn): No undeleted copies found in the journal.
Unable to restore inode 27394051 (VMware/9.36win2008/9.36win2008R2.vmx.lck/E00633.lck): Space has been reallocated.
Unable to restore inode 27394603 (lost+found/E09292.lck): Space has been reallocated.
8 recoverable inodes still lost.
一般來說,要等很久。。。
cd restore
/RECOVERED_FILES$
ls
110_open_dns
111_open_dns_node1
112_DNS_node2
116_svn
刪除的檔案回來了,至此鬆一口氣。
六、收尾工作
(1) 重新掛載A上的磁碟為可讀寫:
[root
@localhost src]
# mount -o remount, rw /home/
解除安裝伺服器B上的目錄。
(2) 開啟B的防火牆。
sudo ufw enable
(3) 在A上對rm命令啟用別名,防止沉默式刪除。
vi
/etc
/bashrc
source /etc/bashrc
# do not delete / or prompt if deleting more than 3 files at a time #
alias
rm
=
'rm -I --preserve-root'
# confirmation #
alias
mv
=
'mv -i'
alias
cp
=
'cp -i' alias ln
=
'ln -i'
# Parenting changing perms on / #
alias chown
=
'chown --preserve-root'
alias chmod
=
'chmod --preserve-root'
alias chgrp
=
'chgrp --preserve-root'
(4) 在B上使用Rsync,定期備份A上資料。
參考: http://abloz.com/2013/09/12/linux-rm-rf-file-recovery-record.html
About Me
........................................................................................................................ ● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除 ● 本文在itpub、部落格園、CSDN和個人微 信公眾號( xiaomaimiaolhr)上有同步更新 ● 本文itpub地址: http://blog.itpub.net/26736162 ● 本文部落格園地址: http://www.cnblogs.com/lhrbest ● 本文CSDN地址: https://blog.csdn.net/lihuarongaini ● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/ ● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826 ........................................................................................................................ ● QQ群號: 230161599 、618766405 ● 微 信群:可加我微 信,我拉大家進群,非誠勿擾 ● 聯絡我請加QQ好友 ( 646634621 ),註明新增緣由 ● 於 2019-08-01 06:00 ~ 2019-08-31 24:00 在西安完成 ● 最新修改時間:2019-08-01 06:00 ~ 2019-08-31 24:00 ● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解 ● 版權所有,歡迎分享本文,轉載請保留出處 ........................................................................................................................ ● 小麥苗的微店: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail ● 小麥苗出版的資料庫類叢書: http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麥苗OCP、OCM、高可用網路班: http://blog.itpub.net/26736162/viewspace-2148098/ ● 小麥苗騰訊課堂主頁: https://lhr.ke.qq.com/ ........................................................................................................................ 使用 微 信客戶端掃描下面的二維碼來關注小麥苗的微 信公眾號( xiaomaimiaolhr)及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。
........................................................................................................................ |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2655565/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- rm -rf 刪除檔案還能恢復嗎?
- Linux 恢復rm -rf命令所刪除的達夢資料檔案Linux
- Linux下面誤刪除檔案使用extundelete工具恢復介紹Linuxdelete
- linux 刪除檔案或目錄——rmLinux
- Linux rm(刪除檔案/目錄) 命令Linux
- Linuxt恢復誤刪內容:命令lsof、extundelete工具Linuxdelete
- 恢復EXT3下被刪除的檔案
- linux rm - rf之後怎麼恢復Linux
- Linux rm命令:刪除檔案或目錄Linux
- Linux下用rm刪除的檔案的恢復方法Linux
- [20190130]刪除tab$記錄的恢復.txt
- Linux系統中檔案被刪除後的恢復方法(ext4)Linux
- [20190225]刪除tab$記錄的恢復5.txt
- [20190130]刪除tab$記錄的恢復2.txt
- [20190212]刪除tab$記錄的恢復3.txt
- hbase 恢復 誤刪除
- NTFS刪除及恢復
- rm 刪除檔案
- Git恢復被刪除的分支Git
- Git恢復刪除的檔案Git
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- [20220909]bbed關於刪除記錄恢復的問題.txt
- 【伺服器資料恢復】linux ext3檔案系統下誤刪除mysql資料庫的資料恢復案例伺服器資料恢復LinuxMySql資料庫
- 行動硬碟刪除的檔案能恢復嗎,怎麼恢復硬碟刪除的檔案硬碟
- 恢復ext4檔案系統被誤刪的檔案
- 刪除的微信聊天記錄怎麼恢復?(已解決)
- Sybase SQL Anywhere(ASA)資料庫恢復,ASA資料恢復,資料誤刪除恢復工具ReadASADBSQL資料庫資料恢復
- 幾種刪除Linux目錄的方法Linux
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- oracle使用小記、刪除恢復Oracle
- MySQL 如何重建/恢復刪除的 sys SchemaMySql
- 如何恢復被刪除的 GitLab 專案?Gitlab
- [20210803]刪除user$的恢復準備.txt
- sd卡刪除的檔案如何恢復SD卡
- [20210930]bbed恢復刪除的資料.txt
- Shift + Delete刪除的檔案如何恢復?delete
- 拒絕使用 rm -rf 命令 ?
- fs模組之刪除目錄