WDlinux官方论坛's Archiver

admin 发表于 2012-1-7 21:49

限制Linux系统目录数和文件数

限制Linux系统目录数和文件数

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

一 目录数限制
RedHat Enterprise LinuxAS

在同一个路径下,一级子目录的个数限制为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报错,File name too long
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文件系统一级子目录的个数为31998 (个)。
Linux为了cpu的搜索效率规定的,要改变数目要重新编译内核.

测试ext3文件系统下单个目录里的最大文件数
单个目录下的最大文件数没什么特别限制,受限于所在文件系统的inode数限制
df -i
或者使用tune2fs -l /dev/sdaX
或者dumpe2fs -h /dev/sdaX 查看可用inode数

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

常用两种解决办法:
1 重新mkfs,ext3默认block大小4096 Bytes,block设置小一些inode数设置大一些
2 使用loopback文件系统临时解决:
在/usr中(也可以在别处)创建一个大文件,然后做成loopback文件系统,将原来的文件移到这个
文件系统中,并将它mount到/usr下合适的位置。这样可以大大减少你/usr中的文件数目,系统性能会有损失。

测试打开文件数限制(文件句柄、文件描述符)
ulimit -n 65535设置,或者/etc/security/limit.conf里设置用户打开文件数、进程数、CPU等

(转)

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.