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