ubuntu誤刪文件時恢復操作,debugfs和extundelete,

rm誤刪

rm不小心刪除了一個文件個c文件,關鍵這個文件我寫了一個下午了,然而手賤誤rm掉了,現在我很厭惡rm命令,這個鬼東西。。。

解決方法:

1.0 debugfs

對於ext2文件,可以使用debugfs命令工具,然而我的ubutnu是ext4,現在新版本的ubuntu幾乎都是ext4。當然你可以嘗試用debugfs工具和dd工具去恢復文件,可以恢復,然而亂碼。。。。。。本來恢復的結果這個樣子:

所以顯然是不行的。這裏給與一個參考鏈接,對於剛好你是ext2文件系統類型的https://www.cnblogs.com/logchen/p/10268033.html

2.0 extundelete

這個適用於ext3和ext4這兩種,但是ext3也有他特有方法工具,我是ext4也就不感興趣了,這裏可以使用extundelete這個工具,這個工具的源代碼位於:https://sourceforge.net/projects/extundelete/
我們安裝的時候可以選擇下載源代碼後手動安裝,當然可以apt install extundelete輕易解決。我這裏使用源碼安裝,使用這個工具有一些依賴包和工具,gcc,e2fslibs-dev,一次執行:./configure   ---> make ---> make install 

但是在make遇到問題 ,居然報錯error,是代碼的問題,在源碼網站有解決方法,鏈接爲:https://sourceforge.net/p/extundelete/tickets/5/

方法爲:

--- a/src/insertionops.cc	2012-12-30 18:23:32.000000000 +0100
+++ b/src/insertionops.cc	2018-05-07 22:58:13.065868723 +0200
@@ -33,7 +33,7 @@
   os << "File flags: " << inode.i_flags << std::endl;
   os << "File version (for NFS): " << inode.i_generation << std::endl;
   os << "File ACL: " << inode.i_file_acl << std::endl;
-  os << "Directory ACL: " << inode.i_dir_acl << std::endl;
+  os << "Directory ACL: " << inode.i_size_high << std::endl;
   os << "Fragment address: " << inode.i_faddr << std::endl;
   os << "Direct blocks: ";
   for (int n = 0; n < EXT2_NDIR_BLOCKS; n++)

-爲刪除該行,+爲添加的行,修改文件位於 extundelete源代碼的src目錄下的insertionops.cc。報錯的原因是因爲版本的不符。

extundelte恢復文件的具體操作鏈接爲:https://blog.51cto.com/13641879/2105853

經過另外的實踐確實可以恢復文件,但是對我刪除的文件卻不能操作,具體原因爲:我在安裝ubuntu時只劃分了一個設備。。。也即是隻有/dev/sda1,掛載在根目錄,使用extundelete時需要umount,是無法對根目錄umout,假設可以,你的用戶也無法操作了啊。所以這個時候有一個新的設備真的重要,我增加了新的磁盤設備,並掛載到某個目錄,在這個目錄進行的工程文件如果不小心刪除了,就依然可以使用extundelete找回了。

這裏的磁盤2是新增加的,這個時候我開始意思到多個設備的重要性了。。。。。。。。。一晚上的拼命尋找方法,但是我的文件還是找不回來了,嗚呼。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

安全版本的rm

網上有很多安全版本的rm版本,有些人自己寫腳本並裝到自己的linux,然後有一個新的命令用於安全文件,可以找回原理的文件,就類似window刪除文件會回到垃圾桶一樣,但是linux雖然有垃圾桶,但不是收所有刪除的東西。

總結:

慎用 rm 命令!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章