为什么在将文件复制到随身碟时我的 PC 会死机?

Mik*_*kov 71 cp file-copy usb-drive freeze

我这里有一个非常奇怪的情况。我的电脑工作正常,至少在大多数情况下,但有一件事情我无法处理。当我尝试从我的 Pendrive 复制文件时,一切正常——我得到了 16-19M/s ,它运行得很好。但是当我尝试将某些内容复制到同一个 Pendrive 时,我的 PC 死机了。鼠标指针停止移动一两秒钟,然后移动一点,然后再次停止。例如,在 Amarok 中播放某些东西时,声音就像机关枪。速度从500K/s跃升到15M/s,平均8M/s。仅当我将某些内容复制到 Pendrive 时才会发生这种情况。当复制过程完成后,一切恢复正常。

我尝试了一切——其他的随身碟、前面板上的不同 USB 端口或后面的那些端口,我什至更改了主板(前面板)上的 USB 引脚,但无论我把 USB 记忆棒放在哪里,它总是一样的。我尝试了不同的文件系统 - fat32, ext4. 我的笔记本电脑上的 Windows 设备没有问题。它必须是我的 PC 或系统中的某些东西。我不知道该找什么。我在独立的 Openbox 中使用 Debian 测试。我的电脑有点旧——Pentium D 3GHz、1GiB 内存、1.5TB WD Green 磁盘。如果您有什么可以帮助我解决这个问题的东西,我会很高兴听到这个消息。

我不知道我还应该提供什么信息,但是如果您需要什么,尽管问,我会尽快更新这篇文章。

我试图在 ubuntu 13.04 live cd 上重现这个问题。我安装了我的加密分区 + 加密交换并将我的 Pendrive 连接到 USB 端口。接下来我尝试启动一些应用程序,现在我有大约 820MiB 的 RAM 和大约 400MiB 的 SWAP。复制没有问题,根本没有冻结,一切都应该如此。所以,看起来是系统的故障,但究竟在哪里?什么会导致这种奇怪的行为?

Rma*_*ano 102

您是否使用具有大量内存的 64 位版本的 Linux?在这种情况下,问题可能是 Linux 可以在慢速设备(例如 SD 卡或 USB 记忆棒)上进行大量写入时锁定几分钟。这是一个已知的错误,应该在较新的内核中修复。

http://lwn.net/Articles/572911/

解决方法:作为根问题:

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)

我已将它添加到/etc/rc.local我的 64 位机器中的文件中。

坦斯塔夫; 此更改可以(并且可能会)降低您对这些设备的吞吐量——这是延迟和速度之间的折衷。要回到以前的行为,您可以

echo 0 > /proc/sys/vm/dirty_background_bytes
echo 0 > /proc/sys/vm/dirty_bytes
Run Code Online (Sandbox Code Playgroud)

...这是默认值,这意味着写回行为将由参数dirty_ratio和控制dirty_background_ratio

不太熟悉 linux 的人请注意:其中的文件/proc 是伪文件--- 只是内核和用户空间之间的通信渠道。切勿使用编辑器更改或查看它们;而是得到一个 shell 提示——例如,使用sudo -i(Ubuntu 风格)或su root并使用echocat)。

更新 2016/04/18看来,毕竟问题还是在这里。你可以看一下它在LWN.net,在这篇关于写回队列

  • 我有 64 位但只有 1GiB 的内存,我必须告诉你这个解决方案有效!我刚刚测试了一下,设置了两个参数后,没有卡顿了。:) (4认同)
  • 我在一台全新的笔记本电脑上使用 ubuntu 16.04(具有 16 GB 的 RAM)。我对这个问题真的很生气。您的解决方案很有魅力!也许您可以补充说,内核 4.8.0-45 仍然需要这样做。 (3认同)