linux 恢復刪除的檔案

2021-09-19 09:37:10 字數 4323 閱讀 8723

·         檔案實際上是乙個指向inode的鏈結, inode鏈結包含了檔案的所有屬性, 比如許可權和所有者, 資料塊位址(檔案儲存在磁碟的這些資料塊中). 當你刪除(rm)乙個檔案, 實際刪除了指向inode的鏈結, 並沒有刪除inode的內容. 程序可能還在使用. 只有當inode的所有鏈結完全移去, 然後這些資料塊將可以寫入新的資料.

·         proc檔案系統可以協助我們恢復資料. 每乙個系統上的程序在/proc都有乙個目錄和自己的名字, 裡面包含了乙個fd(檔案描述符)子目錄(程序需要開啟檔案的所有鏈結). 如果從檔案系統中刪除乙個檔案, 此處還有乙個inode的引用:

1.第一種方法 lsof

當程序開啟了某個檔案時,只要該程序保持開啟該檔案,即使將其刪除,它依然存在於磁碟中。這意味著,程序並不知道檔案已經被刪除,它仍然可以向開啟該檔案時提供給它的檔案描述符進行讀取和寫入。除了該程序之外,這個檔案是不可見的,因為已經刪除了其相應的目錄索引節點。

在/proc 目錄下,其中包含了反映核心和程序樹的各種檔案。/proc目錄掛載的是在記憶體中所對映的一塊區域,所以這些檔案和目錄並不存在於磁碟中,因此當我們對這些檔案進行讀取和寫入時,實際上是在從記憶體中獲取相關資訊。

大多數與 lsof 相關的資訊都儲存於以程序的 pid 命名的目錄中,即 /proc/1234 中包含的是 pid 為 1234 的程序的資訊。每個程序目錄中存在著各種檔案,它們可以使得應用程式簡單地了解程序的記憶體空間、檔案描述符列表、指向磁碟上的檔案的符號鏈結和其他系統資訊。

lsof 程式使用該資訊和其他關於核心內部狀態的資訊來產生其輸出。所以lsof 可以顯示程序的檔案描述符和相關的檔名等資訊。也就是我們通過訪問程序的檔案描述符可以找到該檔案的相關資訊。

程序在執行中,接下來我就把/var/log/messages這個檔案刪掉

shell> rm /var/log/messages

刪掉之後,我再來看看這個程序的變化

shell> lsof |grep /var/log/messages

rsyslogd   1737      root    1w      reg                8,2   5716123     652638 /var/log/messages (deleted)

大家看到有變化了吧, 對比兩個之後發現多了(deleted)。要找到這個檔案在哪還要看看這個

pid:1737 fd:1 那我們有直接進入/proc/1737/fd/1用ll檢視一下

shell> cd /proc/1737/fd/

shell> ll

total 0

lrwx------ 1 root root 64 dec 23 13:00 0 -> socket:[11442]

l-wx------ 1 root root 64 dec 23 13:00 1 -> /var/log/messages (deleted)

l-wx------ 1 root root 64 dec 23 13:00 2 -> /var/log/secure

lr-x------ 1 root root 64 dec 23 13:00 3 -> /proc/kmsg

l-wx------ 1 root root 64 dec 23 13:00 4 -> /var/log/maillog

看到了1對應/var/log/messages (deleted),看看檔案是不是我們要的檔案:

shell> head -5 1

nov 14 03:11:11 localhost kernel: imklog 5.8.10, log source = /proc/kmsg started.

nov 14 03:11:11 localhost rsyslogd: [origin software="rsyslogd" swversion="5.8.10" x-pid="1241" x-info=""] start

nov 14 03:11:11 localhost kernel: initializing cgroup subsys cpuset

nov 14 03:11:11 localhost kernel: initializing cgroup subsys cpu

nov 14 03:11:11 localhost kernel: linux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (red hat 4.4.7-4) (gcc) ) #1 smp fri nov 22 03:15:09 utc 2013

對比備份檔案:

shell> head -5 /var/log/message_bac

nov 14 03:11:11 localhost kernel: imklog 5.8.10, log source = /proc/kmsg started.

