大家都知道,在linux系統中是沒有回收站的概念的,一旦rm命令刪除某個文件之後,就找不回來。不過其實這時還是有救的,之前大概清楚個概念,知道有救,但如何救就沒怎麼詳細去了解了。那麼這次我們來實際操作下。
其實為什麼說還有救呢?說這個之前需要對ext3文件系統有個大概的了解。
在ext3文件系統中我們創建一個文件時,它首先會在ext3文件系統的inode表申請個inode號,然後再將文件的信息以及數據寫入。那麼inode號又是什麼呢?
inode號裡面包括兩部分,一個是metadata,即是元數據,簡單理解就是這個文件的文件名,大小,權限,訪問時間等等,也就是除了這個文件的內容數據之外的信息。
如圖,創建了一個新文件“testfile”,我們可以用stat命令來查看它的信息;
另一個是一個 pointer 指針。該指針指向真正的數據存放的block數據區。所以通常在我們查看一個文件內容時,我們通過文件名找到對應的inode號,然後再通過這個inode號裡面的指針,再找到真正的數據。
而一個文件對應一個inode號,無論文件小到1,2K還是大到1,2GB都一樣。在我們創建文件系統時,就會自動創建inode表,我們的inode號也就屬於,來自於這個inode表。當然默認的inode表也是有大小的。達到了默認的上限值後,我們就無法創建文件咯。
我們可以通過“df -i”這個命令去查看,每個文件系統的inode的使用情況。通常按照默認的劃分都夠用了。當然如果你的服務器專門處理些小郵件,小文件的,你可以適當調整inode表的大小,讓它更大一些。
如圖,我們可以看到各文件系統的inode的總數量,以及使用了多少,剩余多少,以及占用的百分比;
那麼當我們執行命令,“rm -f testfile” 時,這時其實刪除的只是對應這個文件的文件名與其inode的關聯,數據其實還在,同時這個文件之前所占用的inode號被標記為可用狀態,所以這個使用就不要再創建新的文件了,也就是對這個文件系統不要做任何動作,我想這個大家也都清楚。因為如果再創建新的文件,在ext3文件系統中,新的文件會復用之前被標記為可用狀態的inode號,而這時你的數據也就岌岌可危了。
如上圖,test文件inode號為98315,而刪除之後,再建立個新的文件,它的inode號使用了之前空余出的相同的inode號。當然這個在不同文件系統是不同的,例如在RedHat的GFS文件系統中,被刪的文件的inode號是會保留下來的,新的文件會用新的inode號。當然在GFS中也可以通過命令的形式去清空無效被刪的inode號,將其還原成可被用的狀態。