/j Robocopy 选项(无缓冲复制)是否有任何优点/缺点

Cla*_*ols 18 windows io robocopy buffer

Robocopy 有一个/J推荐用于复制大文件的命令行选项(它使用无缓冲 I/O 进行复制)。

有什么(如果有)缺点?默认情况下未启用的任何原因?(这就是让我认为可能存在缺点的原因。)

Ale*_*aca 14

很好的问题。

无缓冲 I/O 是从源位置到目标位置的简单文件复制。缓冲 I/O 通过将文件复制到文件系统缓存(虚拟内存的一个区域)来增强简单复制,以优化未来对同一文件的读取(和写入)。第一次访问文件时,缓冲 I/O 会导致性能损失,因为它必须将文件复制到内存中;但是,由于内存访问比磁盘访问快,因此后续文件访问应该更快。操作系统负责将文件写入同步回磁盘,读取可以直接从内存中提取。

使用说明提到了与缓冲 I/O 相比的大文件,因为:

  1. 前期成本很高。对于大文件,缓冲 I/O 的性能损失要大得多。
  2. 你得到的回报很少。大文件块无论如何都不会在缓存中停留很长时间,除非相对于文件大小您有大量内存。
  3. 它可能无法避免磁盘 I/O。大文件数据块的读写增加了需要磁盘 I/O 的可能性。
  4. 无论如何,您可能不需要缓冲。与小文件相比,大文件在实践中的访问频率往往较低。

所以有一个权衡,但哪种适合你取决于你的具体情况。如果您正在压缩一堆文件并将 zip 传输到备份目标,则无缓冲是可行的方法。复制一堆刚刚改变的文件?缓冲应该更快。

最后,请注意文件大小并不是决定缓冲和非缓冲的唯一因素。与任何缓存一样,文件系统缓存比其背后的源更快但更小。它需要一个缓存替换策略来控制何时驱逐项目以为新项目腾出空间。当经常访问的项目被驱逐时,它就失去了它的好处。例如,如果您在当天将用户主目录同步到一个单独的位置(即,当用户正在使用文件时),缓冲 I/O 将受益于已经驻留在缓存中的文件,但可能会暂时用陈旧文件污染缓存; 另一方面,无缓冲将放弃已缓存文件的任何好处。在这种情况下没有明显的赢家。

注意:这也适用于 xcopy /J

有关更多信息,请参阅 Microsoft 的Ask The Performance Team 博客


小智 3

我尝试了以下方法:

当您从快速设备(通过千兆以太网的 NAS)复制到另一个快速设备(USB3 磁盘)时

  • 没有/J:数据被读入缓冲区并随后写入,因此网络或硬盘驱动器处于空闲状态
  • 带/J:数据读写无需等待,因此网络和硬盘同时使用

我建议使用这个选项。