You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

双向Rsync同步Samba共享的问题咨询

双向Rsync同步Samba共享的问题咨询

嗨,我来帮你捋捋这个双向同步的问题~

你考虑设置主从服务器的思路完全正确!双向无主从的rsync同步本来就天生容易踩你遇到的这些坑,尤其是两边都有用户在修改文件的时候,谁后执行同步谁就会覆盖掉另一边的修改,完全不可控,而且删除操作的同步也会彻底乱套。

先逐个拆解你的问题,再给你具体的解决建议:

1. 文件冲突覆盖 & 删除残留问题

这两个问题本质上都是双向同步的锅。如果改成主从模式,规定只有主服务器接受用户的写入修改,从服务器设为只读,就能从根源上避免冲突:

  • 所有用户的编辑、删除操作都在主服务器上完成,从服务器只做同步镜像
  • 同步时只需要从主到从单向执行rsync,用--delete参数保证从服务器和主服务器完全一致,主服务器删了文件,从服务器也会跟着删,不会有残留;也不会出现双向同步导致的“删了又被同步回来”的问题

如果业务上真的没办法改成主从(比如必须允许两边都能写),那rsync就不太适合了——它没有版本控制或冲突检测能力。这时候可以试试Unison工具,它能检测到两边的文件修改差异,要么提示你手动解决冲突,要么按照文件修改时间自动选择保留哪一份,不过它的配置比rsync复杂,需要两边都安装Unison。

2. 被占用文件无法复制的问题

这个在Samba共享场景里太常见了,rsync本身绕不开文件锁定的问题,给你两个实用的解决办法:

  • 给rsync加上--ignore-errors参数,遇到无法读取的被占用文件会直接跳过,下次同步时再尝试。建议搭配--log-file=/var/log/rsync_samba.log把错误记录下来,方便后续检查哪些文件没同步成功
  • 如果是Windows服务器跑Samba,可以用**卷影复制服务(VSS)**先创建共享目录的快照,然后从快照目录同步,这样就能避开被锁定的文件;如果是Linux服务器上的Samba,也可以用LVM快照这类工具,先拍快照再同步,同步完成后删除快照

优化后的主从模式rsync命令

假设主服务器是/loc1所在机器,从服务器是/loc2所在机器,每天固定时间同步一次,命令可以改成这样:

rsync -avth --delete --ignore-errors --max-size=500m --exclude={'*exe','*msi','*zip'} -e "ssh -i key" /loc1/ user@slave-server:/loc2/

注意路径末尾的斜杠/:/loc1/是同步loc1目录下的所有内容,而不是把loc1目录本身复制到/loc2里(之前的命令可能会导致/loc2/loc1的冗余结构,这个要注意调整)

总结一下:优先推荐主从单向同步方案,这是最稳定、最容易维护的,能一次性解决你现在遇到的所有问题。如果必须支持双向写入,再考虑Unison这类专门的双向同步工具。

备注:内容来源于stack exchange,提问作者fnsq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:45:27