A. linux df排查inode已滿及解決方法
收到監控告警,有些任務報磁碟不足的錯誤,通常磁碟只讀一般培老慧的常見含喚原因:
判斷可能是4.59和4.60兩台機器跟磁碟滿了
通過df查看一下:
跟磁碟並沒有滿,查看下inode使用率:
df命令作用是列出文件系統的整體磁碟空間使用情況。可以用來查看磁碟已被使用多少空間和還剩餘多少空間。
df命令可以參考這篇 linux命令詳解之df命令
df -i:
看到60的inode滿了,刪除4.60上的小文件即可。
df -h顯示磁碟佔用是沒有問題;但是df -i顯示磁碟inode資源佔用完。
inode譯成中文就是索引節點,每個存儲設備(例如硬碟)或存儲設備的分區被格式化為文件系統後,應該有兩部份,一部份是inode,另一部份是Block,Block是用來存儲數據用的。而inode呢,就是用來存儲這些數據的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫許可權等。inode為每個文件進行信息索引,所以就有了inode的數值。操作系統根據指令,能通過inode值最快的找到相對應的文件。
這種情況的原因通常是:盡管那個分區的磁碟佔用率未滿,但是inode已經用完,應該是該磁碟的某些目錄下存在大量的小文件導致。盡管小文件佔用的磁碟空間並不大,但是數量太多,inode用盡。
通過ls命令配合wc命令,可以查看某個文件夾下的文件數量。例如:
wc命令用來計算數字。利用wc指令我們可以計算文件的Byte數(-b)、字數(-w)或是列數(-l)。
至配答於解決方案,可以參考文章: linux inode已滿解決方法
參考:
B. Linux中的inode到底是什麼
要了解 Linux 操作系統上的 inode 前,我們先來說說 Linux操作系統上的文件。對於 Linux 操作系統而言,橋備[一切皆文件]。而文件是無法獨立於存儲介質(這里指的是物理磁碟或內存、快閃記憶體等)存在的,一切操作系統上的文件都無時無刻不在和存儲介質打交道。
例如,讀取文件時需要將文件從磁碟中載入到內存中,當文件操作結束後,文件又會被存儲到磁碟中。那麼,既然文件要被存儲到磁碟中,而磁碟是有容量限制的,那麼也就是說磁碟上能存放的物理文件的數量是有限的。
如果你已經理解了這一個觀點,那麼恭喜你,你大體上已經知道了 inode 是干什麼的。
沒錯, inode 是用來標識操作系統的文件的一個特徵描述,而且操作系統上的 inode 並非無窮無盡,通常在你安裝操作系統後,系統上的 inode 數量就已經確定了下來(不過,你可以動態修改 inode 的數量)。
你可以通過 sysctl -a 查詢系統上的 inode 數量。
如上, fs.inode-nr 中的 70212 標識當前操作系統已分配的 inode 數量;21785 表示單前操作系統剩餘空閑的 inode 數量
剛握耐剛說過, inode 是用來標識文件的一個特徵,這是為什麼呢?
Linux 系統為每一個文件都分配了一個 inode 編號,這個編號中記錄了文件相關的一些元信息,通過這些元信息可以用來唯一標識一個文件。
你可以通過 ls -i 查看任意一個文件的 inode 編號
而要查看文件的元信息,你需要使用 stat {filename}
如上,即為一個文件的 inode 信息。這其中包含:
事實上,剛剛通過 stat logrotate.man 中還包括一個欄位 硬鏈接:1 。
為什麼硬鏈接會出現在 inode 信息中?
一般情況下,操作系統中一個文件對應一個 inode ,但是這種規則卻不適用於 硬鏈接 文件。蓋因Linux操作系統上,允許多個文件指向同一個 inode 編號。(參考自: 理解inode - 阮一峰的網路日誌 (ruanyifeng.com) )
硬鏈接場景下,可以使用不同的文件名訪問同一個文件的內容,對文件內容、屬性等的修改會傳遞到其他文件。但刪除一個鏈接文件,並不影響其他文件的訪問。
例如,建立 logrotate.man 的硬鏈接文件
建立硬鏈接後,通過 stat 可以看到 硬鏈接的數量變為 2 了。
這個時候我們刪除原始的鏈接文件,查看鏈接後的文件內容
刪除硬鏈接的原始文件後,可以成功讀取鏈接後的文件內容,此時,硬鏈接數量又變為了 1。
出現這種情況的原因在於,硬鏈接實際上是對文件增加了一個索引,這個索引指向文件的 inode 編號。當硬鏈接的數量大於 1 時,說明該文件除去自身外,還有多個硬鏈接。當硬鏈接的數量等於 0 時,此時操作系統已經沒有任何文件指向該 inode ,也即是操作系統會回收 inode 。
事實上,每刪除一個文件,是對該文件硬鏈接數的「減一」操作。當文件的硬鏈接數歸 0 時,這個文件會被操作系統徹底清除掉。
最後,通常情況下,操作系統分配的 inode 數量是完全夠用的段消春,但出於一些程序或人為的意外可能會導致操作系統的 inode 溢出,你可以通過 df -ih 查看系統分區下 inode 的使用情況以便及時作出應對措施。
C. Linux文件管理中VFS使用的inode是什麼
在 Linux 系統中,VFS(Virtual File System)是一個抽象層,它使得 Linux 內核能夠與多種文件系統進行交互。VFS 使用 inode(Index Node)來管理文件系統中的文件和目錄。
inode 是一個數據結構,它存儲著文件或目錄的元數據信息,如文件大小、創建時間、許可權等。每個文件或目錄在文件系統中都對應一個 inode,而 inode 又與一個編號相關聯,這個編號就是 inode 的編號。
當文件或目錄被創建時,VFS 會為它分配一個 inode 編號,並且創建一個 inode 數據結構來存儲元數據信息。當文件或目錄被訪問時,VFS 會根據 inode 編號來查找對應的 inode 數據結構,從而獲取文件或目錄的信息。
因此,inode 是 VFS 在 Linux 系統中管理文件和目錄的一種重要方式。它能夠幫助 VFS 快速查找文件或目錄的信息,從而提高文件系統的性能。
D. 問:說說inode到底是什麼
答: inode(即index node,索引節點)是類Unix OS中保存文件系統中的對象元數據的數據結構。 全文完,謝謝食用。
……開玩笑的,下面稍微深入地談談inode,以及與它相關的一些小知識。
所謂「文件系統中的對象」,是個非常廣義的概念,畢竟Linux中幾乎一切都是文件,包括普通文件、目錄、設備、管道、察攜Socket等等。inode就用來保存這些東西的元數據,不包括具體的數據,也不包含文件名。具體來講,inode中主要存儲以下這些元數據:
其中,inode編號相當於這個結構中的「主鍵」,也就是說操作系統用inode編號唯一標識一個文件。利用 stat 命令可以查看元數據信息,如下圖所示。通過 ls -i 也可以僅查看一個或一批文件的inode編號。
inode存儲的元數據也是要佔用文件系統空間的,每個inode的大小一般是128B或者256B,這可以通過查詢superblock信息的 mpe2fs 命令查到。
Linux在格式敗亂伏化硬碟分區(即初始化文件系統)時,就會將inode的區域(稱為inode table)與文件數據的區域分開,一般每1KB或2KB數據分配一個inode編號。也就是說,每個分區的inode總數從格式化之後就固定了,因此有可能會出現存儲空間沒有占滿,但因為小文件太多而耗盡了inode的情況。
利用 df -i 命令可以查看inode數量方面的信息,如下圖所示。
下面我們來看看Linux系統中最常見的幾種文件操作是如何體現inode的。
當復制一個文件時,會創建一個包含新inode的陪罩新文件。
當移動一個文件時,僅僅是inode指向的位置發生變化,inode編號與實際數據存儲的塊的位置都不會變化。
Linux系統允許同一個inode號代表的文件有多個文件名,即可以用不同的文件名訪問同一份數據,這叫做硬鏈接。對一個文件創建硬鏈接,其inode編號都相同,並且鏈接數會增加。
特別地,目錄中默認包含的兩個項 . 和 .. 實際上就是對當前目錄和父目錄的硬鏈接,inode編號也對應。
但是Linux系統不允許用戶對目錄創建硬鏈接,因為Linux的目錄結構是無環圖,隨意創建硬鏈接之後會產生環。
軟鏈接的本質也是一個文件,其存儲的內容是對另一個文件的指針。所以對一個文件創建軟鏈接,inode編號會不同,被指向文件的鏈接數不會增加。並且可以對目錄與不存在的文件創建軟鏈接。
當刪除文件時,會先檢查inode中的鏈接數。如果鏈接數大於1,就只會刪掉一個硬鏈接,不影響數據。如果鏈接數等於1,那麼這個inode就會被釋放掉,對應的塊也會被標記為空閑的。
由上圖可以看出,如果把上述profile_文件刪掉,那麼原先創建的兩個hardlink文件就變為了兩個不同的文件(其中一個文件會繼承原來的inode編號),其鏈接數為1,並且仍然可以正常訪問。相對地,softlink文件就變成了懸掛鏈接(dangling link),不能正常訪問了。
利用inode還可以刪除一些文件名中有轉義字元或控制字元的文件,最典型的就是開頭為減號 - 的文件。這種無法直接用rm命令來搞,就可以先查出它們的inode編號再刪除:
全文完,謝謝食用。