debian系統,只有一個分區,web服務器,最近發現inode使用率真100%,刪了一些文件,但過一會又升到100%,如何解決?或者有什麼方法查看到底是哪些文件在增加,占用inode?謝謝!
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 17793024 17791412 1612 100% /
udev 1021529 553 1020976 1% /dev故障現象
分區無法寫入文件。
故障分析
執行df -h命令發現空間占用不到70%,執行df -hi,發現某分區IUse%值為100%,說明inode已經用完,應該是某些目錄下存在大量的小文件導致。
解決方法
大量小文件分布有兩種可能,一是只有一個或少量目錄下存在大量小文件,這種情況我們可以使用如下命令來找出這個異常目錄:
find / -type d -size +10M
此命令作用是找出大小大於10M的目錄(目錄大小越大,表示目錄下的文件越多)。
第二種可能是,大量的小文件分布在大量的目錄下,這時候上面的命令可能找不出異常的目錄,需要以下命令:
cd /
find */ ! -type l | cut -d / -f 1 | uniq -c
此命令作用是找出目錄下文件總數,可能需要執行多次,直到找出具體的目錄。比如上面的命令找出了/data目錄下存在大量的小文件,但/data/目錄還有很多目錄,這時候我們還需要繼續執行:
cd /data
find */ ! -type l | cut -d / -f 1 | uniq -c
直到找出具體的目錄。
故障總結
對inode占用進行監控,並且收到inode告警時應及時使用以上方法來定位問題,並反饋給相應人員從根源解決。
一、發現問題:
在一台配置較低的Linux服務器(內存、硬盤比較小)的/data分區內創建文件時,系統提示磁盤空間不足,用df -h命令查看了一下磁盤使用情況,發現/data分區只使用了66%,還有12G的剩余空間,按理說不會出現這種問題。
二、分析問題:
後來用df -i查看了一下/data分區的索引節點(inode),發現已經用滿(IUsed=100%),導致系統無法創建新目錄和文件。
inode譯成中文就是索引節點,每個存儲設備(例如硬盤)或存儲設備的分區被格式化為文件系統後,應該有兩部份,一部份是inode,另一部份是Block,Block是用來存儲數據用的。而inode呢,就是用來存儲這些數據的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫權限等。inode為每個文件進行信息索引,所以就有了inode的數值。操作系統根據指令,能通過inode值最快的找到相對應的文件。
而這台服務器的Block雖然還有剩余,但inode已經用滿,因此在創建新目錄或文件時,系統提示磁盤空間不足。
三、查找原因:
/data/cache目錄中存在數量非常多的小字節緩存文件,占用的Block不多,但是占用了大量的inode。
四、解決方案:
1、刪除/data/cache目錄中的部分文件,釋放出/data分區的一部分inode。
2、用軟連接將空閒分區/opt中的newcache目錄連接到/data/cache,使用/opt分區的inode來緩解/data分區inode不足的問題:
ln -s /opt/newcache /data/cache
3、更換服務器,用高配置的服務器替換低配置的服務器。很多時候用錢去解決問題比用技術更有效,堆在我辦公桌上5台全新的 DELL PowerEdge 1950 服務器即將運往IDC機房。
有個tmp目錄,用ls命令,直接卡死,一下子就明白文件不少 ,然後敲進 rm -rf命令又卡住了,關機睡覺,今天早上來看,inode使用率降到50%了 ^_^
linux裡每個文件都有些元信息像創建時間,文件大小,文件名啊之類的,這些元信息就存在inode了。這樣如果小文件過多的話,可能磁盤沒滿但inode空間已分配完,這時磁盤就跟滿了一樣無法寫入