WenRou's Blog
No space left on device很多时候是由于没有inode了
2017-8-20 温柔哥


可以先使用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下的目录一个个的执行了上面的命令






  1. for i in /var/cache; do echo $i; find $i |wc -l|sort -nr; done   


  2. for i in /var/db; do echo $i; find $i |wc -l|sort -nr; done   


  3. ........


当执行到下面的时候






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 删除。。。。或者




  1. 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

评论:
绅士福利
2018-04-13 18:15 回复
看来也是技术大户!
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容