linux下最大文件数、最大目录数、最大文件名长度

说明:
以下测试都是在没有优化或修改内核的前提下测试的结果

1. 测试目的:ext3文件系统下filename最大字符长度
测试平台:RHEL5U3_x64
测试过程:
# 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个字符

2. 测试目的: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个,准确地说是32000个。这是因为mkdir创建一个目录时,目录下默认就会创建两个子目录的,一个是.目录(代表当前目录),另一个是..目录(代表上级目录)。这两个子目录是删除不掉的,“ rm . ” 会得到“rm: cannot remove `.’ or `..’”的提示。所以32000-2=31998。
Linux为了cpu的搜索效率而规定的,要想改变数目大概要重新编译内核.
在kernel代码中有这样的:
include/linux/ext2_fs.h:#define EXT2_LINK_MAX 32000
include/linux/ext3_fs.h:#define EXT3_LINK_MAX 32000

3. 测试目的:ext3文件系统下单个目录里的最大文件数
测试平台: RHEL5U3_x64
测试过程:
单个目录下的最大文件数似乎没什么特别限制,也是受限于所在文件系统的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中的文件数目。但是系统
性能会有点损失。

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

发表评论

邮箱地址不会被公开。 必填项已用*标注