author:skate
time:2013/10/12
linux恢復意外刪除的檔案
當程序開啟某個檔案時,只要該程序保持開啟該檔案,即使將其刪除,它依然存在於磁碟中。這意味著,程序並不知道檔案已經被刪除,它仍然可以向開啟該檔案時提供給它的檔案描述符進行讀取和寫入。除了該程序之外,這個檔案是不可見的,因為已經刪除了其相應的目錄索引節點。在這種情況可以通過lsof來恢復這些檔案。
在/proc目錄下,其中包含了反映核心和程序樹的各種檔案。/proc目錄掛載的是在記憶體中所對映的一塊區域,所以這些檔案和目錄並不存在於磁碟中,因此當我們對這些檔案進行讀取和寫入時,實際上是在從記憶體中獲取相關資訊。大多數與lsof相關的資訊都儲存於以程序的pid命名的目錄中,即/proc/12中包含的是pid為12的程序的資訊。每個程序目錄中存在著各種檔案,它們可以使應用程式簡單地了解程序的記憶體空間、檔案描述符列表、指向磁碟上的檔案的符號鏈結和其他系統資訊。lsof程式使用該資訊和其他關於核心內部狀態的資訊來產生其輸出。所以lsof可以顯示程序的檔案描述符和相關的檔名等資訊。也就是我們通過訪問程序的檔案描述符可以找到該檔案的相關資訊。
下面舉例說明
我/tmp目錄下建立了指令碼檔案,時刻在後台執行,但是tmp目下會被系統定時刪除的,但犯懶不想重寫指令碼,想把原來的找回,具體步驟如下。
1.檢視已經被刪除的檔案diamon.sh,已經不存在了
[root@centos5 ~]# ll /tmp/
total 28
-rw-r--r-- 1 root root 402 sep 26 14:19 load_tab.sh
srwxrwxrwx 1 mysql mysql 0 sep 16 15:20 mysql.sock
drwx------ 2 root root 4096 oct 12 15:44 ssh-hipbw10887
drwx------ 2 root root 4096 oct 10 16:12 ssh-luxbjf6337
2. 使用lsof來檢視當前哪個程序正在開啟檔案」/tmp/diamon.sh「
[root@centos5 ~]# lsof | grep diamon
sh 8455 root 255r reg 253,0 173 764298 /tmp/diamon.sh (deleted)
[root@centos5 ~]#
從上面的輸出可以看到,程序8455正在以唯讀的方式開啟這個檔案,開啟的檔案描述符為255,同時檔案/tmp/diamon.sh被標記刪除。然後我檢視檔案" /proc/8455/fd/255"
[root@centos5 ~]# more /proc/8455/fd/255
#variables
dir=/tmp
while (true)
dov_num=`ps -ef | grep load_tab | grep -v grep | wc -l`
if [ $v_num -lt 4 ] ; then
sh /tmp/load_tab.sh > /dev/null 2>&1 &
fidone
[root@centos5 ~]#
3. 已經找到已經被刪除的檔案了嗎然後利用i/o重定向將其恢復到指定檔案中,如下
[root@centos5 ~]# cat /proc/8455/fd/255 > /tmp/diamon.sh
檢查檔案已經被恢復了
[root@centos5 ~]# ll /tmp
total 36
-rw-r--r-- 1 root root 173 oct 12 16:53 diamon.sh
-rw-r--r-- 1 root root 402 sep 26 14:19 load_test10.sh
srwxrwxrwx 1 mysql mysql 0 sep 16 15:20 mysql.sock
drwx------ 2 root root 4096 oct 12 15:44 ssh-hipbw10887
drwx------ 2 root root 4096 oct 10 16:12 ssh-luxbjf6337
[root@centos5 ~]#
檢視恢復的檔案內容是否正常
[root@centos5 ~]#
[root@centos5 ~]# more /tmp/diamon.sh
#variables
dir=/tmp
while (true)
dov_num=`ps -ef | grep load_test | grep -v grep | wc -l`
if [ $v_num -lt 4 ] ; then
sh /tmp/load_test10.sh > /dev/null 2>&1 &
fidone
[root@centos5 ~]#
至此linux恢復刪除檔案成功結束
總結:a.在檔案被刪除時,不要慌,盡可能儲存現場
b.對於某些資料庫檔案被誤刪除很有效
---end----
Oracle 意外刪除資料檔案的恢復
文章 今天有客戶的資料庫意外被刪除了整個目錄中的資料檔案,作業系統級別的刪除,然而幸運的是這個資料庫沒有崩潰,仍然處於open狀態的時候,客戶就發現了問題,求助到我們,最終完整地恢復了所有資料檔案。在linux下大致重新演示一下恢復的過程,恢復的步驟與資料庫版本沒有太大關係,與作業系統的不同會有所不...
linux 恢復刪除的檔案
檔案實際上是乙個指向inode的鏈結,inode鏈結包含了檔案的所有屬性,比如許可權和所有者,資料塊位址 檔案儲存在磁碟的這些資料塊中 當你刪除 rm 乙個檔案,實際刪除了指向inode的鏈結,並沒有刪除inode的內容.程序可能還在使用.只有當inode的所有鏈結完全移去,然後這些資料塊將可以寫入...
Linux 恢復誤刪除的檔案
目標內容 恢復linux下誤刪除的檔案 1.恢復linux下誤刪除的檔案 刪除檔案和資料夾 rm rf 檔名或目錄名 r 遞迴刪除 可以刪除目錄和目錄裡面的東西 f 強行刪除 ext4檔案系統上刪除檔案,可以恢復 extundelete windows恢復誤刪除的檔案 final data v2.0...