歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

reiserfs文件系統反刪除(Undelete)操作的實踐

  reiserfs文件系統反刪除(Undelete)操作的實踐 一、關於Linux的文件系統(Filesystem) 請參考: 《Linux 文件系統概述》 二、reiserfs 文件系統是否支持undelete操作來恢復數據; 一般刪除數據有兩種情況,一種是通過rm 命令來刪除的;另一種是通過格式化銷毀數據的,在reiserfs 文件系統中,恢復這兩種誤操作而引起的數據損失的情況還是有點區別; 1、由於誤操作rm 刪除命令而造成數據的丟失的恢復情況; 通過實踐來看,通過rm 刪除數據,我們能通過reiserfs的修復檢測工具來恢復,如果存儲設備沒有任何問題,或者文件系統沒有壞塊(bad block)的情況下是百分之百的恢復; 2、由於格式化硬盤所帶來的數據損失的恢復情況; 我測試了格式化存儲備來測試恢復reiserfs 文件系統所丟失的數據,我是在移動硬盤上做的實踐;比如我的移動硬盤上只有一分區,並且是基於reiserfs 文件系統的;我存放了一百多M的數據,然後再用mkreiserfs或mkfs.reiserfs 工具來格式化這個硬盤分區。如果這時我們發現重建了硬盤分區的文件系統是誤操作。這時想通過reiserfs的修復工具來修復,能挽回大多數數據;但並不是百分百,有時也會是百分百的成功,就看你的運氣了; 如果我是把這有reiserfs 文件系統的分區,格式化為其它的文件系統了,這時如果發現是誤操作,成功幾率就極低了;或者說大多是不能成功; 如果我們把硬盤的分區表也重建了,如果這時再想起是誤操作,恢復的reiserfs文件系統的可能性也是極低的,或者說想通過reiserfs 文件系統工具的恢復成功率為零;但有時或多或少也能恢復出一點,或者恢復的是很久很久以前的數據。呵,這事是有點怪; 如果您是由於重新分區導致的數據損失,首先可能您要恢復分區表到以前狀態,可能Windows中有這方面的工具;在Linux系統下也應該有這樣的工具,但都是商業的。Windows中好的數據恢復工具也應該是商業性的。 3、在reiserfs 文件系統中,undelete恢復數據情況的約定; 我們前面已經說過了,由於rm 指令的誤操作而引起的數據損失,是能恢復大多數,或百分之百,也就是第一種情況;另外如果原來的硬盤分區是reiserfs 的,由於您誤操作使用 mkreiserfs 或mkfs.reiserfs 格式化致使數據的損失也應該劃在這個約定之內,也是可以恢復大多數數據,但這種情況應該比較少; 三、reiserfs 文件系統恢復數據流程; 1、准備修復盤和大容量存儲設備; 1)支持reiserfs 文件系統的livecd 或系統修復盤; 如果您用的是移動存儲,是reiserfs文件系統上的損失,您就直接用您當前用的linux系統就能修復,但得支持reiserfs 文件系統才行。呵,這不是廢話嗎?不支持reiserfs 文件系統的Linux,我的移動硬盤用reiserfs 有什麼用。 livecd 是最好的,只要支持reiserfs文件系統的livecd 就OK;另外我發現slackware 安裝盤中的第一張是也是可以用;當然不排除其它發行版的安裝盤和修復盤,只要能用就行; 2)存儲設備; 比如您損失數據的硬盤分區是 9G,所以您得找個最少得找個未使用空間是10G的硬盤(或硬盤分區)吧;否則怎麼能容得下數據損失的鏡像呢?所以最好找一個大容量的硬盤或硬盤分區做准備; 如果您只是在幾百M的移動硬盤上的損失,是不是找個地方就容下了;這種情況就好辦多了; 2、恢復數據的過程; 1)用livecd 開機進入系統,或者用修復盤進入系統; livecd 比較好辦,他本來就是一個在光盤上運行的系統;您可以找一個發行版本下載; 請到: http://www.frozentech.com/content/livecd.PHP 可以選擇slax 或 Knoppix ; 您也可以用slackware的第一張盤,一路enter後,就出現 bash# 字樣,這樣就OK了;當然您也可以把硬盤掛在有Linux的機器上來恢復,總之方法多的是;我們無非是借助一個支持reiserfs 文件系統的Linux系統來恢復數據,這個道理我們應該理解;


