当前位置:首页 > 运维 > 正文内容

linux中df -i 100%解决方案

phpmianshi5年前 (2016-04-28)运维251

背景

E138: Can't write viminfo file /root/.viminfo!

Press ENTER or type command to continue

这不科学呀,明明是root,怎么可能无法写入?


后来查看磁盘inodes状态,发现/已经是100%,难怪无法写入。

df -i
Filesystem              Inodes   IUsed     IFree IUse% Mounted on
/dev/mapper/vg_db02-lv_root
                    3276800 3276800         0  100% /

inodes介绍

Linux系统下文件数据储存在"块"中,文件的元信息,例如文件的创建者、文件的创建日期、文件的大小等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

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

每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

inodes资源耗尽

inodes使用完与存储空间使用完相似,都是创建不了文件或无法正常执行一些命令。inodes使用完,存储空间可能还有,这种情况一般是生成了大量的小文件,把inode table占满。

一般情况下存储空间使用完,inodes往往才使用百分之几,所以容易忽视对inodes使用情况的监控。

解决方案

通过以下脚本进行检查,查看到底哪个目录下面的文件最多

find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n

通过以下脚本进行检查,查看到底哪个目录下面的文件最多:

for i in /*; do echo $i; find $i | wc -l; done

如果确定是某个目录下面,则/转换为该目录绝对路径,如/var/log


最终发现 /var/spool/postfix/maildrop/这个目录下有大量的文件,

可能是由于该目录有大量的文件导致的inodes满了


在 网上搜索之后明白是mail没有成功的邮件。由于linux在执行cron时,会将cron执行脚本中的output和warning信息,都会以邮件的 形式发送cron所有者, 而我的服务器中关闭了postfix,导致邮件发送不成功,全部小文件堆积在了maildrop目录下面。如果sendmail或者postfix正常运 行,则会在/var/mail目录下也会堆积大量的邮件。


先停止任务计划

/etc/init.d/crond stop

然后我就直接清空目录所有文件

cd /var/spool/postfix/maildrop
rm -rf ./*

提示:-bash: /bin/rm: 参数列表过长

可以用

find . -name "*"|xargs rm -rf "*"

等待20分钟清理完成

再次查看,发现终于好了。


df -i
Filesystem              Inodes   IUsed     IFree IUse% Mounted on
/dev/mapper/vg_db02-lv_root
                       3276800 2496138    780662   77% /


关闭任务计划通知

vi /etc/crontab

MAILTO=root

更改为

MAILTO=""


重启任务计划

/etc/init.d/crond restart

过了几天,发现这个目录居然还有文件

然后我在任务计划第一行添加

crontab -e

#关闭任务计划通知

MAILTO=""


任务计划里面有很多每分钟执行的计划,等待半个小时,发现目录是空的。

Ok,那就说明以后再也不会产生文件了。




版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

内存分配堆与栈的区别

堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义:(1)程序内存布局场景下,堆与栈表...

linux中如何检测UDP端口是否开启

背景搭建了一台dnsmasq DNS解析服务器,不想对外网提供服务,只给内网提供解析服务,想关闭udp53端口的入站规则如何判断UDP 53端口是否提供服务呢?我们的服务端:123.207.190.8...

Nginx中last和break redirect和permanent区别和联系

一.last & break    (1)last 和 break 当出现在location 之外时,两者的作用是一致的没有任何差异。注意一点就是,他们会跳过所有的在他们之...

守护进程详解及其代码实现

1、概念理解:守护进程(Daemon)是运行在后台的一种特殊进程,也称为精灵进程。是生存期较长的一种进程,常常在系统自举时启动,仅在系统关闭时终止。没有控制终端,仅仅在后台运行,Linux有很多守护进...

linux中浅谈端口占用和开闭管理

背景平时开发或线上运维少不了跟端口打交道,今天我们简单聊聊平时跟端口相关的几个场景首先查看某台主机某个端口服务是否正常比如查看本机 redis服务是否正常telnet 127.0.0.1&n...

linux中磁盘被占用找不到占用文件

1、用df 检查发现磁盘占用过高[root@VM_0_15_centos ~]# df -h2、用du检查发现各目录占用的空间都很少,有约10G的空间找不到了[root@...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。