突發事件,應用上傳的數據被程序自動刪掉了,可悲的是尚未數據備份,數據是放在系統的 /data/webapps/xxxx/upload 目錄下面,可把咱們急壞了,以前又沒有作過數據恢復的測試,而後我找到了一款數據恢復的軟件,成功把刪除的大部分數據找回來了,個人數據恢復過程以下。node
若是咱們的源裏面添加了 epel 倉庫的話,咱們能夠直接使用下面的命令安裝。linux
yum install extundelete -y
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 查找c++
extundelete /dev/sdb1 --inode 2
咱們會看到 weapps 目錄的inode,web
extundelete /dev/sda5 --inode 24641537
咱們看到項目的 inode,app
extundelete /dev/sda5 --inode 24903688
咱們找到了最終刪除數據的目錄 uploadwebapp
extundelete /dev/sda5 --inode 24904454
咱們能夠看到標稱的 Deleted,這些數據就是咱們要進行恢復的數據。ide
那咱們就恢復指定目錄,以當前分區爲根分區進行路徑設定,項目名進行掩蓋測試
extundelete /dev/sda5 --restore-directory /webapps/xxxx/upload
由於磁盤數據一直在讀寫,因此有些文件以前的 inode 已經被從新分配了,致使部分數據沒法恢復,數據最後會告訴咱們有多少文件沒有回覆,可是大部分數據咱們已經恢復了,這就是很重要的事情了。spa
那咱們查看一下回復的數據吧,軟件會在當前目錄生成一個目錄 RECOVERED_FILES 裏面就是咱們恢復的數據。3d
恢復所有數據可使用命令
extundelete /dev/sda5 --restore-all
其中,參數(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節點中的扇區指針清零,實際上文件還存在磁盤上面,若是磁盤以讀寫方式掛載,這些刪除的數據塊可能會被系統重新分配出去,這些數據塊被覆蓋以後,這些數據就真的丟失了,因此以只讀的方式掛載,儘量避免數據被覆蓋。