2)用dd 工具來做硬盤分區的鏡像; 為什麼數據損失的硬盤分區的鏡像,能不能直接修復?直接修復也是可以的,但如果出現錯誤,恢復數據的可能性就很低了。除非我們能保證損失數據的硬盤分區沒有任何bad block ,或者在此硬盤分區上沒有任何物理和邏輯壞道;另外我們還要確保百分之百不會再次操作失誤;所以對硬盤分區鏡像是極為重要的,也就是說用鏡像盤來恢復數據,以保證原有數據的安全性和可靠性; 還有一點值得一說的是,請不要掛載有數據損失的硬盤分區,也不要再次向其寫入數據;否則恢復數據的成功率會降低;查看是否有自動掛載分區,請用df -h 來查看;如果發現已經掛載了,就用 umount 卸載; 我們要弄明白是哪個分區的數據損失了,您可以用fdisk -l 來查看分區表;比如我十分明確的認為 /dev/sda1 的數據損失了;這時我們就要做/dev/sda1的鏡像; 然後我們得准備一個有空間的分區,是linux的文件系統的,比如ext3或reiserfs都行;只是為了保存dd出來的分區鏡像;我們用mount 來掛載用來存儲鏡像文件的分區;這在准備工作中已經提到了;比如我想用 文件系統為reiserfs 的硬盤分區/dev/hda8來存放/dev/sda1的鏡像,那就掛載/dev/hda8; bash# mkdir hda8 注:創建一個目錄 bash# mount -t reiserfs /dev/hda8 hda8 注:把/dev/hda8 掛載到hda8目錄上; bash# df -h 注:查看/dev/hda8是否掛載上了; bash# cd hda8 注:進入hda8目錄; bash# dd if=/dev/sda1 conv=noerror > sda1.img 注:做 /dev/sda1 的整個分區的鏡像; 3)通過reiserfsck或fsck.reiserfs 鏡像來恢復數據; bash# losetup -f 注:查詢哪個loop設備是空的; /dev/loop0 注:發現有一個空的是/dev/loop0 ; bash# losetup /dev/loop0 sda1.img 注:把sda1.img 鏡象關聯到/dev/loop0的設備中; bash# reiserfsck --rebuild-tree -S -l undelete.log /dev/loop0 注:通過reiserfsck 來修復,-S 表示整個分區,-l 後面是接日志輸出,最後是/dev/loop0設備;因為我們前面把sda1.img 關聯到了/dev/loop0設備中,這樣/dev/loop0就擁有了sda1.img的所有屬性;這和直接通過下面命令修復的效果是一樣的;但這樣通過鏡像裝載修復的方法主要是為了安全; bash# reiserfsck --rebuild-tree -S -l undelete.log /dev/sda1 注:這樣直接操作也行,如果 /dev/sda1上有bad block就麻煩了;可能會損傷到/dev/sda1 數據的安全,明白了吧; 然後會出現類似如下的提示: reiserfsck 3.6.19 (2003 www.namesys.com) ************************************************************* ** Do not run the program with --rebuild-tree unless ** ** something is broken and MAKE A BACKUP before using it. ** ** If you have bad sectors on a drive it is usually a bad ** ** idea to continue using it. Then you probably should get ** ** a working hard drive, copy the file system from the bad ** ** drive to the good one -- dd_rescue is a good tool for ** ** that -- and only then run this program. ** ** If you are using the latest reiserfsprogs and it fails ** ** please email bug reports to [email protected], ** ** providing as mUCh information as possible -- your ** ** hardware, kernel, patches, settings, all reiserfsck ** ** messages (including version), the reiserfsck logfile, ** ** check the syslog file for any related information. ** ** If you would like advice on using this program, support **

** is available for  $25 at www.namesys.com/support.Html. ** ************************************************************* Will rebuild the filesystem (/dev/loop0) tree Will put log info to 'undelete.log' Do you want to run this program?[N/Yes] (note need to type Yes if you do): Yes 注:請輸入Yes,這樣就進行修復了; 詳細情況如下: Replaying journal.. Reiserfs journal '/dev/loop0' in blocks [18..8211]: 0 transactions replayed ########### reiserfsck --rebuild-tree started at Thu Dec 1 21:01:53 2005 ########### Pass 0: The whole partition (251984 blocks) is to be scanned Skipping 8218 blocks (super block, journal, bitmaps) 243766 blocks will be read 0%....20%....40%....60%....80%....100% left 0, 6588 /sec "r5" hash is selected Flushing..finished Read blocks (but not data blocks) 243766 Leaves among those 56 Objectids found 77 Pass 1 (will try to insert 56 leaves): Looking for allocable blocks .. finished 0%....20%....40%....60%....80%....100% left 0, 56 /sec Flushing..finished 56 leaves read 45 inserted 11 not inserted non-unique pointers in indirect items (zeroed) 633 Pass 2: 0%....20%....40%....60%....80%....100% left 0, 0 /sec Flushing..finished Leaves inserted item by item 11 Pass 3 (semantic): Flushing..finished Files found: 42 Directories found: 12 Pass 3a (looking for lost dir/files): Looking for lost directories: Looking for lost files:0 /sec Flushing..finished 48, 0 /sec Objects without names 16 Dirs linked to /lost+found: 1 Files linked to /lost+found 15 Pass 4 - finished done 44, 0 /sec Flushing..finished Syncing..finished ########### reiserfsck finished at Thu Dec 1 21:02:31 2005 ########### 4)掛載loop 設備,查看數據恢復情況; bash# mkdir recoversda1 注:創建一個目錄; bash# mount /dev/loop0 recoversda1 注:把/dev/loop0掛載到 recoversda1 上; bash# more undelete.log 注:查看恢復日志; bash# cd recoversda1 注:進入recoversda1目錄查看數據恢復情況; 一般的情況下,如果您是rm 刪除的東西,大多會百分之百的恢復了,有些內容可能會恢復到lost+found的目錄中,要通過恢復日志來對比查看; 如果您認為您的數據恢復的差不多了,這時就可以把損失數據的硬盤分區掛載上,然後拷貝已經恢復的數據過去;

