我们有一个 RPM 存储库(在 Centos 6 机器上),需要将其推送到另一台机器。到目前为止,我们一直在使用rsync -av --delete
网络简单地推送存储库目录。这会导致远程存储库在同步期间不可用 - 在完成之前rsync
,repodata
不匹配当前的 rpm 包,并且同步repodata
也不是原子的。
如何通过 ssh 自动同步两个存储库?
我希望远程存储库随时可用,即使在数据传输期间也是如此。我知道我可以通过复制存储库到临时目录,然后移动/符号链接它来实现这一点,但感觉应该有更好的解决方案。
答案1
使用重新同步来自 yum-utils 包。手册页dnf
。我认为即使你的 yum 被替换成那个,它仍然有效。
reposync
是一个 Python 脚本。我们可以看到它确实
# Lock if they've not given an explicit cachedir
...
my.doLock()
如果我们pydoc yum.YumBase
看看
doLock(self, lockfile='/var/run/yum.pid')
Acquire the yum lock.
因此它似乎锁定了其他 yum 访问,这可能不是您想要的。
答案2
一种接近的方法是 rsync 到另一个目录名,然后执行几个快速的 mv:
rsync -avP repo 远程计算机:/dir/repo.new ssh 远程机器“mv /dir/repo /dir/repo.old; mv /dir/repo.new /dir/repo”
然后,您可以根据需要删除旧目录。存储库不可用/不一致的时间将最小化。