robocopy 中止后会恢复吗?

opt*_*lic 39 robocopy

我的用户目录大小为 58 GB,我正在使用Robocopy从 Windows 恢复将其复制到便携式 USB 备份驱动器。

robocopy G:\Users\ E:\Backup\T420\ /MIR /SEC /MT:32 /V /LOG:G:\bak\robocopy.txt
Run Code Online (Sandbox Code Playgroud)

笔记本电脑是 USB 2,备份驱动器是 USB 3。

它现在已经运行了 18 多个小时,这比我的预期要长。

即使 USB 2 的速度较慢,也只需要大约 8 小时

https://www.wolframalpha.com/input/?i=58+gB+at+2+MB%2Fs

如果我按Ctrl-C并检查日志以查看发生了什么,然后再次运行该命令会花费相同的时间还是会从停止的地方恢复?

假设它恢复,有什么样的时间开销来计算哪些文件要复制以及从哪里恢复?

编辑:事实证明,花费这么长时间的原因是因为一些无法复制的伪造/未完全同步的 OneDrive 文件和重试 100 万次的默认值。更改重试并等待允许它完成/r:2 /w:5

har*_*ymc 63

如果文件夹包含非常多的文件,那么对于源和目标来说,频繁访问磁盘目录确实需要很长时间。

此外,USB2 端口上的 USB3 磁盘将以 USB2 的速度工作。在进行初始握手时,USB3 磁盘将根据端口及其协议进行自我调整。

您正在使用/MT:32多线程,因此告诉 robocopy 一次复制 32 个文件。这将导致 32 个线程争夺对磁盘的访问,并且会进一步减慢复制速度,磁盘的磁头通过在磁盘上来回来回浪费时间。在 USB2 拷贝速度较慢的情况下,不建议使用 Multi-Threaded。

