Linux文件誤刪之后恢復方法


前言

今天不小心把一個文件給誤刪了,因為不想花半天時間重新寫,就查找了一下Linux下恢復文件的方法。

因為是剛刪不久,文件實際的數據應該還在

 

首先查看系統分區

Linux:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              1968417    463571   1504846  24% /
tmpfs                    16384         4     16380   1% /var/lib/php5
tmpfs                    16384        40     16344   1% /var/run
tmpfs                   131072         4    131068   1% /tmp
ssl_service             262144         0    262144   0% /kssl/HRP/cache

 

使用系統自帶工具debugfs進行修復

打開刪除的文件所在的分區

Linux:~# debugfs
debugfs 1.37 (21-Mar-2005)
debugfs:  open /dev/sda1

 

用ls -d查看剛剛刪除的文件所在的目錄

如果列表中有我們要找的文件,尖括號<>中是對應的inode號

debugfs:  ls -d /root/rand-test
 180331  (12) .    180225  (12) ..    180333  (16) assess
 180334  (32) experiments   <180451> (12) 4913    180358  (32) data
<180451> (20) .1.swp    180359  (68) periodtest.sh
<180337> (44) .singletest.input.swp    180451  (24) periodtest.input
 180356  (828) singletest.input   <180366> (32) .periodtest.input.swp
<180375> (748) .singletest.input.swp   <180338> (716) periodtest.input~

 

查看inode的日志文件

debugfs: logdump -i <180338>
Inode 180338 is at group 176, block 1441809, offset 128
Journal starts at block 3434, transaction 90549
FS block 1441809 logged at sequence 90622, journal block 3950

...

 

quit退出debugfs,使用dd命令進行恢復,bs為前面得到的offset,skip為前面得到的block

debugfs:  quit
Linux:~/rand-test# dd if=/dev/sda1 of=/root/rand-test/periodtest.input~ bs=128 count=1 skip=1441809
1+0 records in
1+0 records out
128 bytes transferred in 0.000081 seconds (1582468 bytes/sec)

 

遺憾的是,我要恢復的文件已經不在了

好在對於文本文件還有另一種方法,使用grep

 

第一步同樣是找到文件所在的分區

 

然后使用grep對分區進行搜索,只要你記得文檔中的某些關鍵字

grep -a -B 30 -A 150 'function checkInt() ' /dev/sda1 > tmp.txt

其中-a表示把分區看成文本形式(分區本身是二進制形式的),-B 30 -A 150表示找到搜索的內容就打印前面30行和后面150行

如果分區比較大可能需要一定的搜索時間,完成之后打開tmp.txt,你會發現在一堆亂碼中鑲嵌着你要恢復的本文

 

至此,大功告成,總結

使用debugfs的方法適用於所有文件,不過需要inode信息仍然存在。使用grep的方法,只需要實際的block中數據還存在即可恢復,不過只適用於文本文件。

另外,切記rm需謹慎

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM