我正在尝试使用以下命令挂载内存 cgroup:
sudo mount -t cgroup none /sys/fs/cgroup/memory -o memory
我得到错误:
mount: /sys/fs/cgroup/memory: wrong fs type, bad option, bad superblock on none, missing codepage or helper program, or other error.
我启用了所有 cgroup 内核配置选项,并且可以毫无问题地挂载 cpu、cpuset 和设备 cgroups。
我错过了什么?
操作系统: Raspberry Pi OS Lite(64 位)
内核版本: 5.10.95
使用
cgroup_enable=memory systemd.unified_cgroup_hierarchy=0
在内核命令行文件中启用内存 cgroups 和禁用 cgroupv2 解决了这个问题。
Jaese 的回答的一些额外细节使我走上了解决我在 docker 中遇到的类似 cgroup 问题的轨道。
您需要添加以下内核命令行选项:
cgroup_enable=memory
systemd.unified_cgroup_hierarchy=0
在干净的 Debian 11(靶心)安装中,
cgroup_enable=memory
选项已经设置。
要在实践中做到这一点,您需要修改引导加载程序配置。执行此操作的步骤可能会有所不同,具体取决于您的 Linux 发行版和所使用的引导加载程序。特别要检查您的系统是否使用 GRUB2(Ubuntu、Debian、Centos、Fedora 等)或
systemd-boot
(Arch Linux、Fedora 和 Clear Linux):
对于 Debian 上的 GRUB2,请执行以下操作:
/etc/default/grub
并找到以GRUB_CMDLINE_LINUX
开头的行。将以下选项添加到行尾的引号内:cgroup_enable=memory systemd.unified_cgroup_hierarchy=0
。
它应该是这样的:GRUB_CMDLINE_LINUX="... cgroup_enable=memory systemd.unified_cgroup_hierarchy=0"
sudo update-grub
请注意,这也解决了以下错误:
Missing file or directory
在 cgroup 树中(例如 /sys/fs/cgroup/memory/
或 /sys/fs/cgroup/cpuacct/
),或Failed to reset control group /sys/fs/cgroup/memory/...: Device or resource busy
.