我有许多 Xen 虚拟机在许多 Linux 服务器上运行。这些 VM 将其磁盘映像存储在 Linux LVM 卷中,设备名称类似于 /dev/xenVG/SERVER001OS 等。我想定期备份这些磁盘映像,以便在需要时恢复虚拟机(LVM 设备已经在两台物理机器之间使用 DRBD 进行了镜像,我只是在这里更加偏执)。
我该怎么做?显然第一步是对 LVM 设备进行快照,但是我如何以最有效的方式将数据传输到备份服务器?我可以简单地复制整个设备,类似于:
dd if=/dev/xenVG/SERVER001OS | ssh administrator@backupserver "dd of=/mnt/largeDisk/SERVER001OS.img"
...但这会占用大量带宽。是否有类似 rsync 的工具用于在远程服务器之间同步整个磁盘块的内容?就像是:
rsync /dev/xenVG/SERVER001OS backupServer:/mnt/largeDisk/SERVER001OS.img
如果我正确理解了 rsync 的手册页,上面的命令实际上不会起作用(会吗?),但它显示了我的目标。我了解 --devices rsync 选项是复制设备本身,而不是这些设备的内容。在与远程服务器同步之前制作 VM 映像的本地副本不是一种选择,因为没有磁盘空间。
是否有一个方便的实用程序可以在块设备和远程服务器上的备份文件之间进行同步?如果必须,我可以写一个,但现有的解决方案会更好。我是否错过了为我执行此操作的 rsync 选项?
尽管 RSync 有“写入设备”和“复制设备”补丁,但它们仅适用于小图像 (1-2GB)。RSync 将花费很长时间在更大的图像上搜索匹配的块,并且它对 40GB 或更大的设备/文件几乎没有用处。
我们使用以下内容执行每 1MB 的校验和比较,如果内容不匹配,则简单地复制内容。我们使用它通过公共互联网将美国虚拟主机上的服务器备份到英国的备份系统。很少的 CPU 活动和快照性能仅在几个小时后受到影响:
创建快照:
初始播种:
增量夜间备份(仅发送更改的块):
删除快照:
标准 rsync 缺少此功能,但在 rsync-patches tarball (copy-devices.diff) 中有一个补丁,可以从http://rsync.samba.org/ftp/rsync/下载 应用并重新编译后,您可以使用 --copy-devices 选项 rsync 设备。
有兴趣专门使用 LVM 快照执行此操作的人可能会喜欢我的lvmsync工具,它读取快照中已更改块的列表并仅发送这些更改。
看看Zumastor Linux Storage Project ,它通过ddsnap工具使用二进制“rsync”实现“快照”备份。
从手册页:
ddsnap 提供块设备复制,因为它具有能够有效地保存多个同时快照的块级快照工具。ddsnap 可以生成两个快照之间不同的快照块列表,然后通过线路发送该差异。在下游服务器上,将更新的数据写入快照块设备。
有一个名为blocksync的 python 脚本,它是一种通过 ssh 在网络上同步两个块设备的简单方法,只传输更改。
我最近对它进行了破解以清理它并将其更改为使用与 rsync ( Adler-32 ) 相同的快速校验和算法。
请注意,具有 LVM 快照的系统的性能与快照数量成正比。
例如lvm 快照的 Mysql 性能
如果您尝试使用 plain 尽量减少通过电线发送的空白空间量
dd
,您能否在将其通过管道传输到 ssh 之前将其传输到 gzip ?例如 dd if=/dev/xenVG/SERVER001OS | 压缩包| ssh 管理员@backupserver "dd of=/mnt/largeDisk/SERVER001OS.img.gz"
这是一个老问题,但没有人提到两个非常有用的工具来有效地同步两个块设备:
bdsync,它使用差异传输和补丁方法;
blocksync(在这里你可以找到我改进的版本),它使用了就地重写的方法。
我强烈建议使用这两种工具并选择更适合您预期用途的工具。
经过几年的搜索,我最近创建了一个用于在服务器之间同步 LVM 快照的工具。它旨在使用最少的 IO,并允许系统在同步发生时运行。
它与 ZFS 发送/接收类似,同步 LVM 快照之间的差异,并使用精简配置,从而将性能影响降至最低。
我想要反馈,所以请看一下。
除了大卫赫塞尔曼的回答- 以下脚本将同步到本地设备:
据我所知,这两个脚本首先发布在lists.samba.org 上。