分类: LINUX
2007-12-26 11:51:33
早上检查磁带备份时突然发现有一台没有执行自动生成备份文件的脚本,初步怀疑是crond没有运行,以前遇到crond没有运行可能是/usr或/或/var分区满造成,先用ps -ef|grep cron,发现crond真的没有运行,心想那就手工启动crond吧,手工运行/etc/init.d/crond start竞然无法启动,提示“ cann't create /var/run/crond.pid,no space left in the device" ,难道又是某个空间满了,赶紧用df -k来看,发现每个分区都有很大的剩余空间,这可能是什么原因呢? 难道是谁删除大数据时操作有问题,导致空间无法释放?因为以前遇到这种情况很多次,后来想想不可能,出现上述情况时,只会导致df -k看到某分区满的,但实际空余很多,和我现在的状况不一致。突然想起来,以前在itpub里遇到谁发贴,在添加数据文件时明明分区空间还有很多,系统却总是报no space,经过无数个牛人的检查,发现是inode用满了,清理后才正常。
想到这连忙用df -i来看,发现/var分区果然是100%满,此时在/var分区里无法新建任何文件,刚开始还以为重起主机就能解决问题,因为有正常服务在上面,去google上找了一下只能通过删除无用文件来清理inode,想起来,刚才重起主机的想法很幼稚,实际上一个分区上的inode最大值就表示了这个分区上可创建文件的最大数量,达到最大值系统就不能在这个分区上再新建任何文件,这种情况重起主机根本不起任何作用。
总结一下,关于磁盘空间清理比较怪异的问题主要有两种:
1)删除文件后发现空间未释放(即磁盘使用率未下降)
------------------------参见http://www.itpub.net/654510.html-------------------------------
oralce正常删除一些数据文件,在UNIX目录下对应的数据文件也看不到,但df -k查看磁盘空间时候,空间并没有释放。请给点意见。最常见的一种情况是文件描述符仍被占用,应该是,进程没有结束,文件依然被进程占用。
有什么方法释放空间?重起ORACLE?找到相应的进程,kill掉即可释放空间,重启数据库会释放空间,AIX上就是这样的
如果是linux的话,使用lsof | grep filename就可以找到对应的process..
在unix/linux下面, 只要进程还打开着这个文件, 就会在kernel中保持一个这个文件的link, 在进程terminate的时候, 对应的文件inode上的link为0的时候, 那个文件就被彻底的删除了.
-------------------------------------------------------------------------------------------------
如果可以直接重起主机的话,也可以解决问题。
2)磁盘空间有剩余,但添加(或创建)文件时报无剩余空间(“no space left in the device"),可以检查inode的使用状况,如果是inode满,通过删除无用文件来腾出inode, 这种情况重起主机或某个进程是无效的。如果系统总会产生很多的小文件,可以写定时执行的脚本来清理。