双向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
相关产品推荐
相关产品推荐

