1. 論“備份”的重要性
今天手真快,Tab補全文件名後回車,昨天一天寫的代碼就被我remove了。雖然自己寫了腳本備份系統和home目錄,但系統是1天一備份,home是2天一次增量備份。又恰巧昨晚沒有備份home,並且git也沒有提交,欲哭無淚的感覺5555~~。
被remove掉的文件其實是可以恢復的,刪除命令只是在文件節點中作了刪除標記,並不是真正清空內容,但是其他用戶和一些有寫盤動作的進程會很快覆蓋這些數據。所以要想恢復磁盤信息,必須馬上停止任何寫磁盤操作。
我是將整個磁盤卸載下來,用轉接線掛到同學筆記本上才恢復成功的,下面將介紹具體的恢復過程。
2. 恢復工具介紹
針對Linux下的EXT文件系統來說,常用的誤刪恢復工具有debugfs
、ext3grep
、extundelete
等等。extundelete
是一個開源的數據恢復工具,支持ext3、ext4文件系統。
我的系統是Ubuntu15.04,文件系統是ext4。嘗試了debugfs來恢復,但沒有成功。如果文件系統不是ext4的同學可以嘗試下該方式,這裏有篇參考文檔。
3. extundelete恢復文件
安裝extundelete
sudo apt-get install extundelete
任何的文件恢復工具,在使用前,均要將要恢復的分區卸載或掛載爲只讀,防止數據被覆蓋使用。
umount /dev/sdb2 mount -o remount,ro /dev/sdb2
如果刪的文件和操作系統是在同一個分區上,就只有把硬盤卸下來,掛載到另一臺主機上。我就是這麼幹的^_^。
在另一臺主機上用
df -h
查看掛載分區。我的分區是/dev/sdb2
。在該主機上執行:
extundelete /dev/sdb2 --restore-file /home/zhangchengfei/server.scala
extundelete
執行完畢後在當前目錄生產一個RECOVERED_FILES
目錄,裏面即是恢復出來的文件。如果想恢復某個文件夾的內容,可以使用下面命令:
extundelete /dev/sdb2 --restore-directory /hom/zhangchengfei/tmp
關於
extundelete
更多的使用細節,可以用extundelete -h
進行查看,本文不再敘述。
4. 總結經驗
其實良好的備份和同步習慣纔是最重要的,絕對比恢復數據要更簡單。常見的備份策略有tar,rsync,git等等。爲了防止以後rm
誤刪數據,還有種做法是自己重新定義rm
,每次不是直接刪除文件或文件夾,而是將它們move到你指定的一個目錄下存放。具體的實現可以上google搜索。
看這篇博客的朋友一定是遇到和我一樣的窘境,祝好運O(∩_∩)O~~
【完】