对于系统管理员来说,了解系统的一些限制是非常有必要的,这样可以根据需要进行必要的参数配置和调整,进而实现更优的性能,对于系统设计人员甚至程序员来说,了解系统的一些限制,也会有助于设计更为合理的存储结构。

  一 目录数限制

  RedHat Enterprise Linux AS 4.0 Update 3

  在同一个路径下,一级子目录的个数限制为31998,如果你的应用生成的目录可能会超过这个数,那要注意进行目录分级。例如,如果目录名为数字的话,可以将数字除以10000后的整数值做为父目录名 (/data/1/13892),如果是目录名为字母的,可以用前几个字符来做为父一级目录(/data/ab/abcdefg)等等。

  通过以下的命令行可以得到一个目录下一级子目录的总数:

$ ls -F | grep "/" | wc

  解决方法:

  1) 创建子目录

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

  二 文件数目限制

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

  通过以下命令行,可以看某个分区的inodes信息:

[root@boss tmp]# tune2fs -l /dev/sda5 | grep "inodes"
    Free inodes:              1247005
    [root@boss tmp]#

  2种解决办法:

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

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

  在/usr中(也可以在别处)创建一个大文件,然后做成loopback文件系统,将原来的文件移到这个文件系统中,并将它mount到/usr下合适的位置。这样可以大大减少你/usr中的文件数目。但是系统性能会有点损失。

  三 单个目录下文件数限制

  原来以为Linux下单个目录内有文件数量限制,Google了一番没有看到明确的说法,到是Freebsd下有65535的限制,通过重新编译内核可以更改。(可以看看/usr/include/sys/syslimits.h)

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

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

  (参考链接: http://blog.chinaunix.net/u1/34654/showart_331913.html)

==============================================================

昨晚排查了在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=1
while [ $i -lt 35000 ]
do
    mkdir $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 {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个字符

参考文档:
http://bbs.chinaunix.net/viewthread.php?tid=1972687
http://www.unixreference.net/articles/linux/fs/2007/1115/651.html
http://it.chinawin.net/os/article-3958.html

Linux系统目录数和文件数限制的更多相关文章

  1. linux 用户打开进程数和文件数调整

    1 查看nproc(max user processes)命令 [root@vm-cdh4 ~]# ulimit -u 14866 2 修改nproc 临时修改, 重登录或重启后失效: [root@v ...

  2. <php>统计目录数和文件数

    $dirn = 0; //目录数 $filen = 0; //文件数 //用来统计一个目录下的文件和目录的个数 function getdirnum($file) { global $dirn; gl ...

  3. php归获取当前目录下的二级目录数 和文件数

    <?php        header('Content-Type: text/html; charset=gb2312');        // $baseDir = "/www/u ...

  4. Linux 统计当前目录下文件数

    Linux 统计文件数 linux统计当前目录下文件数 ls -l |grep "^-"|wc -l linux统计当前目录下文件(包括子文件夹下的)数 ls -lR|grep & ...

  5. Linux系统目录结构和文件基本属性

    一.Linux系统目录结构 二.Linux 文件基本属性 三.touch stat tar 命令 一.Linux系统目录结构 不同颜色文件的含义: inux 文件颜色的含义,蓝色代表目录,绿色代表可执 ...

  6. Linux实战教学笔记07:Linux系统目录结构介绍

    第七节 Linux系统目录结构介绍 标签(空格分隔):Linux实战教学笔记 第1章 前言 windows目录结构 C:\windows D:\Program Files E:\你懂的\精品 F:\你 ...

  7. Linux系统目录结构以及简单说明

    Linux系统目录结构以及简单说明 linux目录图: / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...

  8. Linux系统目录结构

    Linux系统目录结构图 目录:/ 是Linux的根目录 每个文件和目录从根目录开始,只有root用户具有该目录下的写权限: /root是root用户的主目录,这与 / 目录不一样: 目录:/bin ...

  9. Linux系统目录分析

    Linux系统目录分析 /bin :系统指令目录(如ls.cp.mv等指令) /dev :系统设备目录 /home :系统用户的家,每一个系统用户都在此目录下有一个自己的家,每次登录时,系统都会自动登 ...

随机推荐

  1. [BZOJ4260] Codechef REBXOR (01字典树,异或前缀和)

    Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,-,AN. Output 输出一行包含给定表达式可能的最大值. Sample ...

  2. JSR310 时间类型的相互转换

    参数申明: final Date date = new Date(); final Timestamp timestamp = new Timestamp(date.getTime()); final ...

  3. P2330 05四川 繁忙的都市

    题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条 ...

  4. TYVJ 1305 最大子序和 ++ 烽火传递

    描述 输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m=4时,S=5+1-2+3=7当m=2或m=3时,S=5+1=6 输入 ...

  5. Codeforces 404E: Maze 1D(二分)

    题意:指令“R”机器人会向右走一步,“L”是向左.起初机器人在0位置,可以在除了0以外的任何位置放障碍,如果机器人的指令将使它走到障碍上,那这一步他会保持不动.要求让机器人最终结束的那一步一定只走过一 ...

  6. [Python Cookbook] IPython: An Interactive Computing Environment

    You can launch IPython on the command line just like launching the regular Python interpreter except ...

  7. MySQL通用编程

    第一阶段:基础入门 第一章:关系模型 第二章:基本查询 第三章:复杂查询 第四章:权限控制 第五章:查询优化 第二阶段:模型设计 第六章:设计选择 第七章:函数依赖 第八章:分解算法 第九章:设计过程 ...

  8. Database | SQL

    Basic of MySQL 创建数据库: mysql> create database xxj; Query OK, row affected (0.00 sec) 列举数据库: mysql& ...

  9. Network | Public-key cryptography

    公开密钥加密public-key cryptography,也称为非对称(密钥)加密. 非对称密钥,是指一对加密密钥与解密密钥,这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密 ...

  10. 机器学习之SVM

    一.线性分类器: 首先给出一个非常非常简单的分类问题(线性可分),我们要用一条直线,将下图中黑色的点和白色的点分开,很显然,图上的这条直线就是我们要求的直线之一(可以有无数条这样的直线) 假如说,我们 ...