背景

因为arch的滚动升级模式,每天pacman -Syu已经是一种习惯了(虽然我是使用yay的),升级过程中会连内核一起升级,但不会立刻生效,通常要等到下次重启时才会生效。
因为此前使用的是有一点激进的linux内核,而不是linux-lts,所以在国庆节前的某一次不知名的升级中,就出了岔子,然而当时什么都没发现,节后回到公司才发现开机后屏幕不亮了🤣

调查过程

虽然背景中提到了是因为内核的原因,但在刚发现屏幕不亮时是不知道原因的,只知道屏是黑的,鼠标键盘没有反应,慌作一团。
好在平时会使用ssh远程办公,拿出surface检查了一下发现还能连上,略微放心。
冷静下来后开始按顺序排查,首先排除了硬件线路问题。
然后用journalctl查了一下各个服务启动的日志,看起来一切正常。
尝试禁用sddm,再重启试图进入字符界面,依然失败,看来不是gui的问题,也不是哪个服务启动的问题。
之后使用dmesg查看kernel日志,在日志中发现了一行驱动挂掉的信息:

[    3.507498] RIP: 0010:drm_calc_vbltimestamp_from_scanoutpos+0x30c/0x350 [drm]

现在发现是驱动问题了,然而怎么解决并不知道,询问了其他用arch的前辈后,得到了换成lts内核的建议,总之先试试……

更换内核操作步骤

  1. 安装linux-lts 和 linux-lts-headers 这两个包,直接pacman即可
  2. 在/boot/loaders/entries里面,复制出arch.conf的文件到arch-lts.conf(也可能叫linux.conf,名字不重要)
  3. 编辑刚刚复制出来的arch-lts.conf,把其中的内核指向修改为lts版本
## This is just an example config file.
## Please edit the paths and kernel parameters according to your system.

title   Arch Linux
linux   /vmlinuz-linux
#initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=/dev/nvme0n1p2 rw add_efi_memmap rootflags=subvol=@root

改为

## This is just an example config file.
## Please edit the paths and kernel parameters according to your system.

title   Arch Linux
linux   /vmlinuz-linux-lts
#initrd  /intel-ucode.img
initrd  /initramfs-linux-lts.img
options root=/dev/nvme0n1p2 rw add_efi_memmap rootflags=subvol=@root

4.修改/boot/loader/loader.conf 中的default 为 arch-lts
5.reboot

这些编辑可以直接用root权限操作,不需要额外配置文件权限

至于以后……

总之现在问题解决了,之后我大概会长期使用lts版本了吧,反正日常工作用的电脑,稳一点比较重要。
另外……感觉自己好像获得了一个成就,我终于把自己的arch滚挂了一次(虽然不是什么大问题)

10-09 10:05