Linux系統目錄數和檔案數限制

2022-06-19 09:09:12 字數 1967 閱讀 4127

昨晚排查了在kvm的build系統中的乙個問題,跟蹤到後面發現在乙個目錄下mkdir建立目錄失敗。我手動試了一下,提示如下:cannot create directory `/home/master/jaytemp` too many links

我發現是在乙個目錄下的一級子目錄數量是有限制的,遂做了點實驗和調查,結合網上其他人寫的部落格,得到如下的一些關於目錄個數和檔案個數限制的結論。

1.ext3檔案系統一級子目錄的個數預設為31998(個),準確地說是32000個。

linux為了cpu的搜尋效率而規定的,要想改變量目限制需要重新編譯核心。我看到在kernel**中有這樣的:

include/linux/ext2_fs.h:#define ext2_link_max           32000

include/linux/ext3_fs.h:#define ext3_link_max           32000

為什麼說31998個呢?這是因為mkdir建立乙個目錄時,目錄下預設就會建立兩個子目錄的,乙個是.目錄(代表當前目錄),另乙個是..目錄(代表上級目錄)。這兩個子目錄是刪除不掉的,「 rm . 」 會得到「rm: cannot remove `.' or `..'」的提示。所以32000-2=31998。

另外,你可以通過如下的指令碼來嘗試。

#!/bin/bash

mkdir tmp

cd tmp

i=1while [ $i -lt 35000 ]

domkdir $i

if [ $? -ne 0 ]; then

echo "cannot make dir $i"

exit

fi((i++))

done

執行這個指令碼,你最後將得到「mkdir: cannot create directory `31999': too many links」的錯誤資訊。

另外,不建議在乙個目錄下有太多的檔案或者目錄,這回降低檔案系統查詢檔案或目錄的效能。忽然想起阿里巴巴的伺服器中將的儲存按照年月等分為不同的各級子目錄而不是在乙個目錄下,其中乙個原因也是出於效能的linux作業系統考慮。

2.ext3檔案系統下單個目錄裡的最大檔案數無特別的限制,是受限於所在檔案系統的inode數。

我在rhel5u5的ext3檔案系統中測試,在乙個目錄下,touch了100萬個檔案是沒有問題的。但是肯定會受到所在檔案系統的inode數的限制。

df -i /dev/sdax或者使用tune2fs -l /dev/sdax或者dumpe2fs -h /dev/sdax檢視可用inode數,後兩個命令輸出結果是一樣的,但是跟df所得出的可用inode數會有些誤差,其中原因,我也沒搞清楚。

網上有兩種解決inode數限制的辦法如下,不過我沒試過了。

2.1 重新mkfs,mkfs時將inode數調的多一些(根據你fs中檔案的總數而定),塊尺寸調得小一些(根據每個檔案的平均大小而定)

2.2 使用loopback檔案系統臨時解決:在/usr中(也可以在別處)建立乙個大檔案,然後做成loopback檔案系統,將原來的檔案移到這個檔案系統中,並將它mount到/usr下合適的位置。這樣可以大大減少你/usr中的檔案數目。但是系統效能會有點損失。

3.預設開啟檔案個數(檔案描述符)限制(預設是1024個)

ulimit -n 命令可以檢視

修改這個限制可以使用ulimt -shn 65535 命令

還可以在/etc/security/limit.conf 裡設定使用者開啟檔案數、程序數、cpu等資訊

4.ext3檔案系統下filename最大字元長度(預設255個英文本元)

lenth=`for i in ;do for x in a;do echo -n $x;done;done`

touch $lenth

當增加到256時,touch報錯,file name too long

linux系統下ext3檔案系統內給檔案/目錄命名,最長只能支援127個中文字元,英文則可以支援255個字元

參考文件:

linux 系統下open file檔案數限制修改

由於druid的大查詢會產生很多臨時的中間檔案,如 tmp druid druid groupby 27e88733 d1f1 4589 bf63 ef3a40d4d945 273009ff 02cd 4085 b9f6 e94c7931111c 02135564.tmp too many open...

Linux目錄數和檔案數限制 目錄下最大檔案數

一 目錄數限制 在同乙個路徑下,一級子目錄的個數限制為 31998 如果你的應用生成的目錄可能會超過這個數,那要注意進行目錄分級。例如,如果目錄名為數字的話,可以將數字除以10000後的整數值做為父目錄名 data 1 13892 如果是目錄名為字幕的,可以用前幾個字元來做為父一級目錄 data c...

Linux目錄數和檔案數限制 目錄下最大檔案數

linux目錄數和檔案數限制 目錄下最大檔案數 一 目錄數限制 在同乙個路徑下,一級子目錄的個數限制為 31998 如果你的應用生成的目錄可能會超過這個數,那要注意進行目錄分級。例如,如果目錄名為數字的話,可以將數字除以10000後的整數值做為父目錄名 data 1 13892 如果是目錄名為字幕的...