如何在不同磁盘上拆分Exim邮箱存储
如何在不同磁盘上拆分Exim邮箱存储
嘿,这个需求完全可以实现!Exim的配置灵活性很强,刚好能满足你把不同邮箱拆分到不同磁盘的需求。我之前帮人处理过类似的场景,给你分享几个实用的方案:
方案一:按用户列表匹配对应磁盘
这种方式适合需要精准指定每个邮箱存储位置的场景,你可以通过维护用户列表来绑定磁盘:
创建用户列表文件
在/etc/exim/目录下创建两个文件,分别记录对应磁盘的用户:/etc/exim/disk1_users:每行一个用户名,比如alice、bob/etc/exim/disk2_users:存放另一组用户,比如charlie、diana
配置专属传输器
在Exim的主配置文件中添加两个传输器,分别对应不同的磁盘挂载点:disk1_delivery: driver = appendfile directory = /mnt/disk1/mail/$local_part/Maildir maildir_format delivery_date_add envelope_to_add return_path_add disk2_delivery: driver = appendfile directory = /mnt/disk2/mail/$local_part/Maildir maildir_format delivery_date_add envelope_to_add return_path_add添加路由规则
在路由器部分添加规则,让Exim根据用户列表匹配对应的传输器:disk1_router: driver = accept local_parts = lsearch;/etc/exim/disk1_users transport = disk1_delivery disk2_router: driver = accept local_parts = lsearch;/etc/exim/disk2_users transport = disk2_delivery记得把这两个路由器放在默认本地路由的前面,确保优先匹配。
方案二:动态规则自动分配磁盘
如果你的邮箱地址有规律(比如按首字母、域名拆分),可以用正则或哈希实现自动分配,不用手动维护用户列表:
修改默认的local_delivery传输器的directory配置,比如按用户名首字母拆分:
local_delivery: driver = appendfile # 把a-f开头的用户放到disk1,其余放到disk2 directory = /mnt/disk${lookup{$local_part}{regex{^[a-f]}{1}{2}}}/mail/$local_part/Maildir maildir_format delivery_date_add envelope_to_add return_path_add
你可以根据自己的需求调整正则逻辑,比如按域名拆分、按用户ID范围拆分都可以,甚至调用外部脚本返回对应的磁盘编号。
重要注意事项
- 权限配置:确保Exim进程对目标磁盘的邮箱目录有读写权限,迁移已有邮箱时,记得手动移动Maildir目录并修改权限(比如
chown -R user:user /mnt/disk1/mail/user)。 - 配置测试:修改配置后先用
exim -bV检查语法是否正确,再用exim -bt user@yourdomain.com测试路由是否匹配到了对应磁盘的传输器。 - 数据备份:操作前最好备份所有邮箱数据,避免迁移过程中出现意外。
备注:内容来源于stack exchange,提问作者Imuniser
相关产品推荐
相关产品推荐

