温馨提示×

centos spool为何满仓

小樊
32
2026-10-23 08:04:13
栏目: 智能运维

在 CentOS 系统中,spool(缓冲/暂存目录)满仓(磁盘空间占满)是非常常见的问题。下面从是什么、常见原因、排查方式、解决办法、预防建议几个方面说明。


一、什么是 spool(/var/spool)

/var/spool 用于存放等待处理的临时数据,常见子目录包括:

  • /var/spool/mail:用户邮件
  • /var/spool/postfix:Postfix 邮件队列
  • /var/spool/cron:cron 任务
  • /var/spool/cups:打印队列
  • /var/spool/audit:审计日志(某些情况)
  • /var/spool/clientmqueue:sendmail 邮件队列(老系统)

一旦这些目录堆积过多文件,就会导致磁盘 100%。


二、CentOS spool 满仓的常见原因

1️⃣ 邮件队列堆积(最常见)

  • 系统中有 cron 脚本输出未重定向
  • sendmail / postfix 无法发送邮件
  • 邮件不断堆积在:
    /var/spool/clientmqueue
    /var/spool/postfix/maildrop
    /var/spool/mail
    

✅ 典型现象:

  • cron 日志大量 sendmail: deferred
  • 磁盘被几万个小文件占满

2️⃣ 用户邮件文件过大

  • 系统用户(如 root、www、nginx)长期收邮件
  • 文件:
    /var/spool/mail/root
    
    可能达到几十 GB

3️⃣ 打印队列(CUPS)

  • 打印机不可用
  • 打印任务不断堆积
/var/spool/cups

4️⃣ 审计或日志写入 spool

  • auditd 配置异常
  • 自定义程序写入 spool 目录

5️⃣ inode 耗尽(不是空间满)

  • 小文件太多(如 maildrop)
  • df -h 没满,但 df -i 满了

三、如何快速排查

1️⃣ 看磁盘占用

df -h
df -i

2️⃣ 找大目录

du -sh /var/spool/*

3️⃣ 找文件数量最多的目录

for d in /var/spool/*; do
  echo "$d: $(find $d | wc -l)"
done

四、常见处理方案

✅ 1. 清理邮件队列(谨慎)

# Postfix
postqueue -p
postsuper -d ALL

# sendmail
sendmail -q
rm -f /var/spool/clientmqueue/*

⚠️ 删除前确认不是重要邮件


✅ 2. 清空用户邮件

> /var/spool/mail/root

✅ 3. 修复 cron 输出问题(根本解决)

在 cron 中加重定向:

* * * * * /script.sh >/dev/null 2>&1

或禁用邮件:

MAILTO=""

✅ 4. 清理打印队列

cancel -a
rm -rf /var/spool/cups/*

五、如何避免再次满仓

✅ 建议做法:

  • cron 必须重定向输出
  • 禁用不必要的 sendmail
  • 定期清理:
    logrotate + tmpwatch
    
  • 监控:
    df -h
    mailq
    

六、如果你愿意

你可以贴出:

df -h
du -sh /var/spool/*

我可以帮你精准判断是哪一个 spool 目录导致满仓,并给出安全清理命令。

0 踩