一个 Rsync 客户端需要 10 多个小时

一个 Rsync 客户端需要 10 多个小时

rsync 版本 3.1.3-6 协议版本 31 cifs-utils/stable 2:6.8-2 amb64 nfs-common/stable 1:1.3.4-2.5 Debian Linux 10 Buster FreeNAS 11.3-U3.2 (IxSystems FreeNAS Mini)

我使用小型虚拟 Debian Linux 服务器来备份一些远程设施的场景。我使用 Debian 服务器 - 因为我无法让 FreeNAS (FreeBSD) 一致地挂载 cifs 共享而无需大惊小怪,我对 Linux 更熟悉一点,如果可以避免的话,我不喜欢在 FreeNAS 的引擎盖下搞乱 - 但是我可以让 Debain 一致且可靠地挂载 cifs,以及使用 NFS 挂载 FreeNAS 服务器 - 这几个月来一直运行良好。所以我的小型 Debian 备份服务器是 FreeNAS 服务器和我的客户端计算机之间的桥梁。

Debian - Mount 和 NFS 在启动时共享到 FreeNAS - 永久 - 没有遇到问题。 Debian - 每 6 小时运行一次小批量脚本来安装目标客户端 Windows PC,然后将其数据从安装的 cifs 共享 rsync 到安装的 nfs 共享。

我想这可能是个问题 - 发现了这个邮政用户指出的地方

就 rsync 而言,您是在两个本地文件树之间进行复制,因此它禁用了大部分优化(包括其著名的 delta 算法)。

所以我的问题是,有没有办法强制进行优化,即使它们被认为是两个本地文件系统?在那篇文章中,他们试图删除,但我不是——我的只是备份所有用户囤积的内容。

答案1

您可以使用该标志强制进行优化--no-whole-file,但除了减慢传输过程之外,它几乎不可能做任何事情。

在考虑此选项之前,请确保您使用--archive( -a) 或--times( -t) 标志,以便保留文件修改时间。结合文件大小,这将有助于rsync确定其“快速检查”是否足以跳过文件而不是重新复制它。

这就是为什么--no-whole-file这是一个坏主意。

增量算法检查文件的块以查看哪些块需要传输。对于一个小的改变来说,可能只需要改变一个块,这可能非常有吸引力。然而,为了确定哪些块已更改,必须完整读取源文件和目标文件。当您有两个不同的系统时,可以使用两个独立的处理器/磁​​盘组合并行完成此操作,并且无论如何都必须读取源文件,因此唯一的命中是读取目标系统上的目标文件。但是,当您有两个本地文件系统时,仍然需要读取两个文件,但处理器和磁盘争用就会出现。

在最坏的情况下,这意味着要写入一个已更改的块,必须从头到尾读取两个文件。但此时您可能已经读取了一个并写入了另一个,因为无论如何您仍然需要重写部分或全部目标文件。

相关内容