我有几个大型目录,其中包含数百 GB 的文件,我想让这些文件在家里和工作间保持同步。Rsync 是传输新文件的明显选择(两台机器都是 Linux),但带宽使用是一个问题。有没有办法使用 rsync 将增量存储在目录中(在便携式驱动器上),然后在另一端使用这些增量进行同步?
答案1
您可以从 rsync 从一个磁盘位置到另一个磁盘位置,但据我所知,没有办法存储 rsync 使用的增量(因为没有办法保证文件从一个盒子到另一个盒子仍然相同)。
您可以使用 500GB 或 1TB 的外部硬盘驱动器完成您的要求(rsync 到该硬盘驱动器,将其带回家,再 rsync 到那里,等等) - 并且您可以获得额外备份设备的好处。
或者你可以使用bsdiff 和 bspatch创建二进制差异文件,但这要求您拥有“原始”文件(使每个文件的存储需求加倍 - 尽管时间很短并且不需要外部硬盘)。
答案2
数据变化有多快?您需要双向同步吗?Rsync 非常擅长优化差异搜索,因此网络 I/O 量通常比协调系统所需的磁盘 I/O 量小得多 - 即磁盘 I/O 通常是数据集同步速度的限制因素。
您要同步什么?如果只是一些较小的文件,并且您知道系统上次同步的时间,那么您可以找出自那时以来修改过的文件并 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 上使用网络文件系统(NFS、Samba 等),并使用覆盖文件系统来批量处理更改。
或者您可以使用 AFS 之类的东西。
我仍然认为标准 rsync 可能是最好的解决方案。
答案3
rsync
据我所知,无法进行双向同步。但unison
(Debian 软件包,原始主页) 可以。在主驱动器和可移动驱动器(或多个驱动器,如果您在它们之间划分文件夹)之间进行双向同步,然后在可移动驱动器和工作驱动器之间进行双向同步。
如果你同时在两端更改某个文件,你仍然需要弄清楚该怎么做。但如果每次更改都是单向的,那么它应该是万无一失的。如果一切按设计运行,你就不必弄清楚更改应该传播到哪个方向。
再次,我不得不怀疑 rsyncing 整个虚拟机是否是真正的解决方案。工作场所和家中的虚拟机是否可以置于通用配置管理系统下,使用相同的版本控制存储库进行代码签出等?虚拟机是否可以存储在外部驱动器上,并根据需要随您一起回家和工作?