如果我正在运行现代 vmware ESXi 系统,我可以通过 SSH 将静态链接的 rsync 二进制文件和 rsync 文件放入任何目的地。
我试图了解为什么大多数(所有?) vmware 客户机备份不以这种方式完成。
如果虚拟机正在运行,您可以简单地使用“vim-cmd vmsvc/snapshot.create”来创建快照,然后将该快照 rsync 到远程主机。(甚至还有一个“静止”快照的选项)
或者,如果您想要更强大的备份,您可以正常停止 VM 并通过 vmdk 文件进行 rsync。
所以... 似乎我只需要一个简单的 shell 脚本就可以完成我想要做的所有备份,简单而又容易,只需要使用普通的 rsync 即可。
我在这里遗漏了什么?
答案1
- 因为 ESXi 控制台的传输速度是故意限制的。
- 因为这无论如何都是不可扩展的。
- 因为您必须将静态编译的 rsync 二进制文件放到 ESXi 主机上。
- 因为虚拟机、VMDK、它们的 ramdisk 文件和其他组件可能会发生足够大的变化,从而使 rsync 成为一个失败的提议……你真的想要重新同步已重新启动且有少量文件发生更改的 200GB VM 吗?
- 由于源或目标对 CPU/内存资源有要求,Rsync 不是免费的。
- 因为市场上还有其他产品,既有第三方产品,也有 VMware 提供的产品。查找修改块跟踪。
- 由于 ESXi不是通用操作系统。
答案2
几年前我曾经这样做过。(编辑:VMWare 在 CentOS 主机上运行,而不是 ESXi)
每天晚上我都会编写一个脚本,用于暂停虚拟机,将文件从磁盘 rsync 到备份服务器,然后重新启动虚拟机。它运行良好,除了...
Rsync 不能很好地处理 2GB 的文件。
这并不是因为 rsync 不够出色,而是因为每个 2GB vmdk 文件的变化方式对于 rsync 来说非常不透明,即使对封闭文件系统的微小更改也会导致 vmdk(或由于某种原因导致所有 vmdk)发生变化,我将此归咎于 Windows,要么自动碎片整理,要么执行其他所有操作,如果您运行的是真实系统,这些操作并不重要,但当您尝试 rsync VM 时就会显示出来!
我认为 rsync 检测更改的机制在 2GB 文件上效果不佳,虽然它经常跳过 vmdk 开头的部分,但一旦开始发现差异,它就会直接复制文件的其余部分。我不知道这是 rsync 无法检测到移动的二进制数据块的问题,还是源框内存不足的问题,或者是 vmdk 完全更新了。这没关系,因为结果是一样的——大部分 vmdk 都被复制了。
最后,我只是复制了所有已更改的文件并覆盖它们,仍然使用 rsync。与让 rsync 复制并替换原有内容相比,我只需覆盖备份文件即可获得更好的性能。
我们的备份服务器也不是最快的,而且一夜之间甚至不足以备份所有正在运行的虚拟机。
然而,当我们确实需要恢复虚拟机时,它真的很容易并且运行良好。
答案3
Rsyncing 单个文件不是备份解决方案,
如果虚拟机出现问题,文件被删除,但您只是在 rsync 再次运行后才注意到这一点,您会怎么做?现在您将用坏映像覆盖文件的良好“备份”。
如果您需要备份,则需要将旧版本或差异保存在某处。Rsync 将只为您复制差异,但它不会仅存储差异,而是会覆盖先前的文件。
这里可能有一些选项供您选择,使用 rsync 和带有版本信息的写时复制文件系统,这将在每次运行 rsync 脚本时有效地存储差异。这个解决方案已经开始变得有点复杂了,所以这就是为什么人们求助于已知的可行解决方案。
答案4
没有理由不能在 ESXi 服务器中使用 Rsync。我们在这里提供静态编译版本https://33hops.com/download-form.html效果很好(只需展开软件列表)。下面的链接中还有关于如何编译您自己的软件的信息。
然而,任何想要使用它的人都必须考虑到,Rsync 及其 Delta 算法并非用于备份巨大的固定长度稀疏文件(如 VM 硬盘),而是用于同步可变长度的较小文件。因此,它确实有效,但计算差异数据需要大量时间和 CPU。实际上,它只是一种通过 CPU 交换带宽的方式。无论如何,它仍然非常可行,特别是如果您的虚拟磁盘大小为几十 GB。
我在这里发表了一篇关于这个话题的完整文章,详细介绍了所有的利弊Rsync 注意事项复制 ©ESXi VM