Dovecot 的邮件存储主要在 Maildir 目录下,例如:
/var/mail/Maildir
里面包含:
cur/
→ 已读邮件new/
→ 新邮件tmp/
→ 临时邮件.Sent
,.Drafts
,.Trash
,.Junk
,.Archive
→ IMAP 文件夹- Dovecot 索引文件:
dovecot-uidlist
、dovecot.index.*
等
建议备份内容:
- 邮件内容(Maildir 下的
cur/new/tmp
+ 所有.文件夹
) → 必备 - 索引文件(可选) → 方便恢复时 IMAP 快速同步,但不是必需的
- 订阅信息(
subscriptions
) → 可选
如果只是为了邮件数据安全,备份邮件内容即可。索引和 UID 文件可在恢复后让 Dovecot 重新生成。
备份方法
方法 A:直接复制 Maildir(小型/测试环境)
# 停止 Dovecot 服务(可选,保证一致性)
systemctl stop dovecot
# 复制整个 Maildir
cp -a /home/user/Maildir /backup/maildir_backup_$(date +%F)
# 或使用 tar 压缩
tar czf /backup/maildir_backup_$(date +%F).tar.gz -C /home/user Maildir
# 启动 Dovecot
systemctl start dovecot
-a
保留权限和时间戳- 这样可以完整备份邮件内容和文件夹结构
方法 B:使用 doveadm backup
(推荐)
Dovecot 自带工具,可以在线备份,不需要停止服务:
doveadm backup -u 用户名 /backup/maildir_backup
- 会备份用户邮件并保持 UID/标记一致
- 支持增量备份:
doveadm backup -u 用户名 /backup/maildir_backup
重复执行时,只复制变化的邮件
方法 C:使用 rsync 增量备份
rsync -av --delete /home/user/Maildir/ /backup/maildir_backup/
-a
→ 保留权限、时间戳--delete
→ 保持备份目录和原目录一致- 适合每天定时 cron 自动增量备份

恢复方法
邮件备份恢复有 覆盖恢复 和 合并恢复 两种需求。下面详细说明操作方法。
情况 1:完全恢复
目标:把备份的 Maildir 完全替换掉当前的邮箱(包括邮件和索引)。
步骤
- 停止 Dovecot 服务(保证索引一致):
systemctl stop dovecot
- 覆盖 Maildir:
# 假设备份在 /backup/maildir_backup
rm -rf /home/user/Maildir
cp -a /backup/maildir_backup /home/user/Maildir
或者压缩包:
tar xzf /backup/maildir_backup.tar.gz -C /home/user/
- 修复权限:
chown -R user:user /home/user/Maildir
chmod -R 700 /home/user/Maildir
- 启动 Dovecot:
systemctl start dovecot
这样做后,邮箱完全回到备份时的状态,所有索引和邮件都是备份的版本。
情况 2:合并恢复
目标:保留当前邮箱的新邮件,同时把备份里的邮件加回来。
方法 A:直接复制邮件文件(适合 Maildir)
- 不要覆盖现有目录
- 只把备份中的邮件文件拷贝到对应目录:
# 备份目录
BACKUP=/backup/maildir_backup
MAILDIR=/home/user/Maildir
# 复制 cur 和 new 下的邮件
cp -an $BACKUP/cur/* $MAILDIR/cur/
cp -an $BACKUP/new/* $MAILDIR/new/
-a
→ 保留权限和时间戳-n
→ 不覆盖已有文件(避免覆盖新邮件)
- 子文件夹合并
- 遍历所有
.Sent
,.Drafts
等文件夹:
- 遍历所有
for folder in $BACKUP/.*; do
[ -d "$folder" ] || continue
target="$MAILDIR/$(basename $folder)"
mkdir -p "$target/cur" "$target/new" "$target/tmp"
cp -an "$folder/cur/"* "$target/cur/"
cp -an "$folder/new/"* "$target/new/"
done
- 修复权限:
chown -R user:user $MAILDIR
chmod -R 700 $MAILDIR
- 重建索引(可选)
- 如果想确保索引和 UID 一致,可以用:
doveadm force-resync -u user
force-resync
会让 Dovecot 重新扫描 Maildir 并生成索引文件,保证 IMAP 客户端正确显示邮件。
方法 B:使用 doveadm import
(推荐生产环境)
如果备份是 Maildir 格式,Dovecot 提供的命令可以安全导入邮件:
doveadm import -u user Maildir:/backup/maildir_backup/ cur
doveadm import -u user Maildir:/backup/maildir_backup/ new
- 优点:不会破坏现有邮件
- 自动处理 UID 和索引
注意事项
- 不要直接覆盖当前邮箱目录,否则新邮件会丢失。
- 备份索引文件不是必须,Dovecot 可以自动重建。
- 子文件夹(如
.Sent
,.Trash
)也要合并。 - 权限必须正确,否则 Dovecot 无法访问。