邮件服务器磁盘满了怎么办?哪些目录可以先清?

邮件服务器磁盘满了怎么办?哪些目录可以先清?
第一步:快速定位磁盘占用——不要盲目删。
# 找出最大的目录
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20

# 邮件相关的关键目录
du -sh /var/spool/postfix/*
du -sh /var/vmail/*        # Dovecot 邮件存储
du -sh /var/log/mail*
第二步:按安全顺序清理(越靠前越安全):
① 日志文件 —— /var/log/mail.log*/var/log/syslog*:先压缩(gzip *.log.1),再删除超过 14 天的归档。更优方案是提前配置 logrotate(见 FAQ-30)。
② Postfix 延迟队列中的死信 —— postqueue -p | tail -1 查看队列总数;mailq | grep -c "^[A-F0-9]" 精确统计。删除特定发件人的积压邮件:mailq | grep 'sender@spam.com' | cut -d' ' -f1 | postsuper -d -
③ 垃圾邮件/病毒邮件隔离区 —— 如果使用 SpamAssassin / Amavis / rspamd,检查隔离目录:du -sh /var/lib/amavis/virusmails/ /var/spool/spamassassin/。清理超过 7 天的隔离邮件。
④ 用户邮箱中的大附件 —— 用脚本统计 /var/vmail/ 下每个用户目录大小:du -sh /var/vmail/*/* | sort -hr | head -20。联系占用最大的前 5 个用户清理。
⑤ 邮件归档存储 —— 检查是否有自动备份任务将归档写入系统盘而非数据盘。
最后手段——不应轻易使用:删除 Postfix 活跃队列(/var/spool/postfix/active/)中的邮件会导致正常邮件丢失。仅在磁盘满到 Postfix 无法写入新邮件时,通过 postsuper -d ALL deferred 仅清延迟队列(含死信),保留活跃队列。

📎 RFC 5321 Section 4.5.4.1 重试与队列管理