bash# cd .. 注:從 recoversda1 退出,返回上級目錄; bash# mkdir sda1 注:創建sda1目錄; bash# mount /dev/sda1 sda1 注:掛載 /dev/sda1 到sda1目錄上; 下面的就是從recoversda1目錄中,把已經恢復的數據復制到數據損失的硬盤分區上;這個工作就簡單了吧;cp命令應該會用吧,如果真的不會,那我也沒有辦法了,看來你和我的水平真的差不多;哈哈。。。。 5)恢復好數據的掃尾工作; 要正常卸載一系列掛載的盤; bash# umount /dev/hda8 bash# umount /dev/sda1 bash# umount /dev/loop1 bash# losetup -d /dev/loop0 ... ... 如果出現設備忙的提示,可能是您正處於掛載目錄中;退出就好了; 四、關於本文; 這篇實踐文檔是根據洋人提供的方法實踐而來,如果您認為北南在抄襲,那您也一樣可以抄襲; 五、參考文檔; http://www.martian.org/marty/archives/000888.html http://marc.theaimsgroup.com/?l= ... 61318421306&w=2 http://www.antrix.net/journal/te ... recovery_howto.html 六、相關文檔; 《有關ext2文件系統下反刪除(Undelete)操作恢復數據的文檔》 《Linux 文件系統概述》



Flushing..finished Syncing..finished ########### reiserfsck finished at Thu Dec 1 21:02:31 2005 ########### 4)掛載loop 設備,查看數據恢復情況; bash# mkdir recoversda1 注:創建一個目錄; bash# mount /dev/loop0 recoversda1 注:把/dev/loop0掛載到 recoversda1 上; bash# more undelete.log 注:查看恢復日志; bash# cd recoversda1 注:進入recoversda1目錄查看數據恢復情況; 一般的情況下,如果您是rm 刪除的東西,大多會百分之百的恢復了,有些內容可能會恢復到lost+found的目錄中,要通過恢復日志來對比查看; 如果您認為您的數據恢復的差不多了,這時就可以把損失數據的硬盤分區掛載上,然後拷貝已經恢復的數據過去; bash# cd .. 注:從 recoversda1 退出,返回上級目錄; bash# mkdir sda1 注:創建sda1目錄; bash# mount /dev/sda1 sda1 注:掛載 /dev/sda1 到sda1目錄上; 下面的就是從recoversda1目錄中,把已經恢復的數據復制到數據損失的硬盤分區上;這個工作就簡單了吧;cp命令應該會用吧,如果真的不會,那我也沒有辦法了,看來你和我的水平真的差不多;哈哈。。。。 5)恢復好數據的掃尾工作; 要正常卸載一系列掛載的盤; bash# umount /dev/hda8 bash# umount /dev/sda1 bash# umount /dev/loop1 bash# losetup -d /dev/loop0 ... ... 如果出現設備忙的提示,可能是您正處於掛載目錄中;退出就好了; 四、關於本文; 這篇實踐文檔是根據洋人提供的方法實踐而來,如果您認為北南在抄襲,那您也一樣可以抄襲; 五、參考文檔; http://www.martian.org/marty/archives/000888.html http://marc.theaimsgroup.com/?l= ... 61318421306&w=2 http://www.antrix.net/journal/te ... recovery_howto.html 六、相關文檔; 《有關ext2文件系統下反刪除(Undelete)操作恢復數據的文檔》 《Linux 文件系統概述》



Copyright © Linux教程網 All Rights Reserved