返回

Linux 启动卡死:解决 Failed to stat resume device 错误

Linux

Linux 初始化卡死: "Failed to stat resume device" 错误

当 Linux 系统启动时,如果遇到 "Failed to stat resume device" 错误,并卡在启动界面,这通常表示系统在尝试恢复休眠状态时遇到了问题,导致无法继续正常启动。 这个错误信息明确地指出系统无法找到指定的恢复设备(/dev/disk/by-uuid/...)。

问题根源

这类问题的核心在于 系统无法定位到休眠时使用的交换分区或交换文件 。 系统休眠时会将内存中的数据写入到指定的设备上,当系统下次启动时,尝试读取这些数据来恢复之前的状态。 如果该设备不存在,或设备标识符(如 UUID)已更改,就会出现这个错误。 这个错误的发生,跟以下几种情况有关:

  • UUID不匹配: fstab 文件中配置的 swap 分区或者交换文件 UUID 与当前系统中的设备 UUID 不匹配。
  • 交换设备被移除或变更: 休眠后交换分区所在的磁盘或分区被移除,或者在下次启动时,UUID或设备名称改变。
  • mkinitcpio配置问题: initramfs 的配置缺少了恢复休眠所需的支持,或是相关的配置不正确。

解决方法

要解决该问题,需确保系统能够正确地识别和使用 swap 分区/交换文件。下面提供几种解决方案。

方案一: 检查和更新 /etc/fstab 文件

fstab 文件定义了系统启动时如何挂载文件系统。 要检查并更新 fstab , 请按照以下步骤:

  1. 使用 blkid 命令找到交换分区的当前 UUID。

    blkid
    

    这会输出所有分区的UUID信息, 请仔细找到 swap 分区对应的 UUID (Type="swap"),并复制。

  2. 编辑 /etc/fstab 文件,使用正确的 UUID 更新 swap 条目

     sudo nano /etc/fstab
    

将 fstab 文件中原有的交换分区的 UUID 更新为刚刚复制的 UUID。 例如, fstab 文件中对应行可能如下:

  ```
   UUID=老的UUID   none    swap  defaults  0 0
 ```

 将其替换为:
 ```
  UUID=正确的UUID   none    swap  defaults  0 0
  ```
  1. 保存并关闭 /etc/fstab 文件。

重启计算机。如果 /etc/fstab 中的 swap 对应信息是正确的,并且 swap 设备是可用状态, 此方法可以解决问题。

方案二: 重新生成 initramfs

initramfs 是系统启动过程中在根文件系统挂载之前加载的初始 RAM 磁盘镜像。它包含了启动所需的模块和工具。 如果 initramfs 配置不当,也可能导致无法加载恢复设备,可以通过重新生成 initramfs 来尝试解决问题:

  1. 以管理员权限运行以下命令
      sudo mkinitcpio -P
    

这个命令会使用 /etc/mkinitcpio.conf 中的配置, 为所有的内核镜像生成新的 initramfs 。
也可以只为特定的内核重新生成:
bash sudo mkinitcpio -p linux
注意:linux 应根据系统内核进行相应的调整。 如果不确定请使用 -P 为全部内核镜像重新生成。

  1. 重启计算机。

此方法通常可以解决 initramfs 中配置不当引起的问题。

方案三: 禁用休眠恢复

如果暂时不需要休眠功能, 可以直接禁用恢复功能以避免此错误。 请按照以下步骤操作:

  1. 编辑内核启动参数文件: 使用文本编辑器打开 grub 或者其他引导加载器的配置文件的对应选项(具体路径请根据系统引导工具确定, 例如: sudo nano /etc/default/grub ).

  2. 修改 GRUB_CMDLINE_LINUX_DEFAULT 参数, 加入 resume=no 例如:

   GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=no"
  • 注意:这里的 "quiet splash" 参数仅为示例,您的启动参数可能有所不同, 添加 resume=no 即可,注意中间使用空格间隔 。
  1. 保存修改的文件并退出。

  2. 更新 grub 配置 : 执行以下命令更新 grub 启动菜单

      sudo update-grub
    

    或者对于 archlinux 执行:

    sudo grub-mkconfig -o /boot/grub/grub.cfg
    
  3. 重启计算机。

    加入 resume=no 参数会强制系统忽略恢复设备, 这能使系统直接启动而避免出现错误,但系统不能进入休眠, 也无法从休眠中恢复,因此只作为最后的方案使用。

安全建议

  • 备份 /etc/fstab 和其他重要的配置文件: 在修改任何系统文件前进行备份,有助于在出现问题时快速恢复。
  • 小心使用 mkinitcpio: 了解 mkinitcpio 工具及其配置文件,并确认需要生成新的镜像时使用,以防因不必要的或错误的操作导致更严重的问题。
  • 确保 UUID 的准确性: 修改文件时, 请仔细检查并核对 UUID ,错误的 UUID 仍然会导致系统启动错误。
  • 保持系统更新: 操作系统以及引导工具的更新通常会修复一些 bug 和安全性问题,使系统更加稳定和安全。

以上提供几种通用的解决方案来处理 "Failed to stat resume device" 问题。 可以尝试其中的一种或者多种组合方式,来逐步排查问题,直至系统可以顺利启动。 如果尝试各种方案均未能解决, 考虑检查硬件是否存在异常。