关键词
- 磁盘
- inode
- -bash: /bin/rm: Argument list too long
背景
今日线上巡检时,有同事告知,部分应用无法使用。故连忙连上对应服务器查看相关状态.在连接过程中发现 ssh连接异常缓慢,并且在登录后有如下提示
[root@webmap_web:/root]
- bash echo: write erroe :No space left on device
问题定位
根据登录后的提示,可初步判断是由于磁盘空间已满或者有大量小文件将inode值打满,导致的。故执行以下命令查看具体情况
[root@webmap_web:/var/log]
#du -sh *
8.0K aliyun-util.log
25M audit
8.0K boot.log
208K btmp
0 btmp-20190801
124K cloud-init.log
2.2M cron
948K cron-20190804
944K cron-20190811
948K cron-20190818
948K cron-20190825
24K dmesg
24K dmesg.old
0 dracut.log
129M httpd
12K lastlog
15G maillog
5.2M maillog-20190804
5.2M maillog-20190811
5.2M maillog-20190818
5.2M maillog-20190825
816K messages
4.0K messages-20190804
4.0K messages-20190811
4.0K messages-20190818
4.0K messages-20190825
4.0K ntp.log
4.0K ntpstats
8.9M sa
116K secure
72K secure-20190804
72K secure-20190811
68K secure-20190818
64K secure-20190825
0 spooler
0 spooler-20190804
0 spooler-20190811
0 spooler-20190818
0 spooler-20190825
0 tallylog
120K wtmp
4.0K yum.log
通过上述命令可发现maillog有15G的日志,首先查看日志报错,发现为
postfix/sendmail[3993]: warning: inet_protocols:IPv6 support is disabled:Address family not supported by protocol
postfix/sendmail[3993]: warning: inet_protocols: configuring for IPv4 support only
于是先赶紧清除日志
echo > miallog
清除后依旧系统依旧提示
- bash echo: write erroe :No space left on device
于是使用下列命令去查看
[root@webmap_web:/var/spool/postfix]
#df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda1 2621440 2621423 17 100% /
tmpfs 4110040 1 4110039 1% /dev/shm
/dev/vdb1 19660800 2154 19658646 1% /home
/dev/vdc1 32768000 20503172 12264828 63% /var/www/html/map
发现系统盘的inode值已经被打满了。故系统盘一定存在大量小文件,未被删除。因log显示maillog有大量日志,故怀疑/var/spool/postfix/下应该有很多文件产生 于是进入该目录
[root@webmap_web:/var/spool/postfix]
#du -sh *
4.0K active
4.0K bounce
4.0K corrupt
4.0K defer
4.0K deferred
4.0K flush
4.0K hold
4.0K incoming
1.3G maildrop
4.0K pid
4.0K private
4.0K public
4.0K saved
4.0K trace
发现 maildrop目录下有大量文件,故决定删除。
[root@webmap_web:/var/spool/postfix/maildrop]
#rm -rf *
-bash: /bin/rm: Argument list too long
但发现系统提示,数据太多无法删除,于是通过命令统计了下目录下大致有多少文件
[root@webmap_web:/var/spool/postfix/maildrop]
#ls |wc -l
337912
emmmmm,文件数量很大,于是决定结合xargs命令来删除,ls | xargs -n 9 rm -rf ,ls列出当前目录下的所有文件,以空格作为分隔, xargs是一个过滤器, -n 9 表示每9个文件作为一组,作为 命令 rm -rf 的参数,这样命令行就不会过长了。
[root@webmap_web:/var/spool/postfix/maildrop]#
ls |xargs -n 9 rm -f
等待一段时间后,可以发现系统磁盘的inode值已经降低到83%了。系统以恢复正常
在系统正常后,我们再来处理上面maillog中的报错信息
修改方法:
/usr/sbin/postconf | grep inet_protocols --查看当前的inet_protocols
inet_protocols = all
vi /etc/postfix/main.cf
inet_protocols = all
改为inet_protocols = ipv4
重启/etc/init.d/postfix restart