如何在机器间同步大型稀疏文件(VM磁盘映像)?

是否有一个命令,如rsync,可以从一个linux服务器同步大型,稀疏的文件到另一个?

目标文件保持稀疏是非常重要的。 它可能比包含它的驱动器更长(但不会更长)。 只有更改的块应通过电线发送。

我已经尝试了rsync,但没有喜悦。 groups.google.com/group/mailing.unix.rsync/browse_thread/thread/94f39271980513d3

如果我写一个程序来做到这一点,我只是重新发明轮子? http://www.finalcog.com/synchronise-block-devices

谢谢,

克里斯。

rsync --ignore-existing --sparse ... 

以稀疏模式创build新文件

其次是

 rsync --inplace ... 

要更新所有现有文件(包括之前创build的稀疏文件)。

Rsync只会将更改传输到每个文件,并且–inplace应该只重写更改的块而不重新创build文件。 从他们的function页面 。

rsync是Unix系统的文件传输程序。 rsync使用“rsyncalgorithm”,它提供了一种使远程文件同步的非常快速的方法。 它通过发送链接文件中的差异来实现这一点,而不需要事先在链接的一端存在两组文件。

使用–inplace应该为你工作。 这将向您显示进度,压缩传输(在默认压缩级别),recursion地传输本地存储目录的内容(即第一个结尾的斜杠很重要),对文件进行更改,并使用ssh作为传输。

 rsync -v -z -r --inplace --progress -e ssh /path/to/local/storage/ \ [email protected]:/path/to/remote/storage/ 

我经常使用-a标志以及其他一些事情。 这相当于-rlptgoD我将留​​下确切的行为,让您在手册页中查找。

看看Zumastor Linux存储项目,它使用二进制“rsync”通过ddsnap工具实现“快照”备份。

从手册页:

ddsnap提供块设备复制给定一个块级快照设施,能够有效地保存多个同时快照。 ddsnap可以生成两个快照之间不同的快照块列表,然后通过线路发送该差异。 在下游服务器上,将更新的数据写入快照块设备。

我结束了编写软件来做到这一点:

http://www.virtsync.com

这是商业软件,每个物理服务器花费49美元。

我现在可以在3分钟内复制一个50GB的稀疏文件(里面有3GB的内容)。

 chris@server:~$ time virtsync -v /var/lib/libvirt/images/vsws.img backup.barricane.com:/home/chris/ syncing /var/lib/libvirt/images/vsws.img to backup.barricane.com:/home/chris/vsws.img (dot = 1 GiB) [........>.........................................] done - 53687091200 bytes compared, 4096 bytes transferred. real 2m47.201s user 0m48.821s sys 0m43.915s 

可以复制整个文件系统是一个解决scheme? DRBD? http://www.drbd.org/

也许在这里有点奇怪,但是最近我发现NFS处理这个很好。

所以你在一台机器上导出一个目录,然后在另一台机器上挂载它,你只需要复制一些基本的utils文件如cp 。 (一些古老的公用事业可能会遇到稀疏文件的问题。)

我发现rsync在传输稀疏文件方面效率特别低。

lvmsync做到这一点。

这是一个使用logging 。 它在源上创build一个LVM快照,传输逻辑分区。 您可以随时随地通过快照创build传输增量更新。

我不知道这样的效用,只有系统调用可以处理它,所以如果你写这样一个实用程序,它可能是相当有帮助的。

你实际上可以做的是使用qemu-img转换来复制文件,但它只会在目标FS支持稀疏文件