------------------------
还是不明白你到底遇到了什么问题。Linux 下面的虚拟机和文件个数有什么直接关系么?
------------------------
IDC??是虚拟主机吧……不是 vmware 或者 virtualbox 虚拟机吧……
这个很正常啊,文件系统的每个用户 ID 的磁盘容量限额是可以同时设置容量和文件数的。
至于为啥?你去问 IDC 机房吧……他们就是不想让你放那么多文件。这都是人设置的,又不是技术限制。
不过技术限制还是有的,比如磁盘的最小分配空间是 4k 的话,4M 容量就确实只能放下 1024 个文件,算过来,400M 也就放下 100000 文件多点,所以人家设置文件数量限制也是有理由的。而且现在的服务器用文件系统,如果你的文件体积很小,完全可以全都放进目录结构里面而不需要分配磁盘数据空间,这样你就变相的没有占用你的配额(不过应该没有人这么极端)。但你占用的是整个磁盘分区的总文件数量限制(这个是有技术限制的)。
所以很多人为了保证服务器的稳定和磁盘性能,有的会限制一下文件数量。
不过一般情况下没必要。
linux的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。
ext3文件系统下单个目录里的最大文件数无特别的限制,是受限于所在文件系统的inode数。
在一个目录下,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中的文件数目。但是系统性能会有点损失。
一个目录下,到底是可以放多少个文件,由两点来决定:1。inode的空间大小,一个文件占用一个inode,一个inode占用128 byte,如果inode空间用完了,就不能建立文件了
2。由磁盘空间大小决定。不用我多说,磁盘空间用完了,就不能建文件了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)