环顾四周,我发现标准修复是将其添加到内核启动参数中。
使用 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
条目中?
另一条线?
或者通过使用一些定界符,将其添加到现有行中?
我应该将其设置为什么值?
答案1
实际上,对于您遇到的 iotop 错误有一个简单的修复方法,但从这里到达那里是迂回的。
options delayacct
[TL;DR:如果使用 systemd-boot,只需在 sd-boot 条目配置文件的末尾添加一个新行即可。 GRUB 有相应的语法。也存在可能更可取的替代非引导管理器配置选项。]
@Artem 是正确的,它CONFIG_TASK_DELAY_ACCT
是一个内核配置或构建选项。他也是正确的,因此,它与内核的编译方式有关并且不能在运行时添加,IE,在启动时。
尽管如此,即使CONFIG_TASK_DELAY_ACCT
设置为“y”,iotop 也经常抛出此错误,因为许多发行版使用此选项编译内核,但默认情况下禁用它。
这意味着无论 iotop 错误消息的字面含义如何,重新编译内核可能都是浪费时间。要确认,只需检查内核配置文件。该文件(配置-内核版本)通常与内核(vmlinuz-内核版本) 和 initrd (initrd.img-内核版本)文件,例如,/boot
或者可能/efi
取决于 EFI 系统分区的安装位置。所以,做,例如:
grep TASK_DELAY_ACCT /boot/config*
这可能会返回类似以下内容:
/boot/config-5.15.0-41-generic:CONFIG_TASK_DELAY_ACCT=y
/boot/config-5.15.0-43-generic:CONFIG_TASK_DELAY_ACCT=y
告诉=y
我们内核是使用此选项编译的。这并没有使 iotop 错误消息不再那么神秘,但它确实确认了内核是正常的。如果是这样,则检查相应的内核参数 ,kernel.task_delayacct
因为启用它应该可以修复 iotop 错误。要检查参数,请执行以下操作:
cat /proc/sys/kernel/task_delayacct
如果返回 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 启动,编辑你的入口.conf 文件并简单地添加一个新行:
options delayacct
系统引导许可该
options
密钥多次出现在引导加载程序条目文件中,因此只需添加额外的行,而不是编辑现有options
密钥,应该就可以了。重启即可生效。
答案2
这是一个内核建造选项,因此您无法在运行时“添加”它。
要么构建您自己的内核,要么要求您的维护人员使用此选项构建内核,他们可能会或可能不会这样做,因为某些内核选项依赖于其他选项,而这些依赖性可能是非常不合需要的,例如它们可能会大大减慢内核的速度。