我有几个包含数百GB文件的大目录,我想在工作之间保持同步。 Rsync是传输新文件的明显select(两台机器都是Linux),但带宽使用率是一个问题。 有没有办法使用rsync将增量存储在目录中(在便携式驱动器上),然后使用另一侧的那些增量进行同步?
你可以从一个磁盘位置到另一个磁盘位置,但据我所知,没有办法存储rsync将使用的deltas(因为没有办法保证文件从一个盒子到下一个盒子仍然是相同的)。
你可以使用500GB或1TB的外部硬盘(rsync,把它带回家,rsync等等)来做你所要求的 – 而且你还可以得到额外的备份设备。
或者,您可以使用bsdiff&bspatch来创build二进制diff文件,但是这需要您放置“原始”文件(使每个文件的存储需求增加一倍 – 尽pipe是短暂的,并且不需要外部HD)。
数据变化有多快? 你需要双向同步吗? Rsync在优化search差异方面非常出色,所以networkingI / O的数量通常比调和系统所需的磁盘I / O的数量要less得多 – 也就是说磁盘I / O通常是限制因素数据集可以同步的速度。
你在同步什么? 如果它只是小文件,而且你知道系统上次同步的时间,那么你可以select从那时起被修改的文件和rsync(或复制)这些文件:
find /stuff/to/mirror -type f -cnewer /var/sync/lastrun >listofnew touch /var/sync/lastrun # then rsync the files using xargs or copy them onto a drive
如果它的大型数据库文件 – 这是一个不同的故事 – 它可能会更好地使用应用程序级处理(如MySQL的复制)。
另一种方法是在VPN之上使用networking文件系统(NFS,Samba等),并使用覆盖文件系统来批量更改。
或者你可以使用像AFS这样的东西。
我仍然认为标准的rsync可能是最好的解决scheme。
就我所知, rsync不会做双向同步。 但是unison ( Debian包 , 原来的主页 )可以。 在家和可移动驱动器(或多个驱动器,如果您将其中的文件夹划分)之间进行双向同步,然后在可移动驱动器和工作驱动器之间进行双向同步。
如果您同时更改两端的特定文件,您仍然需要弄清楚要执行的操作。 但是,如果每一次都是单向的,那应该是防弹的。 如果事情按照devise进行,你就不必知道变化应该传播到哪个方向。
再一次,我不得不怀疑,是否真正的解决scheme是将整个VM虚拟化。 虚拟机是否可以在工作和家中使用通用的configurationpipe理系统,使用相同的版本控制库进行代码签出? 虚拟机是否可以存储在外部驱动器上,并随身携带回家并根据需要进行工作?