Linux系统中限制目录数和文件数的方法详解

jLawrencee 2013-06-20

限制Linux系统目录数和文件数的方法。

根据需要进行参数配置,实现更优的性能,有助于设计更为合理的存储结构。

一目录数限制

RedHatEntereLinuxAS环境中。

在同一个路径下,一级子目录的个数限制为31998,

如果应用生成目录超过这个数,可以进行目录分级。

例如,目录名为数字的话,将数字除以10000后的整数值做为父目录名(/data/1/13892),

如果是目录名为字母的,可以用前几个字符来做为父一级目录(/data/ab/abcdefg)

查询一个目录下级子目录的总数

$ ls -F | grep “/” | wc

1)创建子目录

2)Linux为了cpu的搜索效率而规定的,要改变数目要重新编译内核.

二文件数目限制

每个文件对应一个inode,如果inode没有了,那就算有空间也不能再写文件了。

查看某个分区的inodes信息:

# tune2fs -l /dev/sda5 | grep “inodes”
Free inodes: 1247005

解决办法:

1)重新mkfs,mkfs时将inode数调的多一些(根据你fs中文件的总数而定),块尺寸调得小一些(根据每个文件的平均大小而定)

2)使用loopback文件系统临时解决

在/usr中(可以在别处)创建一个大文件,然后做成loopback文件系统,将原来的文件移到这个文件系统中,并将它mount到/usr下合适的位置。

这样可以减少/usr中的文件数目,但是系统性能有损失

三单个目录下文件数限制

Freebsd下有65535的限制,通过重新编译内核可以更改。(查看/usr/include/sys/syslimits.h)

不建议在一个目录下放太多文件,会影响系统性能。

ulimit-a命令查看所有的限制,并能临时改变限制。

没有优化或修改内核的测试,测试平台:RHEL5U3_x64

测试ext3文件系统下filename最大字符长度:

LENTH=`for i in {1..255};do for x in a;do echo -n $x;done;done`
touch $LENTH

当增加到256时,touch报错,Filenametoolong

linux系统下ext3文件系统内给文件/目录命名,最长127个中文字符,英文支持255个字符

测试ext3文件系统下一级子目录的个数限制

RHEL5U3_x64

# for i in {1..32000}; do mkdir $i; done
mkdir: cannot create directory `31999′: Too many links
mkdir: cannot create directory `32000′: Too many links

ext3文件系统一级子目.Linux为了cpu的搜索效率规定的,要改变数目要重新编译内核.

测试ext3文件系统下单个目录里的最大文件数

单个目录下的最大文件数没什么特别限制,受限于所在文件系统的inode数限制

df-i

或者使用tune2fs-l/dev/sdaX

或者dumpe2fs-h/dev/sdaX 查看可用inode数

后两个命令输出结果是一样的,跟df所得出的可用inode数会有些误差

常用两种解决办法:

1重新mkfs,ext3默认block大小4096Bytes,block设置小一些inode数设置大一些

2使用loopback文件系统临时解决:

在/usr中(也可以在别处)创建一个大文件,然后做成loopback文件系统,将原来的文件移到这个

文件系统中,并将它mount到/usr下合适的位置。这样可以大大减少你/usr中的文件数目,系统性能会有损失。

测试打开文件数限制(文件句柄、文件描述符)

ulimit-n65535设置,或者/etc/security/limit.conf里设置用户打开文件数、进程数、CPU等.

相关推荐