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

linux中df -i 100%解决方案

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

背景

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面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

linux中sudo提权漏洞复现及修复-CVE-2021-3156

1.背景sudo被披露存在一个基于堆的缓冲区溢出漏洞(CVE-2021-3156,该漏洞被命名为“Baron Samedit”),可导致本地权限提升。当在类Unix的操作系统上执行命令时,非root用...

快速删除复制代码中的行号

有时我们copy的代码中前面有行号,一个一个删除太麻烦可以用下面三种方式删除行号:1.awk操作 awk '{for(i=2;i<=NF;i++)printf(&qu...

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

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

linux中如何查看系统io使用情况

linux中查看IO的方法主要有下面几种方法:1. top   %wa    的含义是等待输入输出的CPU时间百分比,这个数字越高说明越多的CPU资源...

彻底弄懂502/503/504(php-fpm+nginx)亲测可用

环境 php7.3.5 + nginx1.16.0相信大家都遇到过50X的问题,网上也看了很多文章,总是各种不对,所以今天咱们详解各种出现50X的情况和原因502:Bad Gateway &...

linux查看与挂载新磁盘

问题发现腾讯云控制台一个服务器挂载了一个数据库,但是用df -h查看磁盘占用情况,发现磁盘/dev/vdb1消失了。是磁盘坏了?还是没被系统识别?df -hFilesystem &...

发表评论

访客

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