从备份恢复时如何防止 postfix 从其 mailq 重新发送消息(我可以在重新启动之前删除它们吗?)

从备份恢复时如何防止 postfix 从其 mailq 重新发送消息(我可以在重新启动之前删除它们吗?)

我正在运行一个小型应用程序服务器(树莓派),btrfs subvolume 其根文件系统为 a。该服务器有一个简单的postfix运行来捕获应用程序发送的邮件并将它们传递到主服务器。因此,如果主邮件服务器因任何原因关闭或无法访问,应用程序生成的电子邮件不会丢失。这些邮件是发给企业客户的。

btrfs subvolume应用程序本身按原样单独运行/var/log。我这样说是因为我btrfs subvolume snapshot定期使用它来备份正在运行的根文件系统。这是tar'ed为了安全保管而存放在另一台机器上。由于 rootfs 的主要更改很少发生,我目前每周进行一次,但可能会回到每月一次。

我为一家小型企业远程维护此应用程序服务器。

该树莓派最有可能出现的故障是SD卡损坏。我在家里的树莓派上发生了这种情况,它充当家庭的主要邮件服务器,尽管有所有东西的备份,但我仍然需要几天的时间才能正确恢复。因此,我正在重新考虑如何以最短的停机时间从该应用程序服务器上的此类故障中恢复。

我确信,如果这台服务器出现故障,办公室经理可以拿一张备用的预先准备好的 SD 卡来更换出现故障的 SD 卡。这对我来说就足够了ssh,用一个小的“虚拟”文件系统作为根,当我解压最终的 rootfs 时,更新/boot/cmdline.txt以启动到这个新的根(我断开连接,此时显然必须重新连接)。

唯一的问题是,当进行原始 tar 备份时,后缀 mailq 可能不为空。我不希望 postfix 启动的最后重新启动阶段注意到它的队列不为空,并且可能会从一周(甚至一个月)前的备份发送电子邮件。

在有关此问题的所有讨论中,提问者都被告知要使用postsuper -d ALL,但是当我可以在正在运行的系统上执行此操作时,为时已晚,排队的邮件很可能已经发送了!我想也许我可以chroot进入新的根目录并postsuper在重新启动之前从那里运行,但到目前为止最简单的就是删除文件;但我不知道是哪些!

处理这个问题的最佳方法是什么?

答案1

我找到了答案并尝试并测试了它,它似乎有效。

本质上,有一系列目录用于/var/spool/postfix存储消息。删除其中的所有文件,实质上会清空所有队列。当根文件系统安装在_root(在加载到树莓派之前),我用来执行此操作的代码是

_root/var/spool/postfix/{defer,bounce,maildrop,incoming,active,deferred,hold,flush} -type f -exec rm {} \;

相关内容