1. 程式人生 > 實用技巧 >淺談linux系統資料恢復(轉)

淺談linux系統資料恢復(轉)

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

程式設計師的誤操作造成資料丟失,忙著一個星期的專案,就這樣付之東流了。老闆的痛斥、經理的訓斥接踵而來。接下來就是沒休息、加班,甚至忙到凌晨都不能離開那該死的電腦,都有種想屎的感覺呢?

為那些不喜歡備份資料的朋友帶來了福音,我們來談談資料恢復,這裡我們來手把手地教會你如何利用簡單的工具來恢復被你刪除的資料。

工具:hexedit、fdisk

下文內容操作均在root環境下完成。

hexedit:

data recovery 01

在linux上,經常會使用hexedit來修改程式的16進位制程式碼。而fdisk這裡就不介紹了。

現在我們走進磁碟的世界,看看磁碟它對資料做點了什麼吧。

首先,在終端下使用root許可權,來執行下命令:

Command: fdisk -l

data recovery 02

/dev/sdb1是今天的主角,從圖片很清晰地看到一些相關資料,比如磁碟的size,、sector、I/O size等等。

data recovery 03

磁碟格式為ext4,而非MS上的vfat32和NTFS格式,在文章的結尾貼上FAT32的圖片。

第一步:

執行fdisk,使用專家模式,來備份Partition table。

data recovery 04

ext4的partition table非常簡單,一般備份partition table為ext4.img。備份是為了避免數據恢復中被破壞。

第二步:

首先在target sdb1上執行剪下的命令操作,把sdb1上的檔案移動到電腦硬碟上,執行完成後,使用hexedit 來開啟sdb1。

被剪下的檔名:usb.png

Command : hexedit -s /dev/sdb1

data recovery 05

圖片中可以看到檔名和它所在的sector, 是不是發現了圖片的裝置是sdc1?由於磁碟的自動掛載發生了dev的改變,而資料是不會隨著磁碟的dev變化而變化的。這裡已經找到了檔名的所在,接下來,需要找到檔案header。

如何找到檔案頭呢? 可以利用hexedit進行hex search,如果是要著ASCII,可以按下TAB切換到ASCII區域。

data recovery 06

檔案的大小決定了檔案在磁碟中所佔用的sector 數,1 sector==512 bytes。在圖中,顯示了檔案header offset和sector。

提取hex值,寫入檔案。

data recovery 07

恢復後的圖片:

data recovery 08

上看著很簡單吧,它只是單檔案的剪下操作與資料恢復。這裡提醒下各位:磁碟中儲存的資料,不是刪除了可以恢復,被剪下掉的資料一樣可恢復。

下面我們來看看從磁碟刪除資料後,如何來操作呢?

在磁碟上執行delete命令來刪除一個名為1.gif的檔案,操作如下:

data recovery 09data recovery 10data recovery 11

圖片可以看到檔案header到檔案end的sector 的變化,header sector: 264056 , end sector:264057,檔案大小在1K, 圖片很小。

建立個新檔案,然後再執行delete操作,看看磁碟資料變化。

data recovery 12data recovery 13data recovery 14

檔案header sector : 264056, end sector: 264061 , 第一次執行刪除的檔案header sector:264056 ,end sector : 264057, 這樣可以看到第一次刪除的資料被覆蓋掉,而保留了第二此刪除的資料。

這裡操作是對磁碟單一檔案進行資料恢復和其磁碟中的資料變化進行論證。接下來我們來看看雙檔案的操作。

data recovery 15

磁碟中存在兩個不同型別的檔案。

  1. 檔名:partition.zip

  2. 檔名:cab.ico

data recovery 16data recovery 17

第一個檔案的header secotor:264056,end sector:264058

data recovery 18

data recovery 19

第二個檔案header sector:264064,end sector:264076。發現第一個檔案的end sector與第二個檔案的header sector相差多個sector,那麼中間的差值是什麼呢?

data recovery 20

可以看到中間的差值全部以00填充。到這裡我們來總結下這次在linux上的實踐操作:

ext4 file system

執行 剪貼

file name : usb.png sector 67120

file header : sector 264064 file end: sector 264076

執行 刪除

file name : 1.gif sector 67112 (覆蓋)

file header: start : sector 264056 end: sector 264057 (覆蓋)

file name: 56.jpg sector 67112

file header:start: sector 264056 end: sector 264061

當單檔案時,執行刪除時,覆蓋上一次被刪除的資料。

儲存檔案

(1) file name : partition.zip sector 67112

file header: start sector 264056 end sector 264058

(2) file name : cab.ico sector 67112

file header: start sector 264064 end sector: 264068

剪下區:sector 264064

刪除區: sector 264056

儲存區:與刪除區共存

儲存區: 當單檔案時,儲存檔案覆蓋刪除區資料。

資料恢復:當多檔案時,執行刪除時,刪除區保留資料hex,如果建立新檔案資料時,將覆蓋被刪除資料hex。

附圖:

FAT32磁碟格式圖:

data recovery 21data recovery 22data recovery 23

(全文完)


轉載於:https://my.oschina.net/codeaxe/blog/263690