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