聊聊Linux上“too many links”報錯出現的原因和處理方法

說明

Linux上出現“too many links”這樣的報錯,可能是多原因造成的。本節主要介紹導致這一報錯的兩種情況:

*(1)ext3 文件系統,報錯內容類似如下:

cannot create directory `/home/data` too many links

*(2)docker存儲驅動overlay,報錯內容類似如下:

failed to register layer: link /data/sys/var/docker/overlay/xxxxx: too many links    ## 這裏使用xxx忽略掉不重要的內容

分爲兩種情況分析

ext3 文件系統

關於 ext3 的介紹,網上有很多的優秀的博客或資料可參考,這裏我簡單說明下:

(1)查看文件系統:df -lhT

(2)Linux的kernel代碼中有include/linux/ext2_fs.h:#define EXT2_LINK_MAX 32000nclude/linux/ext3_fs.h:#define EXT3_LINK_MAX 32000,ext3文件系統一級子目錄的個數默認爲31998(個),準確地說是32000個。

(3)不建議在一個目錄下有太多的文件或者目錄,這回降低文件系統查找文件或目錄的性能。

(4)ext3文件系統下單個目錄裏的最大文件數無特別的限制,是受限於所在文件系統的inode數。參考阮神理解inode

(5)ext4 對目錄個數沒有限制。

瞭解了上面的套路,我們對於文件系統層次的“too many links”報錯,可採用:

(1)將ext3文件系統替換爲ext4,注意️數據安全,可參考: failed: Too many links 解決

(2)清除無用的目錄或文件

docker存儲驅動overlay

關於這一塊,可參考我之前的文章Docker存儲驅動由overlay更改爲overlay2,文章中給出了兩種方法:

解決上面出現的“too many links” 問題,可以採用下面兩種方法:

(1)臨時方法:定時刪除沒用的鏡像和已經退出的容器,使用docker system prune。

(2)永久方法:將存儲驅動由 overlay 升級到 overlay2。

參考文檔

*(1)failed: Too many links 解決

*(2)Docker存儲驅動由overlay更改爲overlay2

*(3)ext3文件系統目錄限制問題

*(4)理解inode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章