Linux 目录个数和文件个数限制

错误信息提示“too many links”,文件系统对目录数量的限制。

问题调查

  1. 目录数量限制

    • 在Linux的ext3文件系统中,一级子目录的默认数量限制是32000个。这个限制是为了优化CPU搜索效率而设置的。
    • 实际上,由于每个新目录都会自动创建两个特殊的目录(...),所以实际可创建的目录数量是31998个。
  2. 实验验证

    • 我编写了一个Bash脚本来尝试创建超过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
      
    • 运行这个脚本后,我得到了预期的错误信息,确认了限制的存在。
  3. 性能考虑

    • 过多的目录和文件会降低文件系统的性能,因此不建议在一个目录下创建大量文件或目录。
    • 例如,阿里巴巴的图片服务器将图片存储按年月分目录存储,这也是为了提高性能。

文件系统限制

  1. 文件数量限制

    • 在ext3文件系统中,单个目录下文件的数量没有特别限制,但受到文件系统inode数量的限制。
    • 我在一个RHEL5u5的ext3文件系统中测试,创建了100万个文件,没有遇到问题。
  2. 查看inode数量

    • 可以使用以下命令查看inode数量:
      • df -i /dev/sdaX
      • tune2fs -l /dev/sdaX
      • dumpe2fs -h /dev/sdaX
  3. 解决inode限制的方法

    • 重新格式化文件系统,增加inode数量。
    • 使用loopback文件系统临时解决,将文件移动到一个大文件创建的文件系统中。

系统限制

  1. 打开文件数量限制
    • 默认情况下,Linux系统允许打开的文件数量限制是1024个。
    • 可以使用ulimit -n命令查看当前限制,使用ulimit -SHn 65535命令修改限制。
    • 也可以在/etc/security/limit.conf中设置用户打开文件数、进程数、CPU等信息。

文件名长度限制

  1. 文件名长度
    • 在ext3文件系统中,文件名的最大长度是255个英文字符。
    • 我尝试创建一个长度为255个字符的文件名,成功创建。但当尝试创建256个字符的文件名时,系统报错“File name too long”。
    • 在Linux系统中,文件名支持的最大中文字符长度是127个。

通过这次排查,我不仅解决了KVM构建系统中的问题,还加深了对Linux文件系统限制的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北京橙溪 www.enwing.com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值