我正在新磁盘上将 mbox 迁移到 mdbox。从 /mnt/mail/$user 迁移到 /mnt/mail2/$user
当前 mail_location = mbox:~/mail:INBOX=/mnt/mail/%u/mail/Inbox
新的 mail_location = mdbox:/mnt/mail2/$user/mdbox
我的主要用户数据库是 passwd,并且我使用另一个用户数据库覆盖了所有用户:
userdb {
driver = passwd
result_success = continue-ok
}
userdb {
driver = passwd-file
args = username_format=%u /etc/dovecot/passwd.override
skip = notfound
}
第一步,覆盖该用户的 mail_location:
$user:::::::userdb_mail_location=/mnt/mail2/%u/mdbox
开始迁移:
doveadm sync -f -u $user mbox:/mnt/mail/$user/mail:INBOX=/mnt/mail/$user/mail/Inbox
同步顺利,所有文件夹和邮件都位于 /mnt/mail2/$user/mdbox 的 mdbox 位置。
然后将该用户的主目录从 /mnt/mail/$user 更改为 /mnt/mail2/$user,并设置权限。
/etc/passwd 显示用户的主目录是 /mnt/mail2/$user。
/etc/dovecot/passwd.override 包含该用户的新 mdbox mail_location。
不幸的是,当新邮件到达时,它仍然会转到旧的 mbox。
Postfix 使用 dovecot-lda 作为传送代理:
mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"
有可能 dovecot-lda 无法理解覆盖吗?为什么它仍然为该用户提供旧的 $HOME,而不管它是否已更改?
答案1
问题是dovecot-lda
不进行用户数据库查找,并且我的覆盖mail_location
没有生效。在文档,答案就是添加-d "$USER"
到参数中。
在 Postfix 中,配置mailbox_command
应为:
mailbox_command = /usr/lib/dovecot/dovecot-lda -d "$USER" -f "$SENDER" -a "$RECIPIENT"
答案2
你调查过吗https://wiki2.dovecot.org/Migration/MailFormat? 按照那里的说明,使用 dsync 通常可以很容易地完成此操作。