如何在计算机之间同步巨大的稀疏文件(VM磁盘映像)?


22

是否存在诸如rsync之类的命令,该命令可以将巨大的稀疏文件从一台linux服务器同步到另一台linux服务器?

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

我已经尝试过rsync,但是没有任何乐趣。https://groups.google.com/forum/#!topic/mailing.unix.rsync/lPOScZgFE9M

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

谢谢,

克里斯。


rsync处理大型文件的效率非常低。即使使用--inplace,它也将首先在目标主机上读取整个文件,然后开始在本地主机上读取文件并传输差异(只需在运行rsync并观察时运行dstat或类似文件)
ndemou

Answers:


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

以稀疏模式创建新文件

其次是

rsync --inplace ...

要就地更新所有现有文件(包括以前创建的稀疏文件)。


3
反向进行同步rsync --existing --inplace,然后rsync --ignore-existing --sparse进行同步加速
Mike

2
谁能解释Mikes的评论,以及如何加快同步速度?
Preexo

我认为Mike的意思是先进行就地更改,然后再添加新内容,这样,由于第一个通话和第二个通话之间的时间差,因此不需要将新的-重新放置。仅当您直接在数据存储区之外进行rsync并且VM正在运行时,这才是正确的。除非他有别的意思?
人民币

我同意袁的说法。Steves第二个命令将再次重新同步新文件,可以通过使用Mikes命令序列来确保安全。
falstaff

rsync处理大型文件的效率非常低。看到我对这个问题的评论。
ndemou

5

Rsync仅将更改传输到每个文件,并且使用--inplace应该仅重写已更改的块,而无需重新创建文件。从他们的功能页面

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

使用--inplace应该适合您。这将向您显示进度,压缩传输(以默认压缩级别),递归传输本地存储目录的内容(第一个斜杠很重要),对文件进行更改并使用ssh进行传输。

rsync -v -z -r --inplace --progress -e ssh /path/to/local/storage/ \
user@remote.machine:/path/to/remote/storage/ 

我也经常使用-a标志,这还会做更多事情。等效于-rlptgoD,我将保留确切的行为供您在手册页中查找。


1
“ -S”用于稀疏文件,而不是“切掉长行”。从手册页:-S,-sparse有效地处理稀疏文件。我会尝试的,谢谢。
褪色的蜜蜂

谢谢,我已解决该问题-我不赞成您给出的链接中所说的内容。
reconbot

不,不幸的是,这不能解决问题。它确实会同步文件,但会将远端的稀疏文件转换为非稀疏文件。我正在使用Ubuntu 9.04随附的ssh / rsync。
褪色的蜜蜂

我的上述评论不正确。问题是rsync在其第一个副本上创建了非稀疏文件。如果目标文件已经存在并且与原始文件一样长(不大),则--inplace rsync可以正常工作。我现在有一个解决方案,但是需要我检查目标服务器上是否已经存在每个文件。如果是这样,我将执行--inplace;否则,我将使用--sparse。这不是理想的方法,但是可以。
褪色的蜜蜂

rsync处理大型文件的效率非常低。看到我对这个问题的评论
ndemou

4

我最终写了软件来做到这一点:

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 

4
TBH,您可以同步的说明时间毫无意义,因为它显然取决于更改的数据量。准确地说,是您的软件需要3分钟才能确定哪些块已更改,甚至该速度也可能取决于您的磁盘I / O和可用的CPU周期。
现实提取器

6
您应披露这是一款商业软件,其网络功能的价格为98美元或以上。
2014年

感谢您为我们指出一款对您来说效果很好的软件,人们现在可以考虑和使用该软件,也可以根据需要不使用它们。不感谢您为其他两个人所做的贡献。
Florian Heigl

3

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

从手册页:

ddsnap提供了块级快照功能,可以高效地保存多个同时快照,从而提供了块设备复制。ddsnap可以生成两个快照之间不同的快照块列表,然后通过网络发送该差异。在下游服务器上,将更新的数据写入快照的块设备。



1

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


我认为drbd在这里不是一个很好的解决方案,但是rsync的想法很有趣-将整个fs而不是磁盘映像文件代替。我不确定rsync是否允许此操作-我会尝试一下并报告一下…
fadebee 2009年

1

在这里可能有点奇怪,但是最近我发现NFS可以处理这个问题。

因此,您将目录导出到一台计算机上,然后将其安装在另一台计算机上,然后使用诸如的基本utils复制文件cp。(一些旧的/古老的实用程序可能会遇到稀疏文件的问题。)

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


1

要同步大文件或具有低到中等差异的块设备,您可以执行普通复制或使用bdsync,rsync绝对不适合这种特殊情况*。

bdsync为我工作,看起来已经足够成熟,它的错误历史令人鼓舞(小问题,迅速解决)。在我的测试中,它的速度接近您可以达到的理论最大值**(也就是说,您可以在大约需要读取文件的时间进行同步)。最后,它是开源的,不花任何钱。

bdsync从两个主机读取文件并交换校验和以比较它们并检测差异。所有这些都在同一时间。最后,它将在源主机上创建一个压缩的补丁文件。然后,您将该文件移至目标主机,然后再次运行bdsync修补目标文件。

当通过相当快的链接(例如100Mbit以太网)使用它时,并且对于差异很小的文件(在VM磁盘上最常见的情况),它可以将同步时间减少到读取文件所需的时间。通过慢速链接,您需要花费更多时间,因为您必须将压缩的更改从一台主机复制到另一台主机(看来您可以使用一个不错的技巧来节省时间,但尚未进行测试)。


*:rsync处理大型文件的效率非常低。即使使用--inplace,它也将首先读取目标主机上的整个文件,而AFTERWARDS将开始读取源主机上的文件,最后传输差异(只需在运行rsync并观察时运行dstat或类似命令)。结果是,即使对于差异很小的文件,也需要大约两倍的时间才能读取文件以使其同步。

**:假设您没有其他方法可以判断文件的哪些部分已更改。LVM快照使用位图来记录更改的块,因此它们可以非常快(lvmsync的自述文件提供了更多信息)。


0

我不知道这样的实用程序,只是知道可以处理它的系统调用,因此,如果编写这样的实用程序,可能会很有帮助。

您实际可以执行的操作是使用qemu-img convert复制文件,但仅在目标FS支持稀疏文件时才有效

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.