可以先使用df -lh查看磁盘空间使用情况,发现磁盘还有很多剩余,
再使用df -li查看inode使用情况,发现占用100%已满。
于是
find / -type d -size +500M
此命令作用是找出大小大于10M的目录(目录大小越大,表示目录下的文件越多)
发现大量的小文件分布在大量的目录下
于是
cd /
find */ ! -type l | cut -d / -f 1 | uniq -c
此命令作用是找出目录下文件总数,可能需要执行多次。比如上面的命令找出了/data目录下存在大量的小文件,但/data/目录还有很多目录,这时候我们还需要继续执行,
cd /data
find */ ! -type l | cut -d / -f 1 | uniq -c
直到找出具体的目录。
然后进入该目录使用 ls | xargs rm –f 解决。
或者
查看根路径下各个文件夹的文件数
# for i in /*; do echo $i; find $i |wc -l|sort -nr; done
数文件数超过10W的有两个目录
/data 13W+文件
/var下70W+文件
由于本人Linux水平有限,于是把/var下的目录一个个的执行了上面的命令
- for i in /var/cache; do echo $i; find $i |wc -l|sort -nr; done
- for i in /var/db; do echo $i; find $i |wc -l|sort -nr; done
- ........
for i in /var/spool/; do echo $i; find $i |wc -l|sort -nr; done
文件夹里有70W+文件,于是重复上述步骤,终于找到了罪魁祸首
for i in /var/spool/postfix/maildrop/; do echo $i; find $i |wc -l|sort -nr; done
/var/spool/postfix/maildrop/下有67W+文件
使用rm -rf ./* ,哎呀,不给删?报错:
/bin/rm: argument list too long
最后使用ls |xargs rm -rf 删除。。。。或者
- find . -name "*" | xargs rm -rf 也行。
要注意的是下面这几个目录当安装了sendmail服务但是没有开启的话,这个目录也会临时产生大量的小文件,
# cd /var/spool/clientmqueue
# cd /var/spool/postfix/maildrop
# cd /var/spool/postfix/incoming
分别进入该目录后,使用下列命令删除即可
# ls | xargs rm –rf
原因分析:
原来是crontab里面定时执行的句子里没有加 > /dev/null 2>&1,系统中cron执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了很大零碎的文件。
附加:启动和停止Postfix服务(https://www.wenrouge.com/post/1419)
系统中cron执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了这些文件;
解决办法: 将crontab里面的命令后面加上>/dev/null 2>&1
另可参考 https://www.wenrouge.com/post/1538
---
转载请注明本文标题和链接:《No space left on device很多时候是由于没有inode了》
发表评论