我正在 PowerShell 脚本中使用 Robocopy 将我的主 SSD 备份到另一个 SSD,但文件传输速度出现问题。
在 Windows 资源管理器中我的写入速度为 300~400 MB/s,而在 Robocopy 中平均为 80 MB/s。
我的命令行是这样的:
robocopy "$($source = $drv;$source)" "$($destination = "$dst";$destination)" /e /MT:4 /NJH /NDL /NC /BYTES /copyall /A-:SH /xd $IgnorarPastas /xf $IgnorarArquivos /log:"$dst\_Backup Logs\$filedate-robocopylog.txt" /tee | Get-RobocopyProgress -ErrorAction 0
我在 PowerShell 中使用 Robocopy 的原因是我创建了一个脚本来自动检测备份和目标驱动器,这使得该过程更简单、更直观。
另一点是我使用一个函数来通过 PowerShell 实现复制进度。
我已经尝试过了。
/MT
我已经尝试通过更改参数来更改核心数我已经尝试禁用进度功能,看看它是否会造成干扰。我得到的速度相同。
我已经尝试禁用日志,速度相同。
注意事项:
- 两款 SSD 均为 Corsair MP600 Core。
- SSD 是外置的,通过 Orico 外壳连接,一个有 40Gbps Thunderbolt 接口,另一个有 20Gbps USB 3.2 Gen 2 接口。
- 其中一个 SSD 使用我笔记本的 Thunderbolt 4 接口,另一个连接到 USB 3.2 Gen 1。我已经尝试过反转它们的连接。
评论
分析任务管理器中 SSD 的行为,我发现接收备份的 SSD 使用率为 100%,平均响应时间较高,约为 2000 毫秒。
关于如何解决这个问题,我有什么想法吗?
编辑-附加信息
最初我以为这与 Robocopy 有关,因为我通常不会在 Windows 资源管理器中直接复制大文件夹,所以我没有看到这种振荡,因为复制速度保持较高速度约 10 秒,这通常足以完成文件复制。
现在我做了深入的测试,复制了大文件夹,以便能够更长时间地分析Explorer复制过程,结果如下图所示:
在图中可以观察到速度波动,它在 400MB/s 左右保持一段时间,然后波动,最后稳定在 80MB/s 左右。