Linux檔案系統的反刪除方法簡介(轉)
作為一個多使用者、多工的作業系統,Linux下的檔案一旦被刪除,是難以恢復的。儘管刪除命令只是在文件節點中作刪除標記,並不真正清除檔案內容,但是其它使用者和一些有寫盤動作的程式會很快覆蓋這些資料。不過,對於家庭單機使用的Linux,或者誤刪檔後及時補救,還是可以恢復的。
1.Ext2檔案系統結構的簡單介紹
在Linux所用的Ext2檔案系統中,檔案是以塊為單位儲存的,預設情況下每個塊的大小是1K,不同的塊以塊號區分。每個檔還有一個節點,節點中包含有檔所有者,讀寫許可權,檔案型別等資訊。對於一個小於12個塊的檔,在節點中直接儲存檔資料塊的塊號。如果檔大於12個塊,那麼節點在12個塊號之後儲存一個間接塊的塊號,在這個間接塊號所對應的塊中,儲存有256個檔資料塊的塊號(Ext2fs中每個塊號佔用4位元組,這樣一個塊中所能儲存的塊號就是1024/4=256)。如果有更大的檔,那麼還會在節點中出現二級間接塊和三級間接塊。
2。恢復被誤刪檔的方法
大多數Linux發行版都提供一個debugfs工具,可以用來對Ext2檔案系統進行編輯操作。不過在使用這個工具之前,還有一些工作要做。
首先以只讀方式重新掛載被誤刪的檔所在分割槽。使用如下命令:(假設檔案在/usr分割槽)
mount –r –n –o remount /usr
-r表示只讀方式掛載;-n表示不寫入/etc/mtab,如果是恢復/etc上的檔,就加上這個引數。如果系統說xxx partion busy,可以用fuser命令檢視一下是哪些程式使用這個分割槽上的?:
fuser –v –m /usr
如果沒有什麼重要的程式,用以下命令停掉它們:
fuser -k –v –m /usr
然後就可以重新掛載這些檔案系統了。
如果是把所有的檔統一安裝在一個大的/分割槽當中,可以在boot提示符下用linux single進入單使用者模式,儘量減少系統程式向硬碟寫入資料的機會,要不乾脆把硬碟掛在別的機器上。另外,恢復出來的資料不要寫到/上面,避免破壞那些有用的資料。如果機器上有dos/windows,可以寫到這些分割槽上面:
mount –r –n /dev/hda1 /mnt/had
然後就可以執行debugfs:(假設Linux在 /dev/hda5)
#debugfs /dev/hda5
就會出現debugfs提示符debugfs:
使用lsdel命令可以列出很多被刪除的檔案的資訊:
debugfs:lsdeldebugfs: 2692 deleted inodes found.Inode Owner Mode Size Blocks Time deleted164821 0 100600 8192 1/ 1 Sun May 13 19:22:46 2001…………………………………………………………………………………36137 0 100644 4 1/ 1 Tue Apr 24 10:11:15 2001196829 0 100644 149500 38/ 38 Mon May 27 13:52:04 2001debugfs:
列出的檔有很多(這裡找到2692個),第一欄位是檔節點號,第二欄位是檔所有者,第三欄位是讀寫許可權,接下來是檔大小,佔用塊數,刪除時間。然後就可以根據檔大小和刪除日期判斷那些是我們需要的。比如我們要恢復節點是
196829的檔案:
可以先看看檔案資料狀態:
debugfs:stat <196829>Inode: 196829 Type: regular Mode: 0644 Flags: 0x0 Version: 1User: 0 Group: 0 Size: 149500File ACL: 0 Directory ACL: 0Links: 0 Blockcount: 38Fragment: Address: 0 Number: 0 Size: 0ctime: 0x31a9a574 -- Mon May 27 13:52:04 2001atime: 0x31a21dd1 -- Tue May 21 20:47:29 2001mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 2001dtime: 0x31a9a574 -- Mon May 27 13:52:04 2001BLOCKS:594810 594811 594814 594815 594816 594817………………………………….TOTAL: 38
然後就可以用dump指令恢復檔案:
debugfs:dump <196829> /mnt/hda/01.sav
這樣就把檔恢復出來了。退出debugfs:
debugfs:quit
另一種方法是手工編輯inode:
debugfs:mi <196829>Mode [0100644]User ID [0]Group ID [0]Size [149500]Creation time [0x31a9a574]Modification time [0x31a9a574]Access time [0x31a21dd1]Deletion time [0x31a9a574] 0Link count [0] 1Block count [38]File flags [0x0]Reserved1 [0]File acl [0]Directory acl [0]Fragment address [0]Fragment number [0]Fragment size [0]Direct Block #0 [594810]…………………………….Triple Indirect Block [0]
使用mi指令後每次顯示一行資訊以供編輯,其它行可以直接按回車表示確認,把deletion time改成0(未刪除),Link count改成1。改好後退出debugfs:
debugfs:quit
然後用fsck檢查/dev/hda5
fsck /dev/hda5
程式會說找到丟失的資料塊,放在lost+found裡面。這個目錄裡的檔案就是我們要的東東。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-939874/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- reiserfs檔案系統反刪除(Undelete)操作的實踐(轉)delete
- Linux檔案系統簡介Linux
- ZT:reiserfs檔案系統反刪除(Undelete)操作的實踐delete
- win10系統driverstore檔案怎麼刪除_win10系統刪除driverstore檔案的方法Win10
- AIX刪除檔案系統AI
- Linux 5.12 的 exFAT 檔案系統更快刪除大檔案Linux
- win10系統下刪除tmp檔案的方法Win10
- 主題:Linux檔案系統簡介Linux
- Linux系統中檔案被刪除後的恢復方法(ext4)Linux
- Linux 檔案系統-ext3 檔案系統介紹(轉)Linux
- linux/uninx恢復刪除的檔案<轉>Linux
- 刪除古怪檔案的方法
- linux 刪除含斜槓的檔案的方法Linux
- linux常用叢集檔案系統簡介Linux
- 在Linux系統中如何刪除一個檔案?Linux
- LINUX 使用批量刪除檔案的幾種方法Linux
- Vista反刪除系統更多資訊展示(轉)
- win10系統如何將檔案徹底刪除 win10電腦徹底刪除檔案的方法Win10
- win10系統C盤哪些檔案可以刪除?win10/win7系統刪除c盤無用檔案的方法Win10Win7
- linux系統下檔案誤刪除該如何恢復?Linux
- 在linux及unix系統下批次刪除oracle檔案LinuxOracle
- Linux下批量刪除空檔案或者刪除指定大小的檔案Linux
- 【檔案系統】嵌入式檔案系統Fatfs簡介
- win10系統下自動刪除快取垃圾檔案的方法Win10快取
- 恢復誤刪linux -ext3-ext2 檔案系統檔案的操作方法-轉載Linux
- Linux刪除檔案命令Linux
- Linux批量刪除檔案Linux
- Linux系統管理簡介(轉)Linux
- win10休眠檔案有必要刪除嗎 刪除休眠檔案的方法Win10
- Linux下用rm刪除的檔案的恢復方法Linux
- win10如何刪除系統更新臨時檔案_windows10更新刪除臨時檔案操作方法Win10Windows
- 簡單介紹一下 Linux 檔案系統?Linux
- Linux下刪除昨天的檔案Linux
- linux的刪除檔案命令和強制刪除命令Linux
- Linux下資料檔案刪除檔案系統空間不釋放的問題Linux
- 實戰分析ext2檔案系統下恢復誤刪除檔案(轉)
- win10系統刪除檔案提示檔案正在使用無法刪除如何解決Win10
- 如何刪除win10更新檔案_win10刪除更新檔案的方法Win10