windows 工具robocopy
有一个命令行开关/NOOFFLOAD
。这个开关实际上是做什么的,在什么情况下我会使用它?
开关的文档说
/NOOFFLOAD :: copy files without using the Windows Copy Offload mechanism.
对“Windows 复制卸载机制”的进一步研究导致了这个 msdn 文档,但我无法理解禁用卸载实际上会产生什么影响。
如果网络文件共享位于使用“窗口复制卸载”的服务器上,那么/NOOFFLOAD
在复制过程中使用有哪些明显的好处/缺点?
例如,它会增加或减少服务器上的负载,还是以其他资源为代价加快传输速度?
理论上,远程服务器上的负载(按总和)是相同的。从一个服务器下载的数量相同,上传到另一个服务器的数量相同,但是该负载的焦点发生了转移。
从您的链接:
通过将副本卸载到服务器,它成为执行副本的服务器本身。对于同一数据中心中的两台服务器,它可以快得多,因为复制可以以本地数据中心链接速度进行。如果您与两台服务器的连接速度为 10mbps,但它们的本地连接速度为 10gbps,那么相比之下,本地复制速度将非常慢。它可能会导致更高的即时 CPU 或网络负载,但传输速度可能会更快。由于您和服务器之间的各种网络设备导致的延迟较低,因此传输甚至可能更有效。
如该链接中所述,通过将副本卸载到服务器本身,您几乎可以完全从等式中删除您的本地计算机:
所以不管是同一台服务器还是不同的服务器,复制操作都会更有效率,并且会使用任何可用的东西。
在具有重复数据删除功能的服务器或集群上,副本在 CPU 和磁盘时间方面可能实际上是零成本,因为在进行更改之前不需要复制实际的文件数据。只需要创建一个文件引用。在这种情况下,使用
/NOOFFLOAD
将浪费大量资源,因为您将下载数据并重新上传它,同时迫使服务器重新检查和重复数据删除。禁用卸载将强制下载通过您的计算机。您将从一台服务器下载数据并将其上传到另一台服务器。在某些情况下,这可能是可取的,特别是如果您知道自己位于两台服务器之间并且拥有更有效的链接,可能使用较少的路由或管理设备。
卸载是一种优化机制:当您在不在您机器上的两个位置之间复制文件时,如果这些位置可以相互同意直接执行传输,则您的机器不需要查看数据。这是一个可选的优化,将在可能的情况下使用。但是
/NOOFFLOAD
禁用它,所以即使可以使用优化 - 它也不会。这基本上是一种过早的悲观情绪。实际使用它的理由很少。有时坚持/NOOFFLOAD
会确保实际执行数据的副本,而不是硬链接文件。需要明确的是,事实并非如此,并且使用此选项代替备份是愚蠢的差事 - 通常附有价格标签。在卸载机制可用的情况下,存储通常会进行重复数据删除,即使数据会在您的系统中往返,它也会这样做,只是为了到达将丢弃重复块的块重复数据删除过滤器。换句话说:
/NOOFFLOAD
不会让任何事情变得更好,但它会让事情变得更糟,最终结果完全相同 - 如果你很幸运(继续阅读)。我所知道的唯一用例
/NOOFFLOAD
是网络压力测试,这与技术上精明但“普通”的高级用户有关。如果您想在网络和存储系统上增加一些负载,/NOOFFLOAD
将确保您在数据量混乱的情况下获得最坏的情况。虽然这不是免费的:使用/NOOFFLOAD
增加了副本中数据损坏的可能性. Windows 虚拟文件系统中没有端到端的数据完整性保护,并且在没有卸载的情况下完成的文件复制具有可测量的位翻转潜力。这对边缘系统和网络的打击尤其严重。因此,如果您认为您想要进行压力测试,请使用您不关心的数据来进行,即一旦它们同步到磁盘就删除它们。