Arch Linux 启动问题修复
内存盘镜像故障
问题描述
Arch Linux 开机卡在“加载初始化内存盘” (Loading initial ramdisk)
问题分析
这个问题最常见的原因是:在系统更新(尤其是内核更新)后,initramfs(初始化内存盘镜像)没有被正确生成,或者引导加载程序(GRUB 等)的配置没有被正确更新。这导致引导程序加载了旧的或损坏的镜像文件,从而卡住。
考虑一个简化的 Linux 启动顺序:
- BIOS/UEFI (电脑固件) ->
- GRUB (引导加载程序) ->
- Kernel (Linux 内核) + initramfs (临时根文件系统) ->
- 真正的根文件系统 (和
systemd等init进程)
关于 Linux 启动以及 /boot 文件夹下各个组件的具体作用,可以参考文章boot 文件夹与 EFI 分区
修复方法
从 U 盘启动 Arch Linux 的 live 环境。运行 lsblk 查看硬盘分区情况,方便后续挂载。其情况可能如下:
1 | root@archiso ~ # lsblk |
然后对于某些分了子卷的分区,可以先挂载,然后查看
1 | mount /dev/nvme0n1p3 /mnt |
其结果可能如下:
1 | root@archiso ~ # btrfs subvolume list /mnt |
然后开始执行挂载操作,并且进入系统(相当于通过 live 环境解决了无法直接通过开机进入系统的问题):
1 | umount /mnt |
然后可以检查 Initramfs 所在分区硬盘空间占用情况
1 | df -h /boot # 查看 efi 分区占用百分比 |
以下就是该分区被某些垃圾文件占满的情况:
1 | [root@archiso /]# ls -lh /boot |
此时删除掉 initramfs-linux.img.tmp 即可。如果还是不放心,还可以删掉 initramfs-linux-fallback.img 以及 initramfs-linux.img,这两个会在后续生成。
最后重新生成 Initramfs,更新 GRUB 配置确保它能找到新的 initramfs 文件,重启。
1 | mkinitcpio -P # 重新生成所有内核的初始化内存盘 |
未找到恢复设备
问题描述
开机时卡在 No resume device found, exiting.
问题分析
系统被配置为在启动时尝试从“休眠”(suspend-to-disk)中恢复。此时系统需要一个 swap(交换)分区来执行此操作,但它要么找不到这个分区,要么被告知了错误的位置 (UUID)。
开机时检查 resume device
检查 "resume device"发生在启动过程中非常早的 initramfs 阶段,这个过程由 GRUB 和 initramfs 共同控制。
- GRUB 并不检查设备,它仅仅通过内核参数传递信息。
- 配置系统支持休眠 (Hibernation) 时,GRUB 配置文件(
/boot/grub/grub.cfg)中linux开头的那一行里,会被添加上一个resume=...参数。这个参数会指向你的 swap 分区(或 swap 文件)的 UUID 或设备路径 - GRUB 的工作就是在启动内核时,把这个
resume=UUID=...参数(连同root=...等其他参数)一起传递给内核。
- 配置系统支持休眠 (Hibernation) 时,GRUB 配置文件(
- initramfs 控制方式:通过
mkinitcpio.conf中的HOOKS执行工作。- 内核启动后,挂载
initramfs作为临时根目录。initramfs中的init脚本开始运行。 - 一个特定的钩子(hook),在 Arch 中通常就是
resume钩子,会被触发。这个resume脚本会读取内核收到的resume=...参数,从而知道它应该去检查哪个设备。 - initramfs 加载访问该设备所需的驱动(比如 Btrfs、LVM、NVMe 驱动,这些都是 initramfs 的核心功能)。
- 它会探测该设备,检查是否存在一个有效的、匹配当前内核的休眠镜像(system snapshot)。
- 内核启动后,挂载
修复方法
已知 swap 分区是 nvme0n1p2,因此重新进入 live 环境配置:
1 | mount -o subvol=@ /dev/nvme0n1p3 /mnt |
然后查看 swap 分区的 UUID:blkid /dev/nvme0n1p2,得到结果为:
1 | [root@archiso /]# blkid /dev/nvme0n1p2 |
然后编辑 GRUB 配置文件:vim /etc/default/grub,找到 GRUB_CMDLINE_LINUX_DEFAULT= 开头的一行,在引号内加上 resume=UUID=455e3566-b69f-4cb7-9083-d31f3f7adf1f,
最后重新生成 grub 配置,退出并重启:
1 | grub-mkconfig -o /boot/grub/grub.cfg |
无法进入图形界面
问题描述
开机时卡在
1 | Unable to resume from device '/dev/disk/by-uuid/455e3566-b69f-4cb7-9083-d31f3f7adf1f' (259:2) offset 0, continuing boot process. |
并且下方光标一直在闪烁。按下 Ctrl+Alt+F2 可以进入 tty,可以在 tty 中正常登录账户。
问题分析
Unable to resume from device ... continuing boot process. 说明系统找到了我们指定的 swap 分区 (UUID是对的),尝试从它恢复休眠(失败了,这是正常的,因为这是电脑关机后开机),然后它放弃了恢复,并继续正常启动。同时可以从 tty 登录,说明系统启动本身没有问题,只是图形桌面坏了。
这时候问题可以被定位到显卡驱动或者是显示服务协议上(Wayland 和 X11 的选择)。
修复方法
最后首先通过运行
1 | systemctl status gdm.service |
发现无异常,说明 GDM 本身可以正常工作。然后在 /etc/gdm/custom.conf 文件中注释掉了 WaylandEnable=false,重启后成功进入图形界面。原因大概是最新的 gnome-session 已经不提供 X11 会话文件,只支持 Wayland,所以禁掉了 Wayland 之后就进不去了。






