debugfs恢復Ext3的檔案系統中被rm、rm -f 掉的檔案
http://blog.csdn.net/my2010sam/article/details/9852539
ls -d # -d或--directory 顯示目錄名稱而非其內容。
ls -i # -i或--inode 顯示檔案和目錄的inode編號
如何在Ext3的檔案系統中恢復被rm掉的檔案。
[root@Gw za]# debugfs
debugfs 1.39 (29-May-2006)
debugfs: open /dev/sda3 #先使用df命令得到刪除檔案所在的裝置,如下圖:
debugfs: ls -d # -d或--directory 顯示目錄名稱而非其內容。
1556130 (12) . 1166977 (12) .. 1556131
1556139 (20) abc
1556134 (16) za.sh 1556133
1556140 (3756) zabbixStatistic.sh.bak <1556144> (3724) hoho
<1556144> (3712) 00
debugfs: close
debugfs: quit
[root@Gw za]#
假設我們有一個檔名叫 ‘test.txt’
$ls -il test.txt15 -rw-rw-r– 2 root root 20 Apr 17 12:08 test.txt
注意:: “-il” 選項表示顯示檔案的i-node號(15),如果你不知道Unix/Linux檔案系統的“I結點”的話,你有必要先補充一下相關的知識。簡單說來,i結點就是操作管理檔案的一個標識號。
我們再看一下其內容:
$ cat test.txtthis is test file
好,現在我們開始刪除檔案:.
$rm test.txtrm: remove write-protected regular file `test.txt’? y
使用 Journal 和 Inode 號恢復
注意,如果你刪除檔案後重啟了系統,那麼,相關的檔案 journal 會丟失,我們也就無法恢復檔案了。所以,恢復檔案的前提是,Journal不能丟失,即,系統不能重啟。
因為我們已經知道 test.txt 檔案的 inode 號是 15,所以我們可以使用 debugfs 命令來檢視:
debugfs: logdump -i <15>FS block 1006 logged at sequence 404351, journal block 7241
(inode block for inode 15):
Inode: 15 Type: regular Mode: 0664 Flags: 0×0 Generation: 0
User: 0 Group: 0 Size: 20
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0×48159f2d — Mon Apr 28 15:25:57 2008
atime: 0×48159f27 — Mon Apr 28 15:25:51 2008
mtime: 0×4806f070 — Thu Apr 17 12:08:40 2008
Blocks: (0+1): 10234
No magic number at block 7247: end of journal.
請注意上面資訊中的這一行:
這就是inode 15存放檔案的地址(資料塊)。然後,我們知道了這個地址,我們就可以使用 dd 命令,把這個地址上的資料給取出來。
切換至命令列:
1+0 records in
1+0 records out
- if 是輸入的裝置
- of 是輸出的裝置.
- bs 指定一個block的大小
- count 說明有多少個block需要dump
- skip 說明從開始的地方跳過 10234 個block,並從取下一個block的資料。此處的值是logdump中Blocks: (0+1):10234的值
下面讓我們看一下被恢復的檔案:
$cat /tmp/test.txtthis is test file
當然,上面的檔案恢復是基於我們知道檔案的inode,可在現實中,我們並不知道這個資訊,如果我們不知道inode,我們還可能恢復嗎?是的,這是可能的,讓我們來看一下如何恢復。
使用 Journal 和 檔名恢復
如果我們不知道檔案的inode我們可能恢復嗎?我可以告訴你,這是不可能的事情。不過我們有辦法知道檔案的inode號。下面讓我們來看看怎麼做到:
$rm mytest.txtrm: remove write-protected regular file `mytest.txt’? y
注意,我們並不知道其inode號,但我們可以使用 debugfs 命令來檢視(使用其 ls -d 選項)。
debugfs: ls -d2 (12) . 2 (12) .. 11 (20) lost+found 2347777 (20) oss
<2121567> (20) mytest.txt
你看檔名了吧,它的inode號是 <2121567> ,注意,被刪除了的檔案的inode都是用尖括號包起來的。
即然知道了inode號,那麼我們就很容易恢復了(使用 logdump選項):
debugfs: logdump -i <2121567> #使用logdump -i <節點號>Inode 2121567 is at group 65, block 2129985, offset 3840
Journal starts at block 1, transaction 405642
FS block 2129985 logged at sequence 405644, journal block 9
(inode block for inode 2121567):
Inode: 2121567 Type: bad type Mode: 0000 Flags: 0×0 Generation: 0
User: 0 Group: 0 Size: 0
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 0
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0×00000000 — Thu Jan 1 05:30:00 1970
atime: 0×00000000 — Thu Jan 1 05:30:00 1970
mtime: 0×00000000 — Thu Jan 1 05:30:00 1970
Blocks:
FS block 2129985 logged at sequence 405648, journal block 64
(inode block for inode 2121567):
Inode: 2121567 Type: regular Mode: 0664 Flags: 0×0 Generation: 913772093
User: 100 Group: 0 Size: 31
File ACL: 2130943 Directory ACL: 0
Links: 1 Blockcount: 16
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0×4821d5d0 — Wed May 7 21:46:16 2008
atime: 0×4821d8be — Wed May 7 21:58:46 2008
mtime: 0×4821d5d0 — Wed May 7 21:46:16 2008
Blocks: (0+1): 2142216
上面有很多資訊,讓我們仔細地檢視,你可以看到下面一行資訊:
FS block 2129985 logged at sequence 405644, journal block 9並且,其型別是:
Type: bad type再仔細看一下檔案的時間戳下面的Blocks: 什麼也沒有。那麼,讓我們看一下下一個block:
FS block 2129985 logged at sequence 405648, journal block 64(inode block for inode 2121567):
這一條Journal就有block資訊了:
Blocks: (0+1): 2142216這就是被刪除檔案的地址,讓我們再次執行恢復命令:
$sudo dd if=/dev/sda5 of=/home/hchen/mytest_recovered.txt bs=4096 skip=2142216 count=1 #skip 的值是blocks(0+1)中的值。count一般是1再讓我們來檢查一下檔案內容:
$ cat mytest_recovered.txtthis is my test file
小結
好了,下面是我們的一些總結:
0. 執行df 命令獲得刪除檔案所在的裝置
1. 執行debugfs命令。
2. open 裝置名稱;例如 open /dev/sda10
3)使用 debugfs: ls -d 找到被刪除檔案的inode號。inode號是< >中的編號
4)使用 debugfs:logdump -i <inode號> 找到檔案的資料塊地址,賦給步驟5中的skip值。
5)切換至命令列,使用dd 命令把資料取出來存成檔案。
sudo dd if=/dev/sda10 of=/home/B.py bs=4096 skip=129032 count=1
相關文章
- 檔案描述符恢復rm掉的dbf
- 恢復rm -f物理刪除資料檔案
- rm檔案後cp恢復回oracle檔案Oracle
- RM 刪除資料檔案恢復操作
- rm -rf 刪除檔案還能恢復嗎?
- 恢復被rm意外刪除資料檔案
- Linux下用rm刪除的檔案的恢復方法Linux
- rm 刪除檔案
- ext3grep ext3檔案系統下恢復檔案
- debugfs檔案系統
- linux下 恢復被rm意外刪除資料檔案Linux
- 改寫linux rm防止誤刪檔案無法恢復Linux
- 從rm到linux虛擬檔案系統Linux
- Linux rm掉檔案空間不釋放原因Linux
- Linux 恢復rm -rf命令所刪除的達夢資料檔案Linux
- Linux 系統的常用命令之 rm ,rm -rf , rm -f 以及rm 命令的其他引數命令Linux
- 【備份恢復】不使用rman工具就能恢復被rm刪除的資料檔案案例
- rm命令刪除檔案時排除特定檔案
- linux系統:rm-rf執行以後,怎麼辦?我來教你恢復檔案。Linux
- Linux環境利用恢復被rm意外刪除資料檔案Linux
- 恢復EXT3下被刪除的檔案
- extundelete恢復rm的資料delete
- 使用rm將檔案移到回收站
- 關於rm刪除檔案失敗
- ORA-27041: unable to open file--恢復被rm意外刪除資料檔案
- 如何從壞掉的SD卡恢復檔案SD卡
- extundelete工具恢復rm -rf 刪除的目錄(ext4、ext3)delete
- 恢復ext4檔案系統被誤刪的檔案
- 檔案的基本管理和XFS檔案系統備份恢復
- ext3 ext4 格式下 rm 誤刪恢復工具 extundeletedelete
- XFS檔案系統的備份、恢復、修復
- 替換掉的檔案怎麼恢復,兩個方法還原檔案
- linux 刪除檔案或目錄——rmLinux
- Linux rm(刪除檔案/目錄) 命令Linux
- Linux 檔案系統-ext3 檔案系統介紹(轉)Linux
- 恢復案例:無歸檔,掉電,控制檔案全部丟失恢復
- 【資料庫資料恢復】EXT3檔案系統下MYSQL資料庫恢復案例資料庫資料恢復MySql
- linux下rm命令刪除檔名中包含特殊字元的檔案Linux字元