将大文件复制到 USB 时系统冻结/无响应/不可用

将大文件复制到 USB 时系统冻结/无响应/不可用

昨天,我将一个 8 GB 的文件复制到 USB,写入速度很慢,只有 7 MB/s,而我的 RAM 是 3 GB。复制时系统冻结,甚至无法移动光标。

我设法登录到文本控制台并运行iotop,它显示名为的进程kswapd0占用了 99.99% 的 IO。

有没有解决方法,使复制大文件不会导致我的系统无法使用?

答案1

根据此错误报告我解决了它添加以下几行

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

进入 /etc/sysctl.conf

并运行

sudo sysctl -p

答案2

我遇到了类似的问题。我的是 64 位 Ubuntu 14.04。经过长时间的努力,我发现答案这解决了我的问题。为了方便使用,我添加了下面的命令上述答案。查看答案了解详细解释。

echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes

使用上述命令后系统开始正常复制文件。

感谢@Rmano

答案3

我遇到了类似的问题,复制到闪存驱动器时系统会冻结。我提交了一份有关此问题的错误报告:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1267648

解决方法是,我发现禁用交换可以完全消除该问题。

答案4

我在 ubuntu 19.10 上遇到了完全相同的问题(2019 年),当时我正在将大量文件从 USB 磁盘复制到 SATA 磁盘。两个文件系统都是 ext4。当我关闭交换时,问题就消失了。这看起来像是磁盘缓冲区的内存分配中的一些错误 - 显然,内核在这种情况下会尝试为磁盘缓冲区分配尽可能多的内存,这是没有意义的(在交换中创建磁盘缓冲区...),或者它只是错误地计算了可用于缓存的内存大小...

正如有人指出的那样,将 swappiness 设置为 1 并不能解决问题,这是合乎逻辑的,如果您复制的文件的总大小大于 RAM 大小......

顺便问一句 - 有人能解释一下,为什么不建议关闭交换吗?如果我有 32GB 的 RAM,再添加 4GB 的交换有什么区别?我只能想到一些实际上希望交换存在的晦涩应用程序。但我会停止使用这样的应用程序,因为正确编写的应用程序不应该关心交换。交换应该只在操作系统级别进行管理......

相关内容