No space left on device

今天又遇到一个问题,touch 文件的时候提示 空间已满(No space left on device),但 df -h 的结果是每个分区都有比较大的空余。翻了10多页 Google,终于找到了答案: Ext 3 的 Inode 满了。查看的命令很简单,用df 的 -i 参数来查看 Inode 的使用率。

df -i

发现一个分区已经占用 100% 了。

于是到处找哪里小文件成堆,最后定位在了 /var/spool/clientmqueue/ 这个目录文件过多。

那就删呗,结果 rm -rf * 报错参数过多。于是

for i in `ls`; do rm $i; done

确实开始删了。。。每秒50个。。总共 120000+ 文件要删的呀,这还得了。。

mkdir /tmp/temp
rsync --delete-before -a -H -v --progress --stats /tmp/temp/ /var/spool/clientmqueue/

注意最后2个参数目录后面一定要加 / ,至于为什么直接 man rsync。

删除速度每秒1300,问题解决~

PS.

1. 正在写的监控程序要把 Inode 监控加上了…

2.  sendmail 这个东西如果不使用最好把服务关掉,这个破东西容易引发各种各样的问题 …