btrfs receive 实现跨地域增量同步需两端均为 btrfs(内核≥4.12,推荐≥5.10)、接收端预留足量空间、通过 ssh 加密传输差异快照流,并配合 btrbk 自动化调度与 scrub 校验保障可靠性。

用 btrfs receive 实现跨地域增量同步,核心是配合 btrfs send 构建“差异流 + 安全传输 + 原子写入”的闭环。它不是独立工具,而是 Btrfs 文件系统原生支持的原子级数据迁移机制,天然适配异地灾备场景。
必须满足的基础条件
接收端和发送端都必须是 Btrfs 文件系统,且内核版本 ≥ 4.12(推荐 ≥ 5.10),btrfs-progs ≥ v4.12。接收端需预留足够空间——不是快照大小,而是解包后实际数据占用的空间(尤其注意压缩/未压缩状态的一致性)。跨地域网络建议使用专线或稳定公网,并启用 SSH 密钥认证(禁用密码登录)。
增量同步命令链(带压缩与加密)
典型单次增量推送示例:
btrfs send -p /mnt/btr_pool/_btrbk_snap/2026-04-26_020000 \
/mnt/btr_pool/_btrbk_snap/2026-04-27_020000 | \
gzip -c | \
openssl enc -aes-256-cbc -salt -pass file:/etc/btrbk/backup.key | \
ssh backup@dc-shanghai.example.com \
"openssl dec -aes-256-cbc -pass file:/etc/btrbk/backup.key | gunzip -c | btrfs receive /backup/pool"
说明:
• -p 指定父快照,确保只传差异块
• 先 gzip 再 openssl 加密,兼顾带宽与安全性
• 接收端路径 /backup/pool 必须是已挂载的 Btrfs 分区根目录
• 所有快照名需严格按时间戳命名,便于脚本自动识别父子关系
生产环境建议搭配 btrbk 自动化管理
手动执行易出错,推荐用 btrbk 统一调度:
- 在主数据中心配置
volume和远程target,指定 SSH 身份文件与接收路径 - 启用
snapshot_preserve和target_preserve分级保留策略(如本地留 7 天,异地留 90 天) - 设置
on_error exec触发告警(如邮件、Webhook),失败时自动暂停后续任务 - 利用
btrbk list和btrbk status监控快照链完整性,防止断代
同步后验证与容错要点
仅传输成功不等于备份可靠:
- 每次
btrfs receive完成后,立即在接收端运行btrfs filesystem usage /backup/pool确认子卷已写入 - 用
btrfs subvolume list -t /backup/pool核对快照时间戳与源端一致 - 定期抽样
btrfs scrub start /backup/pool检测静默损坏(建议每月一次) - 若传输中断,
btrfs receive支持续传:只要接收端子卷未被删除或覆盖,重跑相同 send 命令即可继续











