這次事件是linux使用者成長的路上一定會失誤或者是不小心犯的錯誤也就是"rm -rf *",話說我們這邊有一位年輕小姐因為放假前太開心不小心下了這條指令,把自己辛辛苦苦寫了兩三個禮拜的程式刪掉了,於是急急忙忙的求救,我在幾年前好像也有遇過一樣的問題,不過那時候是用dd這個指令去把block的空間寫到另一磁區內,不過年代久遠也忘記該怎樣操作,所以就google了一下救回硬碟資料的方法,有很多方法,不過主要的方式就是先找到被刪除檔案的block並利用block的位置來把資料寫回來,我大概試了三個方法提供大家做參考,在執行這些方法的時候有幾個重要的要提醒一下1. 不能重開機 2. 把掛載的硬碟先掛載成只可以讀取(mount -o remount, ro $mountdirectory)。

1. extundelete 這個程式使用方法很簡單(不過要先安裝其他lib,如果有缺啥lib用yum裝起來吧),

#>./configure --prefix=$path

#>make ; make install

安裝好之後,把安裝路徑放到使用者環境裡面

#>extundelete /dev/sde1(這裡是你自己刪掉目錄的掛載點) --restore-all ==>就會把這掛載點下刪除的目錄全部救回來存放到RECOVERED_FILE 裡面,我是在/home下執行

extundelete /dev/sde1 --restore-file chun/share/IJen/plot_code/xxx.dat ==>恢復一個檔案,會存放到/home/RECOVERED_FILE/chun/share/IJen/plot_code/xxx.dat這個位置上

extundelete /dev/sde1 --restore-directory chun/share/IJen/plot_code ==>恢復一個資料夾,會存放到/home/RECOVERED_FILE/chun/share/IJen/plot_code這位置上

這看起來很簡單但是我只救回了一個檔案/data/bk7/RECOVERED_FILES/chun/share/IJen/plot_code/times_ZWT.ncl

其他檔案都給了我相同的error message (Unable to restore inode 189186145 (chun/share/IJen/plot_code/PDF/Aisa_CTL_A1850_FSNSttest.pdf): Space has been reallocated.),所以我只好再去拜google大神

2. http://code.google.com/p/ext3grep/  這支程式,同上也是網路神人的傑作

下載之後安裝(./configure ; make ; make install)。

#ext3grep /dev/sde1 --restore-file  chun/share/IJen/plot_code

會寫入到/home/RESTORED_FILE  並出現sde1.ext3grep.stage1(2),但是可惜的是我並沒有看到sde1.ext3grep.stage2的出現(我也是ext3系統)

所以這篇文章的方法(http://note.tc.edu.tw/159.html)對我而言是沒有用的(個人猜測應該是gilb版本問題)

3. 用內建的debugfs 這個很簡單,而且基本上沒有一些核心問題

#>debugfs /dev/sde1

cd chun/share/IJen/plot_code

ls -d (會把刪掉檔案名稱的block用<>包起來)

dump <xxxxxx> /home/xxxx.dat

這樣就可以復原了

後來我寫了兩個合併使用的shellscript(有需要的可以留言來索取)

1. 指定刪除的路徑2. 還原之後的路徑 3. 關鍵字 4. 掛載點 就可以復原了,雖然用這個debugfs可以復原的檔案好像比較少(約八成~九成)

經過兩天研究,對於硬碟存取的知識好像有比較好一點,不過對於硬碟的inode還有block跟檔案數目還有開機時後磁區變化的關係,好像還是似懂非懂,寫這篇文章主要在紀錄,可能理解上有點主觀,還要請各位看官多多指教。

 

創作者介紹

廖董不懂的部落格

廖董不懂 發表在 痞客邦 留言(0) 人氣()