我对 Windows Server 2008(和其他版本)上文件复制后的暂停感到疑惑
将大型文件(如 vhd)复制到本地连接的 USB 磁盘时,我经常会看到复制完成 100% 后出现长时间的停顿。
例如:robocopying vhd 文件。读取/写入的字节数与 vhd 文件大小匹配,robocopy 显示 100%,但会暂停几分钟。如果我什么都不做,它将继续,但我必须等待相当长的时间 - 大约与达到 100% 所花的时间相同。robocopy 的读取字节数/写入字节数计数器不变。
我首先想到的是 AV 必须对其进行扫描,但我现在正在查看一台未安装 AV 的机器,并且这种情况正在发生,所以不可能。没有其他进程显示读/写字节数在增加。
如果我使用复制命令或 xcopy,行为是相同的。
我在其他系统上也见过这种情况,但一直不知道原因是什么。有人知道可能发生了什么吗?
答案1
您正在经历将本地缓冲区清空到实际驱动器的过程。当您将文件复制到慢速媒体时,出于性能原因,您的操作系统会在操作实际完成之前告诉您操作已完成。它实际上会自行跟踪操作(在内存中),除非您用于跟踪进度的程序在过程结束时有某种“等待文件实际写入”调用。这就是导致等待的原因。
对于一般的 Windows 文件复制,您可以通过更改 USB 驱动器的设置来更改此行为,以牺牲性能和安全性为代价,如下所示: http://www.pcworld.com/article/254868/safely_remove_usb_drives_just_by_unplugging_them.html
如果您这样做,那么“安全移除”就成为绝对必要的,以避免外部驱动器上的文件系统损坏。这会将(不可避免的)等待时间转移到您实际移除驱动器的那一刻,还有一个额外的好处,那就是如果您稍后在移除之前对复制的文件进行进一步更改,您将节省大量昂贵的 I/O,因为更改将直接在本地缓冲区上执行。