在一次Manjaro的日常更新之后,事物当时确实是更新失败了,是一个应用更新失败了,和内核更新无影响,但是重启后系统启动失败,报下面的错误

D: recovering journal
D: clean 1969453/15630336 files, 56589956/62515748 blocks
Refusing to run under cgroup v1, SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE=1 not specified on kernel comnand line.
1.520240] systend[1]: Freezing execution.

image-20240702112603233

原因分析

  • 电脑更新了systemd的新版本,但是可能因为事物的问题没有添加上启动参数,新版本的systemd不支持cgroup v1,需要启动参数开启兼容模式
* Support for cgroup v1 ('legacy' and 'hybrid' hierarchies) is now
considered obsolete and systemd by default will refuse to boot under
it. To forcibly reenable cgroup v1 support,
SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE=1 must be set on kernel command
line. The meson option 'default-hierarchy=' is also deprecated, i.e.
only cgroup v2 ('unified' hierarchy) can be selected as build-time
default.

解决方案

因为系统已经启动不起来了,所以需要一个临时环境可以访问硬盘上的数据。我这边还有个win系统,你可以使用diskGen来修改数据。
我使用的是一个制作好的Manjaro镜像盘,进入临时系统后挂载硬盘进行修改。

  1. 进入系统查看当前硬盘信息 sudo fdisk -l
    image-20240705102321608可见/dev/sda4是我的Linux硬盘
  2. 挂载硬盘 sudo mount /dev/sda4 /mnt 将硬盘挂载在临时系统的mnt路径下
  3. 修改GRUB 配置文件 /etc/default/grub 但是因为挂载的原因,需要修改的路径为 /mnt/etc/default/grub
  4. 编辑启动参数 GRUB_CMDLINE_LINUX 加上 SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE=1
    image-20240705102604164
  5. 保存文件并退出编辑器,然后更新 GRUB 配置 sudo update-grub
  6. 重新启动就可以进入系统了

参考文档

  1. [Unstable Update] June 2024 Edition
  2. systemd News
  3. How do I add a kernel boot parameter?