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

sas*_*alm 66 usb freeze

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

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

是否有解决方法,因此复制大文件不会使我的系统无法使用?

Phi*_*oud 38

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

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
Run Code Online (Sandbox Code Playgroud)

进入/etc/sysctl.conf

和跑步

sudo sysctl -p
Run Code Online (Sandbox Code Playgroud)

  • 仔细解释一下上面几行的作用? (14认同)
  • @nisargshah95 问题的细节在http://unix.stackexchange.com/a/107722/52205链接的两篇LWN文章中有说明 (4认同)
  • @nisargshah95 抱歉,但没有线索,自行搜索;-) (3认同)
  • 我的值是 5 和 60。它们控制用于操作的内存的“百分比”,而“dirty_background_bytes”和“dirty_bytes”使用“绝对”字节值。我已经用第二个答案解决了这个问题,但为了使其**持久**将其添加到`sysctl.conf`,请参阅[这个答案](https://unix.stackexchange.com/a/149140/129111) 。因此,当使用百分比值时,请在升级内存时调整它们。 (2认同)

Mah*_*rai 25

我遇到了类似的问题。我的是 64 位 Ubuntu 14.04。所以经过长时间的斗争,我找到了一个解决我问题的答案。为了便于使用,我添加了上面提到的答案中使用的以下命令。检查答案以获取详细说明。

echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes
Run Code Online (Sandbox Code Playgroud)

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

感谢@Rmano

  • 这个问题已经 3 年了,为了避免在复制到 Pendrive 时出现无法使用的系统,仍然需要这样做。一些信息:如果 Pendrive 是使用 ext4 之类的 Linux fs 格式化的,则不会发生这种情况。当我说“无法使用的系统”时,我是认真的,鼠标指针变得没有反应,你必须坚持在屏幕上移动它,你看看系统监视器,没有任何异常的资源使用。内核人都用第六代Intel CPU和SSD驱动吗?为什么他们在测试时没有注意到这一点。 (9认同)
  • @HatoruHansou 我也有同样的感觉,我刚刚安装了新的 Debian Stretch,这里也存在这个错误。我知道这不取决于发行版,而是取决于内核源代码,但是伙计们,为什么这仍然没有解决? (4认同)
  • 请参阅 [此答案](https://unix.stackexchange.com/a/149140/129111) 以使其 **持久** (4认同)
  • 比率设置对我的 12.04 系统没有帮助,但 NAS 共享速度较慢。但是按照这里的建议直接设置字节后,我的系统在复制到 NAS 时可以再次使用。 (2认同)
  • @Marecky 经过一些阅读,dirty_bytes 似乎不仅仅是 USB 的东西。它们会影响所有 I/O,因此在执行 echo 操作后,您正在将它们更改为全局系统,而不仅仅是针对 Pendrive。我想,仅就本届会议而言。似乎内核的当前值在较新的存储设备中进行了调整。缓慢的笔式驱动器会带来副作用。抱歉,没有链接,但这一定很容易通过谷歌搜索找到。 (2认同)

Vla*_*sky 6

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

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


小智 5

是的,您可以调整内核设置,指定在实际写入磁盘之前必须将多少数据标记为已写入。看看这里为他们的一个非常全面的描述。特别是,您需要找到一个适合您的dirty_ratio 值(默认情况下对于台式机/笔记本电脑来说通常太高了,但没有一个魔术数字适用于所有人)。

  • 嘿,您能否根据我的笔记本电脑规格建议我需要设置哪些数字?参考 http://askubuntu.com/questions/713723/copying-to-usb-pen-drive-slows-everything?noredirect=1#comment1052372_713723 (2认同)

cha*_*ker 5

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

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

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