Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4558522
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: LINUX

2014-05-26 17:20:26

文章来源:http://blog.csdn.net/wzy_1988/article/details/12917687

前言

我看到有面试题问到Linux目录个数和文件个数的限制,这里总结记录一下

目录个数限制

这里需要区分文件系统,Linux之前的ext3和ext4文件系统

ext3

ext3文件系统的一级子目录的个数默认为32000个,可以通过查看源码找到此规则:

find命令查找源代码文件:



cat命令查看define常量:




ext4

ext3有32000最大目录限制,ext4取消了这一限制

测试脚本:

  1. #!/bin/bash  
  2.   
  3.   
  4. for index in `seq 1 40000`  
  5. do  
  6.     mkdir $index  
  7.     if [ $? -ne 0 ]; then  
  8.         echo -e "创建目录失败\n"  
  9.     fi  
  10. done  
  11.   
  12. echo -e "创建目录成功\n"  

截图:




文件个数限制

ext3、ext4系统下单个目录的最大文件数无特别的限制,是受限于所在文件系统的inode数

inode

这里参考了阮一峰的博客,原文链接:理解inode

文件存储在硬盘上,硬盘的最小存储单位叫做“扇区(Sector)”。每个扇区存储512字节(相当于0.5KB)

操作系统读取硬盘的时候,不会一个一个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。

文件数据都存储在“块“中,那么很明显,我们还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为”索引节点“

inode内容

inode包含文件的元信息,具体说来有以下内容:
  • 文件的字节数
  • 文件拥有者的User ID
  • 文件的Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳,共用三个:ctime指inode上次变动时间,mtime指文件内容上次变动的时间,atime指文件上次打开的时间
  • 连接数,即有多少文件名指向这个inode
  • 文件block的位置

可以用stat命令查看某个文件的inode信息:




inode大小

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息

每个inode节点的大小,一般是128byte或者256byte。inode的节点总数,在格式化时就给定,一般是每1KB或2KB就设置一个inode。查看每个硬盘分区的inode总数和已经使用的数量,可以用df命令



由于每个文件都必须有一个inode,因为可能发生inode已经用光,但是硬盘还未存满的情况,这时,就无法在硬盘上创建新文件


文件大小限制

现在ext3支持最大16TB的文件系统,单个文件最大2TB

Ext4增加了48位块地址,最大支持1EB文件系统,和单个16TB的文件

换算:1EB=1024PB 1PB=1024TB 1TB=1024GB
阅读(981) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~