對(duì)于系統(tǒng)管理員來(lái)說(shuō),了解系統(tǒng)的一些限制是非常有必要的,這樣可以根據(jù)需要進(jìn)行必要的參數(shù)配置和調(diào)整,進(jìn)而實(shí)現(xiàn)更優(yōu)的性能,對(duì)于系統(tǒng)設(shè)計(jì)人員甚至程序員來(lái)說(shuō),了解系統(tǒng)的一些限制,也會(huì)有助于設(shè)計(jì)更為合理的存儲(chǔ)結(jié)構(gòu)。
一 目錄數(shù)限制
RedHat Enterprise Linux AS 4.0 Update 3
在同一個(gè)路徑下,一級(jí)子目錄的個(gè)數(shù)限制為31998,如果你的應(yīng)用生成的目錄可能會(huì)超過這個(gè)數(shù),那要注意進(jìn)行目錄分級(jí)。例如,如果目錄名為數(shù)字的話,可以將數(shù)字除以10000后的整數(shù)值做為父目錄名 (/data/1/13892),如果是目錄名為字母的,可以用前幾個(gè)字符來(lái)做為父一級(jí)目錄(/data/ab/abcdefg)等等。
通過以下的命令行可以得到一個(gè)目錄下一級(jí)子目錄的總數(shù):
$ ls -F | grep "/" | wc
解決方法:
1) 創(chuàng)建子目錄
2) Linux為了cpu的搜索效率而規(guī)定的,要想改變數(shù)目大概要重新編譯內(nèi)核.
二 文件數(shù)目限制
每個(gè)文件對(duì)應(yīng)一個(gè)inode,如果inode沒有了,那就算有空間也不能再寫文件了。
通過以下命令行,可以看某個(gè)分區(qū)的inodes信息:
[root@boss tmp]# tune2fs -l /dev/sda5 | grep "inodes"
Free inodes: 1247005
[root@boss tmp]#
2種解決辦法:
1) 重新mkfs,mkfs時(shí)將inode數(shù)調(diào)的多一些(根據(jù)你fs中文件的總數(shù)而定),塊尺寸調(diào)得小一些(根據(jù)每個(gè)文件的平均大小而定)
2) 使用loopback文件系統(tǒng)臨時(shí)解決
在/usr中(也可以在別處)創(chuàng)建一個(gè)大文件,然后做成loopback文件系統(tǒng),將原來(lái)的文件移到這個(gè)文件系統(tǒng)中,并將它mount到/usr下合適的位置。這樣可以大大減少你/usr中的文件數(shù)目。但是系統(tǒng)性能會(huì)有點(diǎn)損失。
三 單個(gè)目錄下文件數(shù)限制
原來(lái)以為L(zhǎng)inux下單個(gè)目錄內(nèi)有文件數(shù)量限制,Google了一番沒有看到明確的說(shuō)法,到是Freebsd下有65535的限制,通過重新編譯內(nèi)核可以更改。(可以看看/usr/include/sys/syslimits.h)
不過不建議在一個(gè)目錄下放太多文件,會(huì)影響系統(tǒng)性能。
補(bǔ)充: ulimit -a 命令查看所有的限制,并能臨時(shí)改變限制。