环顾四周,我发现标准修复是将其添加到内核启动参数中。
使用 systemd-boot,我的 arch.conf 看起来像这样:
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=PARTUUID="98b3b4f7-e7f9-6f49-be81-a2ee709c7a3e" rw
如何将 CONFIG_TASK_DELAY_ACCT 添加到options
条目中?
另一条线?
或者通过使用一些分隔符,将其添加到现有行?
我应该将其设置为什么值?
这是一个内核构建选项,因此您不能在运行时“添加”它。
要么构建你自己的内核,要么让你的维护者使用这个选项来构建内核,他们可能会也可能不会这样做,因为某些内核选项依赖于其他内核选项并且这些依赖关系可能非常不受欢迎,例如它们可能会大大降低内核速度。
实际上,对于您遇到的 iotop 错误,有一个简单的修复方法,但是从这里到达那里是迂回的。
options delayacct
[TL;DR:如果使用 systemd-boot,只需在 sd-boot 条目配置文件的末尾添加一个新行即可。GRUB 有相应的语法。替代的,非引导管理器配置选项也存在,可能更可取。]@Artem 是正确的,它
CONFIG_TASK_DELAY_ACCT
是内核配置或构建选项。他也是正确的,因此,它与内核的编译方式有关,并且不能在运行时添加,即在启动时。尽管如此,即使
CONFIG_TASK_DELAY_ACCT
设置为“y”,iotop 也经常抛出此错误,因为许多发行版使用此选项编译内核但默认禁用它。这意味着重新编译内核可能是浪费时间,尽管 iotop 错误消息的字面意思是这样。要确认,只需检查内核配置文件。该文件 (config- kernel-version ) 通常与内核 (vmlinuz- kernel-version ) 和 initrd (initrd.img- kernel-version ) 文件位于同一目录中,例如,
/boot
或者可能/efi
取决于 EFI 系统分区所在的位置安装。所以,做,例如:这可能会返回如下内容:
=y
告诉我们内核是用这个选项编译的。这不会使 iotop 错误消息变得不那么神秘,但它确实确认内核是好的。如果是这样,请检查相应的内核参数kernel.task_delayacct
,因为启用它应该可以修复 iotop 错误。要检查参数,请执行以下操作:如果返回 0,则禁用;1、启用。要启用该参数,请执行以下操作之一:
对于当前会话:
echo 1 > /proc/sys/kernel/task_delayacct
这应该会立即生效,无需重新启动。
更持久地,将以下内容添加到新行
/etc/sysctl.conf
或 .conf 插入文件中/etc/sysctl.d
:kernel.task_delayacct=1
或者只是这样做:
# echo "kernel.task_delayacct=1" >> /etc/sysctl.d/20-kernel-task-delayacct.conf
重启生效。
delayacct
根据引导管理器添加到内核命令行。这是您在询问 systemd-boot 时所采用的方法。对于 GRUB2,添加或编辑以下行
/etc/default/grub
以读取:GRUB_CMDLINE_LINUX_DEFAULT="delayacct"
然后保存并关闭文件并执行:
# update-grub
重启生效。
对于 systemd-boot,编辑您的条目.conf 文件并简单地添加一个新行:
options delayacct
Systemd-boot允许
options
密钥多次出现在引导加载程序条目文件中,因此只需添加一行而不是编辑现有密钥options
就可以了。重启生效。