WenRou's Blog

新浪微薄腾讯微薄

最新碎语:测试图片碎语哦

您的位置:WenRou's Blog >工作> No space left on device很多时候是由于没有inode了

No space left on device很多时候是由于没有inode了

可以先使用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

---

转载请注明本文标题和链接:《No space left on device很多时候是由于没有inode了

发表评论

28 + 4 =
路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(1)

看来也是技术大户!
绅士福利 6年前 (2018-04-13) 回复