就在最近,我的系统在移动大量数据(有时是几个大文件,有时是很多小文件)时遇到了很大困难。当文件从我的硬盘移动到外部系统(挂载的网络共享或外部 USB)时,就会出现问题。网络共享和 USB 出现了相同的症状,但我不确定它们是否必然相关。
最近的例子是,我刚刚尝试通过 Nautilus 复制粘贴将一个总计 1.9GB 的文件夹从硬盘移动到 USB 上。当进度条打开时,操作已完成约 1/3,报告传输了 600MB。此时的传输速率为 29MB/s,迅速地下降。它在几秒钟内从 29 MB/s 降到了 20 MB/s,在大约 10 秒内从 20 降到了 10,最后降到了 6MB/s。还有大约 30 秒的时间,整个操作似乎停滞了,例如,进度窗口中没有显示任何更新。这样的操作应该只需要几秒钟,但最终花了大约 3 分钟。
昨天我尝试将同一个文件夹移动到网络共享上,也遇到了类似的情况。大约 30 秒后进度条才到达一半,然后整个过程就停止了。网络监视器显示 0 字节/秒的直线。
我的机器里有一个较新的 SSD,所以我不认为这是瓶颈。
我应该检查什么内容来找到该问题的根源?
使用 Ubuntu 12.10。我尝试移动的文件位于使用 encryptfs 的主文件夹中。
答案1
“我应该检查什么内容来找到这个问题的根源?”
您需要查看两次传输中共同的内容。您是否传输了同一个文件?该文件可能被破坏了吗?您是否没有足够的内存来缓存文件?您的 CPU 怎么样?
加密分区通常有这种副作用。请记住,为了传输文件,您必须在本地对其进行解码,然后将其传输到目的地。这对复制程序/调用来说是透明的,但仍必须这样做。如果您尝试传输大型文件,则保存文件临时解密副本(文件的一部分)的内存可能已满。
在传输过程中使用free -m
或仅检查您的可用内存free
,并查看缓冲区和缓存可用的内容。
还要记住,Linux 会缓存文件操作。因此,仅仅因为用户进程认为数据已被复制并不意味着实际上已将任何内容写入物理介质。这会导致较小的文件写入速度非常“快”,但较大的文件会“爆发”速度,然后当缓存填满时,它们的速度就会变慢。这通常不太明显,但如果您的缓存已满,或者您的可用内存不足(用于新缓存)或您的 CPU 功率不足(当人们加密东西时很常见),那么它将需要更长的时间。