如果没有远程运行守护进程,那么 rsync (3.1.1) 的优势就让我感到困惑,例如从通过 SMB2(通过 VPN)安装的驱动器复制到外部硬盘(遗憾的是 USB 2.0)。两个连接都很慢(我的数据约为 1TB),但我很困惑,如果所有这些都需要我的 CPU 首先读取数据,那么压缩或仔细比较差异如何能加快速度,不是吗?从这个意义上说,两个驱动器都是本地的。(我无法通过 rsync 用 SSH 替换 SMB 连接,因为它无法处理我的密码。)或者即使使用远程驱动器,如果在数据到达本地 CPU 之前另一端没有人进行压缩,那么 rsync 如何发挥其魔力,我也很困惑。
对于这样的复制来说,这是一个合理的设置吗?
rsync -vhcrC --progress src dest
-c: Maybe checksums are a bad idea, file size and timestamp might be the only thing rsync can check without loading the data in in the first place.
-h: human-readable output
-v: verbose
-C: skipping what CVS skips
省略:
-a: I am not interested in archiving, as files move from Windows to mac, permissions will change anyway, I think
-z: this is the compression issue
-W: sometimes copying whole-files-only use less of the CPU, but some files are really big here (~100GB), and an interrupted transfer is better restarted
答案1
注意:以下内容均脱离理论——真正正确的方法是针对各种选项组合进行测试。
rsync 操作中的数据连接如下所示:
Source disk <-> rsync instance <-> other rsync instance <-> destination disk
一般来说,rsync 是为第一个和最后一个链接(rsync 实例和它们的磁盘之间)速度快,而中间链接(rsync 实例之间)速度慢的情况而设计的。对于-z
(压缩)和-c
(用于决定传输哪个文件的校验和文件)尤其如此;在两个 rsync 都在同一台计算机上(因此连接速度很快)的情况下,这些选项基本上没有意义。
更具体地说:该-z
选项通过中间链路压缩数据,以两端更高的 CPU 负载换取中间链路更低的带宽需求。如果中间链路速度很快,请跳过此选项以节省 CPU。
至于-c
选项,这将强制两个 rsync 读取所有不需要完全同步的文件,以便确实确定它们不需要同步。如果其中一个或两个磁盘链接速度较慢,并且有大量文件已经同步,这将按比例减慢该过程。只要您不必担心文件内容发生变化而时间戳不发生变化,就应该避免使用此选项。请注意,省略此选项没有多大用处,除非您还添加选项-t
(或-a
),以便它会复制时间戳——如果没有这些,它无论如何都必须比较所有内容。
您可能还想添加选项-W
(仅复制整个文件,跳过比较并查找更改),因为这样可以避免额外读取修改的文件。不过,这可能不是必需的,因为我熟悉的所有 rsync 版本在源和目标都指定为本地路径时都会自动执行此操作(即使其中一个本地路径恰好位于网络挂载点内,也应该适用)。
简短摘要:删除-c
、添加-t
或可能-W
。