Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88994
  • 博文数量: 69
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 697
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-03 23:44
文章分类

全部博文(69)

文章存档

2014年(69)

我的朋友

分类: LINUX

2014-05-15 23:59:54

inode是文件系统分配用来记录文件位置和属性的结构,在一些文件系统中(如ext2, ext3等),它的数量在格式化的时候,就已经确定。如果文件系统是一本书,那么,inode就是这本书的目录。像ext3这样的文件系统,在格式化的时候,这本书的最大目录数已经确定。在你写书(保存文件到磁盘)的过程中,可能生的情况有:纸用完了(磁盘空间不足),这种情况下,当然无法保存新的文件了;另外一种情况,就是目录写完了(inode节点全部分配完了),这种情况下,虽然还有纸(磁盘空间),但由于目录(inode)已经没有了,没有了目录,文件就会无法找到,操作系统当然不会让你新建文件了。现在发生的情况就是因为inode全部被用完了,虽然还有磁盘还有空间,但是文件系统已经无法再记录这些空余空间了,因此也就不能再创建文件(文件夹)了。因为ext3文件系统的inode是在格式化文件系统的时候就已经确定的,要修改文件系统的inode数就只能格式化文件系统,这在服务器上显然是不可能的。临时的解决方法如下:
 
1、创建一个大的块文件:
Bash代码 
1.) dd if=/dev/zero of=disk.img count=1024 bs=1024KB    
dd if=/dev/zero of=disk.img count=1024 bs=1024KB   通过dd命令,将zero问价写入自定义的disk.img文件1024次,每次写入1024Kb,也就是创建一个1GB的文件,用zero文件进行填充。
 
2、格式化这个块文件:
Bash代码 
1.) mkfs.ext2 -N 5000000 -b 1024 -I 128 disk.img  
mkfs.ext2 -N 5000000 -b 1024 -I 128 disk.img 格式化成ext2分区(因为ext3有日志系统,会消耗空间),制定inode大小为128byte(这个是linux内核限制的最小inode大小),制定inode数量为5000000,制定块大小为1024byte。
 
3、挂载该块文件
Bash代码 
1.) mount -o loop disk.img /mnt/xxx  
mount -o loop disk.img /mnt/xxx 因为这个文件不是真正的块文件,所以需要增加-o loop参数。
这样,这个就可以在这个块文件上创建大量的软链接了,这个1G的文件上有500w的inode,对于软链接这种基本不占空间,但是狂占inode的,非常适合。当然,更好的方法,是更换文件系统使用像ext4这样的新文件系统,这些文件系统中inode是动态分配的。
阅读(467) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~