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