現(xiàn)網(wǎng)一臺(tái)suse主機(jī),被同事不小心干掉了一個(gè)文件。不過(guò)在用想通過(guò)ext3grep或extundelete這類(lèi)工具進(jìn)行恢復(fù)時(shí),發(fā)現(xiàn)在編譯過(guò)程中,總是提示“configure: Error: can’t find ext2fs library”。因?yàn)樵趕use源里沒(méi)有e2fsprogs-devel、e2fsprogs-libs包,在通過(guò)源碼安裝e2fsprogs后,發(fā)現(xiàn)還是有該問(wèn)題。而redhat上不存在該問(wèn)題,redhat可以直接通過(guò)下面的命令安裝依賴(lài):
yum install e2fsprogs e2fsprogs-libs e2fsprogs-devel
注:無(wú)論ext3grep還是extundelete,都需要依賴(lài)和底層文件系統(tǒng)相關(guān)的包e2fsprogs e2fsprogs-libs e2fsprogs-devel 。
先說(shuō)下Linux上的文件刪除rm,實(shí)際上 rm 文件并未從磁盤(pán)上清理,只是將其所在的塊(inode)進(jìn)行了重新標(biāo)記,標(biāo)記為可擦除可寫(xiě)。而數(shù)據(jù)恢復(fù)軟件就是讀取到這些inode,再?gòu)亩謴?fù)相應(yīng)的數(shù)據(jù)(前提是未被其他數(shù)據(jù)覆寫(xiě)的情況下)。
在LINUX在有一個(gè)按數(shù)據(jù)塊進(jìn)行讀取備份的工具dd,既然dd是按數(shù)據(jù)庫(kù)讀取備份的,那其在他數(shù)據(jù)盤(pán)或分區(qū)上還原時(shí),也會(huì)把 rm 刪除的數(shù)據(jù)塊同樣寫(xiě)過(guò)去。在另一臺(tái)可以正常安裝恢復(fù)軟件的主機(jī)上,通過(guò)相應(yīng)的恢復(fù)軟件掃描就可以恢復(fù)數(shù)據(jù)了。
點(diǎn)擊下載“嗨格式數(shù)據(jù)恢復(fù)大師”;
源主機(jī):SUSE被刪除數(shù)據(jù)主機(jī)(/dev/sda6)
目標(biāo)機(jī):redhat主機(jī)(/dev/sda2)
注意,這里有一個(gè)要求,目標(biāo)主機(jī)的/sda2空間一定要大于或等于sda6。新老主機(jī)上分區(qū)格式要一致,要同為ext3 或 ext4
# 老主機(jī)上 dd if=/dev/sda6 | gzip -9 > /mnt/tmpback.img.gz # 新主機(jī)上 mkfs.ext3 /dev/sda2 zcat /tmp/tmpback.img.gz | dd of=/dev/sda2 extundelete /dev/sda2 --inode 2
上面在備份的時(shí)候使用了gzip進(jìn)行最高級(jí)別的壓縮,由于 dd和gzip都只能使用單核資源,所以操作會(huì)比較慢,如果空間足夠,新老主機(jī)之間網(wǎng)絡(luò)傳輸又快的,可以直接 dd if=/dev/sda6 of=/opt/tmpbackup.dd 不壓縮備份,備份出的大小會(huì)和原來(lái)的磁盤(pán)分區(qū)大小一樣大。
恢復(fù)單個(gè)文件,會(huì)在當(dāng)前目錄下生成一個(gè)RECOVERED_FILES目錄,里面保存已經(jīng)恢復(fù)的文件: extundelete /dev/sda2 --restore-file passwd 根據(jù)inode進(jìn)行恢復(fù) extundelete /dev/sda2 --restore-inode 恢復(fù)單個(gè)目錄: extundelete /dev/sda2 --restore-directory /mongodb 恢復(fù)所有誤刪文件: extundelete /dev/sda2 --restore-all
extundelete還可以實(shí)現(xiàn)恢復(fù)某個(gè)時(shí)間段的數(shù)據(jù)。可以通過(guò)“–after”和“–before”參數(shù)實(shí)現(xiàn)!
查詢(xún)需要恢復(fù)的數(shù)據(jù)信息: # ext3grep /mydata/disk1 --ls --inode 2 恢復(fù)單個(gè)文件 # ext3grep /mydata/disk1 --restore-file ext3grep.txt 根據(jù)inode恢復(fù) # ext3grep /mydata/disk1 --restore-inode 12 恢復(fù)所有文件 # ext3grep /mydata/disk1 --restore-all
extundelete:掃描inode和恢復(fù)數(shù)據(jù)同時(shí)進(jìn)行,因此恢復(fù)速度很快。支持單個(gè)文件,單個(gè)目錄和完整磁盤(pán)恢復(fù);
ex3grep:只能恢復(fù)ex3的數(shù)據(jù),不支持目錄恢復(fù)和時(shí)間恢復(fù)。
dd備份出來(lái)再在其他主機(jī)上恢復(fù)還有一個(gè)好處,即使在恢復(fù)過(guò)程中有不當(dāng)操作,我們?nèi)员A粢环菰磾?shù)據(jù),依然可以通過(guò)還原后,再用其他工具掃描。
特別需要注意的一點(diǎn):一但主機(jī)發(fā)生意外刪除的,一定要先將當(dāng)前分區(qū)置為只讀,如: mount -o remount,ro /tmp 。