为什么人们不使用rsync来备份vmware guest?

如果我正在运行现代vmware ESXi系统,则可以通过SSH将静态链接的rsync二进制文件和rsync文件放置到任何目标位置。

我试图理解为什么大多数(所有?)guest虚拟机的备份都没有这样做。

如果虚拟机正在运行,您可以简单地使用'vim-cmd vmsvc / snapshot.create'创build快照,然后将该快照rsync同步到远程主机。 (甚至有一个选项可以“停顿”快照)

或者,如果您想要更强大的备份,则可以通过vmdk文件适当地停止VM和rsync。

所以…似乎我是一个简单的shell脚本,远离我想要做的简单而简单的备份,使用普通的旧rsync。

我在这里错过了什么?

  • 因为ESXi控制台的传输速度有限。
  • 因为这不以任何方式扩展。
  • 因为您必须将静态编译的rsync二进制文件拖放到ESXi主机上。
  • 因为虚拟机,VMDK,他们的虚拟硬盘文件和其他组件可以改变,使rsync失去了一个提议… 真的想重新同步一个200GB的虚拟机重新启动,并有less量的文件更改?
  • 由于源或目标上的CPU /内存资源要求。 Rsync不是免费的。
  • 因为市场上还有其他产品,包括第三方和VMware提供的产品。 查找更改块跟踪
  • 由于ESXi 不是通用操作系统。

另请参阅: 在VMware ESX 4.1服务器上安装rsync

几年前我曾经这样做过。 (编辑:VMWare运行在CentOS主机上,不是ESXi)

每天晚上,我都有一个脚本来挂起一个虚拟机,将磁盘上的文件同步到备份服务器,然后再次启动虚拟机。 它工作得很好,除了…

对于2GB文件,Rsync不能很好地工作。

它并不是因为rsync不是很辉煌,每个2GB的vmdk文件改变的方式对rsync都是非常不透明的,甚至对封装的文件系统的小改动也会导致vmdk(或者所有的vmdks出于某种原因) Windows可以自动整理碎片,也可以做所有其他的事情,如果你正在运行一个真正的系统,那么这些并不重要,但是当你试图同步一个虚拟机的时候会显示出来。

我认为用于检测更改的rsync机制在2GB文件上不能很好地工作,而它经常跳过vmdk的开始块,一旦开始发现差异,它将简单地复制文件的其余部分。 我不知道这是否是rsync无法检测到移动的二进制数据块,或者源代码盒缺less内存,或者vmdk是否已经更新。 不要紧,因为结果是一样的 – 大多数vmdk被复制。

最后,我只是复制所有更改的文件并覆盖它们,仍然使用rsync。 我也有更好的性能,只是覆盖备份文件,而不是让rsync复制和replace那里。

我们的备份服务器也不是最快的,它已经到了隔夜不足以备份所有正在运行的虚拟机的地步。

但是,当我们确实需要恢复虚拟机时,这非常简单,并且工作得非常好。

Rsyncing单个文件不是备份解决scheme,

当vm和文件被删除时发生了什么事情,但是在rsync重新运行之后你才会注意到这一点? 您现在已经用不好的图像覆盖了文件的“备份”了。

如果你想备份,你需要保留旧版本的地方,或差异的。 Rsync只会复制你的差异,但不会只存储差异,而是覆盖以前的文件。

在这里你可能会有select,rsync和copy-on-write文件系统的版本信息,每当你的rsync脚本运行时,它们实际上就会存储差异。 这个解决scheme已经开始变得复杂了,所以这就是为什么人们使用已知的工作解决scheme。

没有任何理由不能在ESXi服务器中使用Rsync。 我们在https://33hops.com/rsync-for-vmware-vsphere-esxi.html提供静态编译的版本,效果很好。 还有如何编译自己的信息。

尽pipe如此,任何愿意使用它的人都必须考虑到Rsync及其Deltaalgorithm不会像备份虚拟机硬盘那样备份大量固定稀疏文件,而是同步可变长度的较小文件。 所以,它可以工作,但需要大量的时间和CPU来计算差异数据。 实际上这只是一种通过CPU交换带宽的方式。 无论如何,它仍然是非常可行的,特别是如果你的虚拟磁盘的数量级为几十千兆字节。

我已经在这里发表了关于这个话题的全文,详细说明了所有的优点和缺点https://33hops.com/blog_xsibackup-rsync-considerations.html