复制到外部驱动器时,为什么进度窗口不正确

随意编辑标题,以更好地解释我将在这里写的内容。

例如,当我将大文件复制到笔式驱动器时,进度窗口显示估计大部分时间都不会显示实际时间和完成百分比,但有时会显示所有内容都已完成且进度窗口关闭。 我去提取笔式驱动器,它说它仍在使用中。 检查笔式驱动器后,我发现它仍在复制文件,但没有显示此进度窗口。

它不仅适用于大文件,也适用于许多小文件。 如果我复制它们,进度条可能会说例如15秒并在那段时间结束,但实际时间可能是1分钟,接下来的45秒我需要实际查看笔式驱动器中的指示灯以查看是否存在是真正的活动。

我不想知道如何解决这个问题,因为我已经阅读了修复程序的深度。 我想知道的是,为什么进度窗口显示的估计值与复制过程不符。

它是否依赖于外部单元中的Cache?

文件大小和文件数量是否会影响正确的估算。 例如,4 GB的1个文件或4 MB的1000个文件。

是否有可以更改行为的配置选项。

还有其他类似的问题,比如将文件复制到usb stick永远不会完成,但我更关注于为什么它会表现得像这样的机制。

我认为你使用的是Nautilus作为你的文件管理器,如果是这样的话,就会有长期存在的错误。 提及影响Mint,Fedora,Red Hat等所有类似的东西。 Ubuntu并非没有同样的问题。

有人建议关闭缩略图视图帮助。 其他人则寄希望于“最新内核”,但这仍然存在。

问题=快速启动,然后变慢这是因为当使用异步挂载时它会写入缓存,当缓存已满时,您会看到“实际”写入速度。

解决方法似乎是sudo cp /filetobecopied /dev/nameofdevice

另一个贴在这里说“复制块”工作。 我未经证实。

这也是解决方案的一个很好的答案: https : //unix.stackexchange.com/a/181236它说:

这种方式发生的原因是程序说“写这个数据”并且linux内核将它复制到一个排队进入磁盘的内存缓冲区,然后说“好,完成”。 所以程序认为它复制了一切。 然后程序关闭文件,但突然内核让它等待,同时缓冲区被推送到磁盘。

所以,不幸的是程序无法告诉你刷新缓冲区需要多长时间,因为它不知道。

如果你想尝试一些高级用户技巧,可以通过将/ proc / sys / vm / dirty_bytes设置为15728640(15 MB)来减小Linux使用的缓冲区的大小。 这意味着应用程序在实际进度之前不能超过15MB。

副作用是您的计算机可能具有较低的数据写入吞吐量与此设置,但总的来说,我发现一个程序运行很长时间,同时它写入大量数据与混淆程序似乎完成了它的工作,但系统在内核完成实际工作时严重滞后。 将dirty_bytes设置为相当小的值也可以帮助防止系统在可用内存不足并运行突然写入大量数据的程序时无响应。

但是,不要把它设得太小! 我使用15MB粗略估计内核可以在1/4秒或更短的时间内将缓冲区刷新到普通硬盘。 它使我的系统不会感到“迟滞”。