Linux索引節點(Inode)用滿導致空間不足


一、問題出現

在創建新目錄和文件是提示“no space left on device”!按照以前的情況,很有可能是服務器空間又被塞滿了,通過命令查看,發現還有剩余。

再用df -i查看了一下/分區的索引節點(inode),發現已經用滿(已用=100%),導致系統無法創建新目錄和文件。

二、問題產生原因

Inode譯成中文就是索引節點,每個存儲設備(例如硬盤)或存儲設備的分區被格式化為文件系統后,應該有兩部份,一部份是inode,另一部份是 Block,Block是用來存儲數據用的。而inode呢,就是用來存儲這些數據的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫權限等。 inode為每個文件進行信息索引,所以就有了inode的數值。操作系統根據指令,能通過inode值最快的找到相對應的文件。
而這台服務器的Block雖然還有剩余,但inode已經用滿,因此在創建新目錄或文件時,系統提示磁盤空間不足。
Inode的數量是有限制的,每個文件對應一個Inode,那么如何查看inode的最大數量呢?

可以看到Inode的總量,已經使用的Inode數量,和剩余數量。
如果watch -n 1 “df -i”一下, 然后去創建一個文件, 會發現已用的加一,未用的減一
簡單了解下Inode在文件系統中的地位:

Linux會為每一個文件分配一個唯一的inode節點。在linux中,文件的文件名、文件屬性、文件內容是分別存儲的:文件名存放在目錄項(即 dentry)中,文件屬性存放在inode中,文件內容存放在block中。Linux在查找文件時,首先先讀取dentry,dentry中存儲的文 件名和inode編號的一個映射表, 根據這個表找到inode編號,再根據inode找到磁盤中的文件。
可以用ls -i查看文件對應的inode編號, 也可以直接stat一個文件, 會有很全的信息。

解決方案

刪除/data/cache目錄中的部分文件,釋放出/data分區的一部分inode。

1
[root@iZ23b44crpgZ /]# find /var/spool/clientmqueue -type f -print -exec rm -f {} \;

 

這個命令中 /var/spool/clientmqueue 是要刪除的文件所在的目錄 -type f這個參數限定find只查找普通文件(即不是管道文件,不是塊文件,不是鏈接文件,不是目錄等),防止誤刪除系統文件。
原因分析:系統中有用戶開啟了cron,而cron中執行的程序有輸出內容,輸出內容會以郵件形式發給cron的用戶,而sendmail沒有啟動所以就產生了這些文件;
解決辦法:
將crontab里面的命令后面加上 > /dev/null 2>&1 或者crontab里面的命令后面加上 > /dev/null


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM