Linux文件系統的反刪除方法
Linux文件系統的反刪除方法
作為一個多用戶、多任務的操作系統,Linux下的文件一旦被刪除,是難以恢復的。盡管刪除命令只是在文件節點中作刪除標記,并不真正清除文件內容,但是其他用戶和一些有寫盤動作的進程會很快覆蓋這些數據。不過,對于家庭單機使用的Linux,或者誤刪文件后及時補救,還是可以恢復的。
1.Ext2文件系統結構的簡單介紹
在Linux所用的Ext2文件系統中,文件是以塊為單位存儲的,默認情況下每個塊的大小是1K,不同的塊以塊號區分。每個文件還有一個節點,節點中包含有文件所有者,讀寫權限,文件類型等信息。對于一個小于12個塊的文件,在節點中直接存儲文件數據塊的塊號。如果文件大于12個塊,那么節點在12個塊號之后存儲一個間接塊的塊號,在這個間接塊號所對應的塊中,存儲有256個文件數據塊的塊號(Ext2fs中每個塊號占用4字節,這樣一個塊所能存儲的塊號就?024/4=256)。如果有更大的文件,那么還會在節點中出現二級間接塊和三級間接塊。
?
2。恢復被誤刪文件的方法
大多數Linux發行版都提供一個debugfs工具,可以用來對Ext2文件系統進行編輯操作。不過在使用這個工具之前,還有一些工作要做。
首先以只讀方式重新掛載被誤刪的文件所在分區。使用如下命令:(假設文件在/usr分區)
mount–r–n–oremount/usr
-r表示只讀方式掛載;-n表示不寫入/etc/mtab,如果是恢復/etc上的文件,就加上這個參數。如果系統說xxxpartionbusy,可以用fuser命令查看一下是哪些進程使用這個分區上的文件:
fuser–v–m/usr
如果沒有什么重要的進程,用以下命令停掉它們:
fuser-k–v–m/usr
然后就可以重新掛載這些文件系統了。
如果是把所有的文件統一安裝在一個大的/分區當中,可以在boot提示符下用linuxsingle進入單用戶模式,盡量減少系統進程向硬盤寫入數據的機會,要不干脆把硬盤掛在別的機器上。另外,恢復出來的數據不要寫到/上面,避免破壞那些有用的數據。如果機器上有dos/windows,可以寫到這些分區上面:
mount–r–n/dev/hda1/mnt/had
然后就可以執行debugfs:(假設Linux在/dev/hda5)
#debugfs/dev/hda5
就會出現debugfs提示符debugfs:
使用lsdel命令可以列出很多被刪除的文件的信息:
debugfs:lsdel
debugfs:2692deletedinodesfound.
InodeOwnerModeSizeBlocksTimedeleted
164821010060081921/1SunMay1319:22:462001
…………………………………………………………………………………
36137010064441/1TueApr2410:11:152001
196829010064414950038/38MonMay2713:52:042001
?
debugfs:
列出的文件有很多(這里找到2692個),第一字段是文件節點號,第二字段是文件所有者,第三字段是讀寫權限,接下來是文件大小,占用塊數,刪除時間。然后就可以根據文件大小和刪除日期判斷那些是我們需要的。比如我們要恢復節點是196829的文件:
可以先看看文件數據狀態:
debugfs:stat<196829>
Inode:196829Type:regularMode:0644Flags:0x0Version:1
User:0Group:0Size:149500
FileACL:0DirectoryACL:0
Links:0Blockcount:38
Fragment:Address:0Number:0Size:0
ctime:0x31a9a574--MonMay2713:52:042001
atime:0x31a21dd1--TueMay2120:47:292001
mtime:0x313bf4d7--TueMar508:01:272001
dtime:0x31a9a574--MonMay2713:52:042001
BLOCKS:
594810594811594814594815594816594817………………………………….
TOTAL:38
然后就可以用dump指令恢復文件:
debugfs:dump<196829>/mnt/hda/01.sav
這樣就把文件恢復出來了。退出debugfs:
debugfs:quit
另一種方法是手工編輯inode:
debugfs:mi<196829>
Mode[0100644]
UserID[0]
GroupID[0]
Size[149500]
Creationtime[0x31a9a574]
Modificationtime[0x31a9a574]
Accesstime[0x31a21dd1]
Deletiontime[0x31a9a574]0
Linkcount[0]1
Blockcount[38]
Fileflags[0x0]
Reserved1[0]
Fileacl[0]
Directoryacl[0]
Fragmentaddress[0]
Fragmentnumber[0]
Fragmentsize[0]
DirectBlock#0[594810]
…………………………….
TripleIndirectBlock[0]
使用mi指令后每次顯示一行信息以供編輯,其它行可以直接按回車表示確認,把deletiontime改成0(未刪除),Linkcount改成1。改好后退出debugfs:
debugfs:quit
然后用fsck檢查/dev/hda5
fsck/dev/hda5
程序會說找到丟失的數據塊,放在lost found里面。這個目錄里的文件就是我們要的東東。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
相關閱讀:
- [電子說] uboot的基本概念和啟動流程分析 2023-10-24
- [嵌入式技術] Windows11上Linux安裝教程 2023-10-24
- [電子說] 多路徑和iSCSI SAN存儲技術介紹 2023-10-24
- [嵌入式技術] 探討嵌入式系統的軟硬件框架 2023-10-24
- [電子說] 浩辰CAD Linux版 2024全球發布 2023-10-23
- [電子說] 如何使用pthread_barrier_xxx系列函數來實現多線程之間的同步? 2023-10-23
- [電子說] 馬斯克曾說特斯拉堅不可摧,卻敗在Kali Linux手下 2023-10-22
- [電子說] 為T507-H開發板配置Samba服務,高效實現跨系統的文件共享 2023-10-20
( 發表人:admin )