首页 / 运维指南 / 正文

Dovecot 邮件的备份与恢复

2025年9月21日 18 浏览 0 评论

Dovecot 的邮件存储主要在 Maildir 目录下,例如:

/var/mail/Maildir

里面包含:

  • cur/ → 已读邮件
  • new/ → 新邮件
  • tmp/ → 临时邮件
  • .Sent, .Drafts, .Trash, .Junk, .Archive → IMAP 文件夹
  • Dovecot 索引文件:dovecot-uidlistdovecot.index.*

建议备份内容

  1. 邮件内容(Maildir 下的 cur/new/tmp + 所有 .文件夹) → 必备
  2. 索引文件(可选) → 方便恢复时 IMAP 快速同步,但不是必需的
  3. 订阅信息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 完全替换掉当前的邮箱(包括邮件和索引)。

步骤

  1. 停止 Dovecot 服务(保证索引一致):
systemctl stop dovecot
  1. 覆盖 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/
  1. 修复权限
chown -R user:user /home/user/Maildir
chmod -R 700 /home/user/Maildir
  1. 启动 Dovecot
systemctl start dovecot

这样做后,邮箱完全回到备份时的状态,所有索引和邮件都是备份的版本。


情况 2:合并恢复

目标:保留当前邮箱的新邮件,同时把备份里的邮件加回来。

方法 A:直接复制邮件文件(适合 Maildir)

  1. 不要覆盖现有目录
    • 只把备份中的邮件文件拷贝到对应目录:
# 备份目录
BACKUP=/backup/maildir_backup
MAILDIR=/home/user/Maildir

# 复制 cur 和 new 下的邮件
cp -an $BACKUP/cur/* $MAILDIR/cur/
cp -an $BACKUP/new/* $MAILDIR/new/
  • -a → 保留权限和时间戳
  • -n → 不覆盖已有文件(避免覆盖新邮件)
  1. 子文件夹合并
    • 遍历所有 .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
  1. 修复权限
chown -R user:user $MAILDIR
chmod -R 700 $MAILDIR
  1. 重建索引(可选)
    • 如果想确保索引和 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 和索引

注意事项

  1. 不要直接覆盖当前邮箱目录,否则新邮件会丢失。
  2. 备份索引文件不是必须,Dovecot 可以自动重建。
  3. 子文件夹(如 .Sent, .Trash)也要合并。
  4. 权限必须正确,否则 Dovecot 无法访问。

本文链接:https://www.aiunk.com/114318/

“即使得不到旁人的认同,即使不曾拥有像样的地位,我们小小的双手也一定,能为明天的某人带去笑容。”

—— 未知《尽管我们的手中空无一物》

本站内容来源于互联网,所有转载、引用的文章、图片、视频等素材均来自网络公开渠道。我们对所转载的内容的版权和合法性不做任何保证。如果原作者或版权方认为本站内容侵犯其合法权益,敬请原作者或版权方及时联系我们,我们将在第一时间进行核实和处理,必要时删除相关内容。 本站的所有内容仅供个人学习与研究之用,不得用于任何商业用途。如需使用本站内容进行商业用途,请与原作者或版权所有者联系获取授权。 如有任何疑问或建议,请联系我们。

分享: