📅  最后修改于: 2023-12-03 15:26:16.247000             🧑  作者: Mango
在使用系统中的cgroups进行资源管理时,可能会遇到以下错误:
mount: cgroup2: no space available on device
mount: /sys/fs/cgroup/systemd: cgroup filesystem type 'systemd' not supported by kernel.
Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted
或者
mount: /sys/fs/cgroup/systemd: cgroup filesystem type 'systemd' not supported by kernel.
Failed to mount cgroup at /sys/fs/cgroup/systemd: Permission denied
这些错误的原因是由于内核不支持或权限不足。
确保你的内核支持cgroup
。
对于cgroup v1
,可以检查以下位置:
$ zcat /proc/config.gz | grep -i cgroup
CONFIG_CGROUPS=y
# CONFIG_BLK_CGROUP is not set
CONFIG_CGROUP_DEBUG=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CGROUP_NS=y
CONFIG_CGROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_RDMA=y
CONFIG_CGROUP_BPF=y
CONFIG_CGROUP_DEBUG_MEMORY=y
# CONFIG_CGROUP_MEM_RES_CTLR_SWAP is not set
CONFIG_CGROUP_MEM_RES_CTLR=y
# CONFIG_CGROUP_CGROUP8 is not set
CONFIG_CGROUP_SYSTEMD=y
对于cgroup v2
,可以检查以下位置:
$ zcat /proc/config.gz | grep -i cgroup2
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_CGROUP_RCU=y
CONFIG_CGROUP_PID_SELFTESTS=y
CONFIG_CGROUP_BLK_CGROUP=y
CONFIG_CGROUP_RDMA=y
CONFIG_CGROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_NET_CLASSID=y
CONFIG_CGROUP_NET_CLS_ACT=y
CONFIG_CGROUP_BPF=y
CONFIG_CGROUP_TAGGED=y
CONFIG_CGROUP_XATTR=y
CONFIG_CGROUP_DEVICE_QUEUE=y
CONFIG_CGROUP_SYSFS=y
CONFIG_CGROUP_CPUACCT=y
如果你的内核不支持cgroup
或缺少所需的模块,则必须重新编译内核或加载所需的模块。
检查文件系统是否支持cgroups
。
对于cgroup v1
,需要检查/etc/fstab
文件系统表:
none /sys/fs/cgroup cgroup defaults 0 0
对于cgroup v2
,需要检查/etc/fstab
文件系统表:
none /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec 0 0
确保cgroup
挂载在/sys/fs/cgroup
目录下,并具有正确的权限。
确保你有足够的权限来挂载cgroups
。
对于cgroup v1
,你必须属于cgroup
组,或者以超级用户身份运行:
$ id -a
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
对于cgroup v2
,你必须以超级用户身份运行。
systemd
版本确保你使用的是systemd
的正确版本。
对于cgroup v1
,需要systemd
的版本为>=209
。
对于cgroup v2
,只有在systemd
版本为>=232
时才受支持。
SELinux
如果你的系统使用了SELinux
,请确保SELinux
的类型是svirt_lxc_net_t
。
$ ps -Z | grep systemd
system_u:system_r:svirt_lxc_net_t:s0:c141,c875 ...
如果类型不正确,请设置正确的类型:
$ sudo semanage fcontext -a -t svirt_lxc_net_t /sys/fs/cgroup
$ sudo restorecon -Rv /sys/fs/cgroup
在使用cgroups
进行资源管理时,可能会遇到无法挂载的问题。本文介绍了一些可能导致问题的原因,并提供了相应的解决方案,希望对你有所帮助。