在Windows中當誤刪了文件后,如果只是將其放到回收站中,那么恢復起來是沒有難度的。否則的話,可以借助于R-Studio等工具,可以有效恢復數據,操作起來也很簡單。和Windows不同,Linux中沒有提供回收站,如果使用類似于“rm- rf”之類的命令,將文件刪除后,想將其恢復操作起來就沒有那么簡單了。當然,只要Linux使用的是EXT3文件系統(tǒng),借助于ext3grep等工具,依然可以將消失的文件找回來。
在Linux中常用的文件系統(tǒng)包括 ext2,ext3,Reiserfs以及XFS等,其中的ext2和ext3使用的最為廣泛。我們知道,Linux標準文件系統(tǒng)起始于VFS(Virtual File Sytem,虛擬文件系統(tǒng)),之后發(fā)展到ext和ext2。應該說,ext2是Linux上最為標準的文件系統(tǒng)。ext2文件系統(tǒng)一般由超級塊,塊組描述符和塊組構成,一個數據塊大小可以是1KB到4KB,可以在創(chuàng)建文件系統(tǒng)時指定,否則的話系統(tǒng)會根據分區(qū)大小自動設置塊大小。在文件系統(tǒng)分區(qū)起始的1024字節(jié)存放的是引導程序,之后的1024字節(jié)存放的是超級塊信息,包括一些全局參數,例如塊大小,總塊數,每組的塊數以及每組的inode等。接著塊組描述符單獨占用一個新的塊空間,后面的塊被組織成塊組,用于一種存儲數據。
ext3是一種日志式文件系統(tǒng),是在ext2文件系統(tǒng)基礎上增加一個特殊的inode(日志文件)日志記錄功能,用來記錄文件系統(tǒng)元數據或者各種寫操作的變化。這樣,在磁盤操作事務被實際寫入到磁盤最終位置之前,首先通過日志文件的記錄功能,順序的記錄了文件系統(tǒng)的各種寫操作和元數據的變化信息。簡單介紹了ext3文件系統(tǒng)的特點,下面就來說明如何在其中恢復誤刪的文件。首先需要下載安裝ext3grep這款軟件,下載地址: http://www.filewatcher.com/m/ext3grep-0.10.1.tar.gz.230939-0.html。執(zhí)行“tar zxvf ext3grep-0.10.1.tar.gz”,“cd ext3grep-0.10.1”,“make”,“make install”等 命令,完成該工具的安裝操作。之后運行“ext3grep”命令,如果顯示其參數信息,說明安裝成功。此外,還需要e2fsprogs程序的支持,在linux中已經內置有該程序,執(zhí)行“rpm –qa|grep e2fsprocgs”命令,可以查看其安裝信息。
配置好工具之后,就可以實際恢復數據了。這里為了便于說明,我們創(chuàng)建了一個虛擬的磁盤分區(qū),之后在其上測試文件恢復效果,在實際操作時,可以在真實的分區(qū)上進行。執(zhí)行“cd /data”命令,進入“data”目錄。執(zhí)行“dd if=/dev/zero of=datadisk count=1024000”命令,創(chuàng)建一個體積為524Mbde 名為“data-disk”的空文件。其中的“DD”命令的作用是用指定大小的塊拷貝一個文件,并在拷貝的同時進行指定的轉換。“if =dev/zero”參數作用是從一個文件讀取讀取,這里的文件是名為“dev/zero”的輸入設備,主要用來初始化文件。該設備無窮盡地提供0。這樣該“data-disk”文件被填滿了0字節(jié),在“count”參數指名讀取的塊數。在使用該空文件掛載虛擬磁盤之前,必須在其上建立一個文件系統(tǒng)。
執(zhí)行“mkfs.ext3 –q data-disk”命令,將“datadisk”這個空文件格式化為ext3虛擬磁盤分區(qū),“mkfs.ext3”命令的作用是將指定的設備或者磁盤分區(qū)構造為ext3文件系統(tǒng)。其中的“-q”參數可以省略有關新建文件系統(tǒng)的提示信息。這樣,在“datadisk”文件就包含了一個新建立的ext3文件系統(tǒng),如同一個剛剛被初始化的磁盤。執(zhí)行“mkdir /tmp/virtual-fs”命令,創(chuàng)建名為“/tmp/virtualfs”的目錄,執(zhí)行“mount–o loop=/dev/loop0 /data/data-disk /tmp/virtual-fs”命令,將上述虛擬磁盤分區(qū)“/data/data-disk”掛載到“/tmp/virtual-fs”目錄中,其中的“mount”命令用來掛載設備,其中的“l(fā)oop=/dev/loop0”參數表示使用一個環(huán)回設備掛載上述文件系統(tǒng),使用“-o”參數通知Mount命令使用何種回環(huán)設備。執(zhí)行“df–h /tmp/virtual-fs”命令,您就可以如同使用其它磁盤一樣使用該虛擬磁盤了。
接下來,就可以向該虛擬磁盤中復制文件了。例如執(zhí) 行“cp /etc/hosts /tmp/virtual-fs”,“cp /var/file.c/tmp/virtual-fs”等,在該虛擬磁盤中存儲一些文件。之后執(zhí)行“cd/tmp/virtual-fs”命令進入該虛擬磁盤,執(zhí)行“rm–rf ./*”命令,將其中的文件全部刪除。執(zhí)行“l(fā)s”命令,可以看到其中空空如也。對應的,執(zhí)行“unmount /tmp/virtualfs”命令,可以卸載該虛擬磁盤。然后就可以讓ext3grep程序來大顯身手,找回消失的文件。執(zhí)行“ext3grep /tmp/virtualfs --ls –inode 2”命令,使用ext3grep命令對該虛擬磁盤進行掃描,在掃描報告中可以看到所有可以恢復的文件信息,包括文件名稱,刪除時間,訪問權限等參數。
根據這些信息,選擇需要恢復的文件,例如執(zhí)行“ext3grep /tmp/virtual-fs–restore-file file.c”命令,執(zhí)行恢復操作,在“–restorefile”參數后面跟隨需要恢復的文件名。當恢復完畢后,ext3grep會在當前路徑中創(chuàng)建名為“RESTORED_FILES”的目錄。用來存儲恢復后的文件。當然,也可以執(zhí)行“ext3grep/tmp/virtual-fs –restoreall”命令。來恢復該虛擬磁盤中的所有被刪除的文件。當然,使用ext3grep恢復文件是有條件的,就是被刪除的文件沒有被其它文件覆蓋,否則的話,ext3grep就無能為力了。為了能夠順利恢復數據,一旦誤刪了文件,就應該立即卸載文件所在的磁盤分區(qū),停止在其上的所有讀寫操作,避免被刪文件被新的數據塊覆蓋。
例如,當您發(fā)現(xiàn)你誤刪除了文件后,首先要卸載被誤刪除文件所在的分區(qū),或者以只讀的方式來掛載該分區(qū)。因為文件被刪除后,其數據還存在磁盤上,執(zhí)行以上操作的好處在于盡量降低數據塊中數據被覆蓋的風險,以提高恢復數據成功率。如果被誤刪的文件在根分區(qū),那么最好重啟計算機,進入單用戶模式。方法是啟動系統(tǒng),在Grub引導下啟動后,在Grub的引導菜單中用上下健選中所要啟動的Linux系統(tǒng),按按下“e”鍵進入編輯模式。之后再選中系統(tǒng)的啟動內核項(例如“kernel(hd0,0)/boot/vmlinuz or root=/dev/hda1”等),點擊“e”鍵,在“grub>”提示符(例如“grub>kernel (hd0,0)/boot/vmlinuz or root=/dev/hda1”)的“hda1”后空一格,輸入init 1(或者輸入“single”),設定單用戶模式,點擊回車鍵返回前一頁面,然后點擊“b”鍵啟動系統(tǒng),就可以進入單用戶模式。
進入單用戶模式后,根分區(qū)還是以讀寫方式加載的,執(zhí)行“mount -o ro,remount/ ”命令,把掛載方式由讀寫(rw)改為只讀(ro)。如果被刪除的文件不是根分區(qū),也可以使用unmount命令該其卸載。例如,假設文件在“/dev/sda3”分區(qū)中,該分區(qū)掛載到“/home”目錄,可以執(zhí)行“umount/dev/sda3”或者“umount /home”執(zhí)行卸載操作。當然,在卸載前要保證沒有程序在訪問該分區(qū),否則卸載會失敗,因此最好進入單用戶模式來恢復文件。在實際的文件恢復操作時,當發(fā)現(xiàn)誤刪文件后,需要先載對應的分區(qū),然后進入單用戶模式進行恢復,這對于根分區(qū)中誤刪文件的恢復比較有利。為了便于使用,可以在別的電腦上編譯和安裝好ext3grep工具,然后將“/usr/local/bin”目錄下的ext3grep可執(zhí)行文件拷貝到優(yōu)盤中,因為ext3grep無需動態(tài)加載庫支持就可以獨立運行。將該優(yōu)盤插到待恢復的電腦上,執(zhí)行“mount -t vfat /dev/sdb1/mnt”之類的命令,掛載優(yōu)盤設備。
因為ext3grep程序會在當前目錄下創(chuàng)建名為“RESTORED_FILES”的目錄來存放被恢復的文件。因此在運行ext3grep命令前,先要切換到一個可以讀寫的目錄中。如果進入了單用戶模式,并且將根分區(qū)設成了只讀,那么可以將恢復出來的文件放在優(yōu)盤中。執(zhí)行“cd /mnt”命令進入優(yōu)盤根目錄,之后按照上述操作方式,就可以恢復文件了。例如執(zhí)要恢復“/dev/sda3”分區(qū)上文件,該分區(qū)安裝點是“/home”目錄,需要恢復“/home/user1/vi/tips.xml”文件,則執(zhí)行“ext3grep /dev/sda3 --restore-file easwy/user1/tips.xml”命令即可。如果您無法記起誤刪的文件名或者誤刪除的是目錄的話,可以執(zhí)行“ext3grep /dev/sda3 --dump-names | tee filename.txt”命令。來查詢可以恢復的所有文件信息,并將ext3grep命令的輸出記錄保存到“filename.txt”文件中,通過查看該文件,可以確定需要恢復的目標。