我正在新磁盘上从 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
我的主要 userdb 是 passwd,我用另一个 userdb 覆盖了所有用户:
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 作为传递代理:
邮箱命令 = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"
dovecot-lda 是否可能不理解覆盖?以及为什么它仍然为该用户提供旧的 $HOME ,无论它是否已更改?
问题是它
dovecot-lda
不进行 userdb 查找,并且我的覆盖mail_location
没有生效。在文档中提到,答案是添加-d "$USER"
到参数中。在 postfix 中,配置
mailbox_command
应该是:mailbox_command = /usr/lib/dovecot/dovecot-lda -d "$USER" -f "$SENDER" -a "$RECIPIENT"
您是否查看过https://wiki2.dovecot.org/Migration/MailFormat?这通常很容易使用 dsync 使用那里的说明来完成。