linux檔案系統之Inode
阿新 • • 發佈:2019-01-24
檔名 -> inode -> device block
轉自:
http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html
一、inode是什麼?
理解inode,要從檔案儲存說起。 檔案儲存在硬碟上,硬碟的最小儲存單位叫做"扇區"(Sector)。每個扇區儲存512位元組(相當於0.5KB)。 作業系統讀取硬碟的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是檔案存取的最小單位。"塊"的大小,最常見的是4KB,即連續八個 sector組成一個 block。 檔案資料都儲存在"塊"中,那麼很顯然,我們還必須找到一個地方儲存檔案的元資訊,比如檔案的建立者、檔案的建立日期、檔案的大小等等。這種儲存檔案元資訊的區域就叫做inode,中文譯名為"索引節點"。 二、inode的內容 inode包含檔案的元資訊,具體來說有以下內容: * 檔案的位元組數 * 檔案擁有者的User ID * 檔案的Group ID * 檔案的讀、寫、執行許可權 * 檔案的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間。 * 連結數,即有多少檔名指向這個inode * 檔案資料block的位置 可以用stat命令,檢視某個檔案的inode資訊: stat example.txt 總之,除了檔名以外的所有檔案資訊,都存在inode之中。至於為什麼沒有檔名,下文會有詳細解釋。 三、inode的大小 inode也會消耗硬碟空間,所以硬碟格式化的時候,作業系統自動將硬碟分成兩個區域。一個是資料區,存放檔案資料;另一個是inode區(inode table),存放inode所包含的資訊。 每個inode節點的大小,一般是128位元組或256位元組。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設定一個inode。假定在一塊1GB的硬碟中,每個inode節點的大小為128位元組,每1KB就設定一個inode,那麼inode table的大小就會達到128MB,佔整塊硬碟的12.8%。 檢視每個硬碟分割槽的inode總數和已經使用的數量,可以使用df命令。 df -i 檢視每個inode節點的大小,可以用如下命令: sudo dumpe2fs -h /dev/hda | grep "Inode size" 由於每個檔案都必須有一個inode,因此有可能發生inode已經用光,但是硬碟還未存滿的情況。這時,就無法在硬碟上建立新檔案。 四、inode號碼 每個inode都有一個號碼,作業系統用inode號碼來識別不同的檔案。 這裡值得重複一遍,Unix/Linux系統內部不使用檔名,而使用inode號碼來識別檔案。對於系統來說,檔名只是inode號碼便於識別的別稱或者綽號。表面上,使用者通過檔名,開啟檔案。實際上,系統內部這個過程分成三步:首先,系統找到這個檔名對應的inode號碼;其次,通過inode號碼,獲取inode資訊;最後,根據inode資訊,找到檔案資料所在的block,讀出資料。使用ls -i命令,可以看到檔名對應的inode號碼:
ln命令可以建立硬連結:
九 實際問題
查詢原因:
/data/cache目錄中存在數量非常多的小位元組快取檔案,佔用的Block不多,但是佔用了大量的inode。
解決方案:1、刪除/data/cache目錄中的部分檔案,釋放出/data分割槽的一部分inode。
2、用軟連線將空閒分割槽/opt中的newcache目錄連線到/data/cache,使用/opt分割槽的inode來緩解/data分割槽inode不足的問題:
ln -s /opt/newcache /data/cache