nov 14 03:11:11 localhost rsyslogd: [origin software="rsyslogd" swversion="5.8.10" x-pid="1241" x-info=""] start

nov 14 03:11:11 localhost kernel: initializing cgroup subsys cpuset

nov 14 03:11:11 localhost kernel: initializing cgroup subsys cpu

nov 14 03:11:11 localhost kernel: linux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (red hat 4.4.7-4) (gcc) ) #1 smp fri nov 22 03:15:09 utc 2013

對比發現資料是一樣的,恢復

shell> cat 1 > /var/log/messages

對於許多應用程式,尤其是日誌檔案和資料庫,這種恢復刪除檔案的方法非常有用。

2.第二種方法  extundelete

測試誤操作刪除以下檔案

/usr/local/dbdata/gperftools-2.4.tar.gz  #檔案

/usr/local/dbdata/pcre-8.32              #目錄

執行誤操作:

# rm -rf /usr/local/dbdata/gperftools-2.4.tar.gz /usr/local/dbdata/pcre-8.32

將誤操作所在分割槽進行唯讀保護

如果確定檔案被誤刪,在沒有備份的情況下請馬上對分割槽實施寫入保護(預防新的寫入覆蓋誤刪的塊資料,因此許可權給唯讀):

#  # 

資料恢復工具安裝

工具安裝部署

官方**是 ,其目前的穩定版本是extundelete-0.2.4.

# wget

解壓安裝

依賴包# yum -y install gcc-c++ e2fsprogs.x86_64 e2fsprogs-devel.x86_64

# tar -jxvf extundelete-0.2.4.tar.bz2

# cd extundelete-0.2.4

# ./configure

# make && make install

驗證安裝結果

# extundelete -v

檔案恢復過程

恢復指定檔案:

原理:從根節點(inode=2)開始找到被刪除檔案的i節點,然後recover i節點。

以下是模擬刪除gperftools-2.4.tar.gz(檔案)和pcre-8.32 (目錄)

先檢測被刪除的檔案有哪些:

# extundelete /dev/sdb --inode 2

可以看到,有以下兩個

gperftools-2.4.tar.gz 15 deleted

pcre-8.32 655361 deleted

注意:恢復過程不要在誤刪分割槽進行,謹防inode. block塊相互覆蓋

先恢復檔案(可根據檔名進行恢復):

# extundelete /dev/sdb --restore-file gperftools-2.4.tar.gz

恢復目錄(根據目:# extundelete /dev/sdb --restore-directory pcre-8.32

最後會在當前目錄下看到乙個名為recovered_files的目錄,在目錄裡就可以看到被誤刪除的檔案以及目錄:

根據上面操作證明extundelete 工具可以實現對誤刪資料的恢復,而且操作簡單。

總結:使用rm一定要謹慎

磁碟按照功能進行分割槽是必要的

linux恢復意外刪除的檔案

author skate time 2013 10 12 linux恢復意外刪除的檔案 當程序開啟某個檔案時,只要該程序保持開啟該檔案,即使將其刪除,它依然存在於磁碟中。這意味著,程序並不知道檔案已經被刪除,它仍然可以向開啟該檔案時提供給它的檔案描述符進行讀取和寫入。除了該程序之外,這個檔案是不可見...

Linux 恢復誤刪除的檔案

目標內容 恢復linux下誤刪除的檔案 1.恢復linux下誤刪除的檔案 刪除檔案和資料夾 rm rf 檔名或目錄名 r 遞迴刪除 可以刪除目錄和目錄裡面的東西 f 強行刪除 ext4檔案系統上刪除檔案,可以恢復 extundelete windows恢復誤刪除的檔案 final data v2.0...

恢復刪除的檔案

1 當程序開啟了某個檔案時,只要該程序保持開啟該檔案,即使將其刪除,它依然存在於磁碟中。這意味著,程序並不知道檔案已經被刪除,它仍然可以向開啟該檔案時提供給它的檔案描述符進行讀取和寫入。除了該程序之外,這個檔案是不可見的,因為已經刪除了其相應的目錄索引節點。2 在 proc 目錄下,其中包含了反映核...