![磁盘 I/O 饱和时系统锁定](https://linux22.com/image/877716/%E7%A3%81%E7%9B%98%20I%2FO%20%E9%A5%B1%E5%92%8C%E6%97%B6%E7%B3%BB%E7%BB%9F%E9%94%81%E5%AE%9A.png)
当我通过 Nautilus 或终端将大型文件从外部 USB3 硬盘传输到内部硬盘(或反之亦然)时,Ubuntu (Unity) 几乎会完全锁定。在文件传输过程中,alt-tab 等操作需要 20 秒或更长时间才能完成。当对磁盘进行大量随机读取/写入时(例如安装软件包时),情况并非如此。
当我运行 Windows 时,我可以在后台运行文件传输,并且仍然可以执行操作,尽管当某些操作需要访问磁盘时速度会变慢。我仍然可以正常使用 alt-tab。
Ubuntu 似乎将文件传输的优先级置于所有其他磁盘 I/O 之上,这就是它锁定的原因。在 Windows 中,文件传输的优先级似乎较低,这意味着系统在磁盘饱和时仍能保持响应。
我该如何修复这个问题?这很烦人,因为复制文件时计算机完全无法使用。这个问题在 14.04 和 15.10 中都存在。我不得不将硬盘插入 USB2 端口以防止出现此问题,但这会导致传输时间更长。
答案1
我的笔记本电脑也遇到了同样的问题,与计算机的其余部分相比,它的磁盘系统速度相当慢。
通过更改用于磁盘传输的调度算法,我能够使情况变得更好。默认情况下,Ubuntu 使用 Deadline,但我发现使用 cfq 时系统响应速度更快。
要查看您正在使用的调度程序,请发出命令
cat /sys/class/block/sda/queue/scheduler
要进行一次性更改(直到重新启动),请发出命令
echo cfq | sudo tee /sys/class/block/sda/queue/scheduler
请注意,更改外部硬盘驱动器的内容非常重要;我的通常加载为 sdb。所以我会发出命令echo cfq | sudo tee /sys/class/block/sdb/queue/scheduler
我通过在 grub 文件中添加内核参数,使更改对连接到我的计算机的所有驱动器永久生效,elevator=cfq
如下所示:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noautogroup elevator=cfq"