linux(ubuntu)文件夹和文件最大数量

yangxiang 2012-02-15

最近的项目需要在网上爬取些资料,爬取内容很简单就是数量很多,一条内容一个文件,写了个贼啦简单的爬虫,当时就考虑到操作系统支持的最大文件数量是多少,简单的google+百度了一下都说没上限。于是程序开始运行,当下载到500万条的时候出现了“设备上没有空间”的错误。查看了一下硬盘还有很大的空间呢,于是想到文件数量过多的问题,这次仔细查找了一下,发现些资料。

Java代码

1.简单的说在linux下一个文件或文件夹对应一个inode,分区的inode的数量是有限的,如果inode用完,即使分区有空间也不能创建新的文件和文件夹了

简单的说在linux下一个文件或文件夹对应一个inode,分区的inode的数量是有限的,如果inode用完,即使分区有空间也不能创建新的文件和文件夹了。当然也有相应的解决,为了抓紧时间我用了最简单的方式:修改程序把保存路径换到另外一个分区。因为每个分区的inode是有上限的。

下面是查看inode数量的方法,inode相关资料以及inode用完的解决方法

一、目录数限制:

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

解决方法:

得到一个目录下一级子目录的总数

 
ls   -F   |   grep   /   |wc

  

二、文件数目限制:

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

查看当前分区的iodes信息:

 
tune2fs -l /dev/hda2  
Free inodes:              374919  //我出现问题的时候free inodes的值为“Free inodes:              47”

 

解决办法:

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

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

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

 

相关推荐