歡迎您光臨本站 註冊首頁

測試Linux平台的Inode使用情況的過程命令

←手機掃碼閱讀     火星人 @ 2014-03-29 , reply:0

Linux/Unix like OS 的文件系統中每個目錄樹中的節點並不是像 Windows 那樣直接包含文件的具體信息,而只包含了文件名和 Inode number 。通過 Inode number 所找到對應於文件名的 Inode 節點中才真正記錄了文件的大小/物理地址/所有者/訪問許可權/時間戳/被硬鏈接的次數等實際的 metadata 。因此你可以在 Linux 系統中通過硬鏈接( hard link ) 的方式給某個文件創建無數個位於不同目錄下的文件名,而實際的文件數據只需要一份拷貝。

但也正因為這種文件系統的結構,當你在 Linux 中進行 IO 操作的時候,需要的資源除了磁碟空間以外,還要有剩餘的 Inode 才行。預設情況下, Linux 在系統安裝過程中按照1個 Inode 對應 2k 磁碟空間來計算每個分區的最大 Inode 數。一旦文件系統創建之後,每個分區可用 Inode 數就無法進行動態調整。正常來說,一般不太會出現某個分區的 Inode 耗盡而磁碟空間尚余的情況,除非像我碰到的這樣垃圾小文件瘋長而又沒進行有效的清理。但如果確實需要的話,可以在創建文件系統(比如用 mke2fs )的時候根據實際需要來調整這個參數(比如分區如果用於存放超大視頻文件的話 Inode 的數量可以少一些;如果打算存放的文件是大量小於 2k 的迷你文件的話就要考慮多創建一些 Inode)。

使用df -i命令可以看到每個分區的總inode數目和被使用的以及空閑的inode數目

首先我們測試一下將Inode佔用完的情況:先找到一個200K大小的文件(test.log),然後通過如下命令將其拆成數個小文件:

split -a 10 -b 1 test.log z

多次重複以上的動作,即可將Inode全部佔用完.此時導致的現象是雖然通過df -k可以查看系統還存在剩餘的空間,但由於無法分配Inode,導致無法新建新文件了.

通過如下命令可以將這些大量的小文件刪除:
find ~ -name "*.log" | xargs -L rm

注意不能直接通過rm命令刪除,因為rm命令是將被刪除的文件作為一個又一個參數傳遞進來的,當被刪除的文件過多時,容易導致出現參數過長的錯誤提示:arg list too long

當Inode被用盡時,也會導致Oracle的監聽進程啟動錯誤。

[火星人 ] 測試Linux平台的Inode使用情況的過程命令已經有514次圍觀

http://coctec.com/docs/linux/show-post-201126.html