1. 程式人生 > >linux下誤刪目錄文件後恢復神器extundelete

linux下誤刪目錄文件後恢復神器extundelete

pps 技術 2.4 sdn 命令簡介 倉庫 sda mic white

原文鏈接:https://blog.51cto.com/wzlinux/2052835

參考:https://blog.csdn.net/cwg_1992/article/details/46310055

一、背景

突發事件,應用上傳的數據被程序自動刪掉了,可悲的是還沒有數據備份,數據是放在系統的 /data/webapps/xxxx/upload 目錄下面,可把我們急壞了,之前又沒有做過數據恢復的測試,然後我找到了一款數據恢復的軟件,成功把刪除的大部分數據找回來了,我的數據恢復過程如下。

二、安裝恢復軟件

1、epel 倉庫安裝

如果我們的源裏面添加了 epel 倉庫的話,我們可以直接使用下面的命令安裝。

yum install extundelete -y

2、源碼編譯安裝

wget  http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2 yum -y install  bzip2  e2fsprogs-devel  e2fsprogs  gcc-c++ make tar -xvjf extundelete-0.2.4.tar.bz2 cd extundelete-0.2.4 ./configure make && make install

三、刪除數據查找

如何查看inode使用ls -lia 目標目錄命令簡介 l參數為了方便對應文件和inode關系,人性化的現實,i參數則為顯示文件的inode,a參數為列出本目錄下索引的文件,包括隱藏的註意:如果是根目錄要看自己的inode,那麽就必須用a參數,因為在根目錄下,它本身的名字叫".",如果不加a參數是列不出來的

因為我的數據路徑比較深,所以我們需要一步步查找,可以先從根分區 inode 查找

extundelete /dev/sdb1 --inode 2

技術分享圖片

我們會看到 weapps 目錄的inode,

extundelete /dev/sda5 --inode 24641537

技術分享圖片

我們看到項目的 inode,

extundelete /dev/sda5 --inode 24903688

技術分享圖片

我們找到了最終刪除數據的目錄 upload

extundelete /dev/sda5 --inode 24904454

技術分享圖片

我們可以看到標稱的 Deleted,這些數據就是我們要進行恢復的數據。

四、數據恢復

那我們就恢復指定目錄,以當前分區為根分區進行路徑設定,項目名進行掩蓋

extundelete /dev/sda5 --restore-directory /webapps/xxxx/upload

技術分享圖片

因為磁盤數據一直在讀寫,所以有些文件之前的 inode 已經被重新分配了,導致部分數據無法恢復,數據最後會告訴我們有多少文件沒有回復,但是大部分數據我們已經恢復了,這就是很重要的事情了。

那我們查看一下回復的數據吧,軟件會在當前目錄生成一個目錄 RECOVERED_FILES 裏面就是我們恢復的數據。

技術分享圖片

恢復全部數據可以使用命令

extundelete /dev/sda5 --restore-all

使用方法

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,通過指定數據塊大小來打開文件系統,一般用於查看已經知道大小的文件。

在數據刪除之後,首先要卸載被刪除數據所在的磁盤或是分區,如果是系統根分區遭到誤刪除,就需要進入單用戶模式下,將根分區以只讀的方式掛載。

原因:因為文件刪除之後,僅僅是將文件的inode節點中的扇區指針清零,實際上文件還存在磁盤上面,如果磁盤以讀寫方式掛載,這些刪除的數據塊可能會被系統從新分配出去,這些數據塊被覆蓋之後,這些數據就真的丟失了,所以以只讀的方式掛載,盡可能避免數據被覆蓋。

linux下誤刪目錄文件後恢復神器extundelete