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


11

随时编辑标题以更好地解释我将在此处写的内容。

例如,当我将大文件复制到笔式驱动器时,进度窗口会显示出一个估计值,即大多数情况下并不会显示实时时间和完成百分比,但是在某些情况下,它表示一切都已完成并且进度窗口关闭。我去提取笔式驱动器,它说它仍在使用中。检查笔式驱动器后,我看到它仍在复制文件,但是没有显示此内容的进度窗口。

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

我不想知道如何解决它,因为我已经阅读了针对此问题的解决方案。我想知道的是为什么进度窗口显示的估算值与复制过程不符。

它取决于外部单元中的缓存吗?

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

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

还有其他与此类似的问题,例如从未完成将文件复制到USB记忆棒,而是更多地关注机制,以了解其行为为何如此。

Answers:


6

我想您将Nautilus用作文件管理器,如果是这样,则存在长期存在的错误。太多的东西无法提及影响Mint,Fedora,Red Hat等。Ubuntu并非没有同样的问题。

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

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

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

另一个张贴在这里的消息说,“分块复制”是可行的。我未确认。


3
为了明确起见,内核将数据缓存在RAM中,而不是直接写入(出于性能原因)。单击“弹出”时,将sync在后台执行命令,从而刷新缓存。对于大量数据,这可能需要一段时间。
2013年

1
提示:sudo cp / filetobecopied / dev / nameofdevice将用您的文件替换整个文件系统,通常不是您想要的文件。–
Lennart Rolland

1

这也是解决方案的不错答案:https : //unix.stackexchange.com/a/181236 它说:

发生这种情况的原因是程序说“写此数据”,而linux内核将其复制到排队进入磁盘的内存缓冲区中,然后说“确定,完成”。因此程序认为它已经复制了所有内容。然后程序关闭文件,但是突然之间,内核将该缓冲区压入磁盘时等待它。

因此,不幸的是,该程序无法告知您刷新缓冲区所需的时间,因为它不知道。

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

副作用是,使用此设置可能会降低计算机的数据写入吞吐量,但是总的来说,我发现程序在写入大量数据时运行了很长时间会有所帮助,而这与使用程序似乎已完成其工作,但由于内核执行实际工作,系统严重滞后。将dirty_bytes设置为较小的值还可以帮助防止系统在空闲内存不足并且运行程序突然写入大量数据时变得无响应。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.