使用可重启模式/Z处理部分复制的文件。使用此选项,当复制中断,因此某些特定文件被部分复制时,robocopy 的下一次执行可以从中断的地方继续执行,而不是重新复制整个文件。不幸的是,在某些情况下,此开关会减慢复制速度。

  • ???答案说明了如何以有效的方式重新启动 robocopy。它还解释了为什么它如此缓慢以及如何加快速度。彻底解决所有问题还不是答案? (25认同)
  • 它是一个有用的答案,并有几个很好的提示。然而,它实际上并没有回答这个问题。 (10认同)
  • @Hong Ooi,USB2 是 480Mbps。是的,太多的同时传输(线程)肯定会减慢速度,尤其是旋转磁盘,甚至是 SSD。您可能想尝试使用较小的数量(使用 /MT 选项时的默认线程数为 8 AFAIK)。 (5认同)
  • @HongOoi:在复制磁盘上不同位置的32个文件时,如果32个线程中的每个线程依次复制一个块/扇区,则每次写入时磁盘的磁头都需要将自身定位到32个位置。头部运动是身体运动,因此非常缓慢。相比之下,当以顺序方式复制一个文件时,磁头只是以旋转速度不断写入整个磁道(如果来自计算机的数据传输速度足够快)。 (4认同)
  • 使用多个线程不一定会导致更多的头部运动。事实上,取决于操作系统的 IO 调度程序的质量,它实际上可能会减少头部运动。由于应用程序并行发送多个 IO 请求,操作系统可以更好地了解应用程序在做什么,并且可以重新排序 IO 请求以最大程度地减少头部移动。打个比方,考虑一台电梯同时为多人服务,而不是一次只为一个人服务。实际上,[电梯算法](https://en.wikipedia.org/wiki/Elevator_algorithm) 是一种众所周知的 IO 调度程序类型。 (3认同)
  • @G.Sliepen:电梯可以搭载多人,但是磁头只能服务一个请求。这不是这里的主题,因为在这种情况下,磁盘调度程序有许多优化来提高(但不是解决)性能。 (2认同)
  • @harrymc 你错过了这个比喻。是的,一部电梯可以载很多人,相当于排队的请求很多。电梯一次只能在一层,相当于磁头在给定的磁道上。通过处理多个未完成的请求并让调度程序以最快的顺序为它们提供服务,您可以获得*更多*的吞吐量,而不是严格按顺序处理它们(可容纳 1 人的电梯)。 (2认同)
  • @harrymc “可以停止 Robocopy 吗?” 是你没有回答的。 (2认同)

opt*_*lic 23

确定以停止的Robocopy在操作的中间。

默认情况下,它不会重新复制已经复制的文件。

确定从哪里恢复(或基本上检查哪些文件相同)的开销非常低 - 只需几秒钟。

但是,如果您不写入日志(或使用/TEE也写入控制台),/V则会增加此开销,因为将所有行写入控制台将花费更长的时间。

注意:可重新启动模式(如评论中所述)仅用于重新启动单个文件(例如,如果一个巨大的文件在中间停止,您可以部分恢复而不是再次复制整个文件)并且不需要恢复批量复制如问题中所问。

  • @user2357112supportsMonica robocopy 将文件保留为真正旧的修改日期,直到复制完整文件。默认情况下,Robocopy 将重新复制部分复制的文件。robocopy 的一大优点是能够多次停止和重新启动,并且永远不会丢失上次停止的地方。可重启模式将有助于通过劣质连接复制大文件。 (2认同)

Ble*_*erg 17

我已经使用robocopy了多年,并且知道您可以在文件中间停止复制,然后重新启动会迅速回到停止的地方。除非您使用该/XN选项,robocopy否则将删除它正在处理的最后一个文件并重新开始复制​​。当它第一次创建一个文件时,它将“修改”时间设置为 1/1/1980,所以基本上只要你的时钟设置正确,它就会看到那个时间并重新启动复制过程。正如您所说,其他文件将被忽略,因为它们与源文件具有相同的修改日期/时间。

就个人而言,我在使用时总是将/TEE选项与/V和选项一起/LOG:使用,robocopy以便我可以监控正在发生的事情(如果发生崩溃,我可以回去查看是否也有问题)。如果您有大量的小文件(数万或更多),它会稍微减慢速度,但它也可以帮助您确定是否存在问题。如果缩小高度,或者更好的是,最小化命令提示符窗口,当您有一堆小文件时,可以大大加快复制速度。

18 小时对于您尝试复制的数量来说非常长,因此您可能尝试复制大量的小文件,或者您的目录结构中有一些递归。由于您有日志,您可以尝试查看它的底部,看看目录结构是否在重复。如果是,您可以尝试跳过连接点/XJD以查看是否允许您停止卡住的循环。该/XD选项还可用于完全忽略特定目录。

关于该/Z选项,此选项仅适用于“网络传输”。我把它放在引号中是因为本地副本不会使用可重启模式;但是,如果robocopy看到网络路径,它将使用可重启模式,即使源和目标是本地的,(这可能只是我的版本,robocopy因为我没有越过 Windows 7)。如果您共享您的驱动器或驱动器上的文件夹(最好是只有您有权访问的帐户),并启用Change权限,然后使用该路径作为目标,它应该在可重启模式下工作。当然,使用可重启模式时性能可能会受到影响。

  • 关于`/XJD`的优秀建议。我不确定如何 robocopy 处理这种情况,但是如果 OP 正在复制用户配置文件文件夹,那么 appdata 文件夹通常会出现无限循环,总是会导致递归问题。 (2认同)

Sal*_*n A 5

可以停止 Robocopy 吗?

我经常毫无问题地终止 Robocopy 任务。如果进程被终止,据我所知,被复制的文件将具有 (a) 1980-01-01 的时间戳 (b) 与原始文件相同的大小。

假设它恢复,需要多少时间开销来计算哪些文件需要复制以及从哪里恢复?

如果您使用这些参数再次启动任务,它将 (a) 跳过已复制的文件 (b) 重新复制因日期不匹配而中断的文件 (c) 复制上次尝试中未复制的文件(d) 从目标中删除因切换而不再存在于源中的文件/MIR

原来,之所以拖了这么久,是因为……

在杀死进程之前,您可以在文本编辑器中打开日志文件以查看它在做什么;最后一行将包含正在复制的文件及其大小。如果出现错误,也会列出该错误,例如:

2019/12/13 06:26:38 ERROR 32 (0x00000020) 正在复制文件 C:\Redacted
该进程无法访问该文件,因为该文件正在被另一个进程使用。

等待 60 秒...重试...

复制成功后,日志文件将包含一个摘要,其中包括传输速率(兆字节/分钟),这将使您大致了解下次需要多长时间。