哪个是用于从休眠状态恢复的 user?space 命令?

use*_*570 3 linux debian hibernate initrd linux-kernel

在很长一段时间内,我使用

echo disk > /sys/power/state
Run Code Online (Sandbox Code Playgroud)

为了休眠/dev/sda10,我使用 Debian 发行版的 initrd 来恢复。

但是最近,我切换到了一个需要我使用完全自定义的 initramfs 的 raid 阵列(我必须从头开始构建它,因为尝试修改现有的 initrd 没有奏效)以便在挂载 root 之前设置?划分。

有两种恢复方式:内核可以直接读取带有resume=内核参数的交换文件系统(并且它会在启动 init 之前恢复)?或者它需要一些用户空间(例如加载模块)才能访问交换分区。

那么用户空间命令是什么才能从 /dev/mapper/isw_qfyzrvbsusf_Volume0p9??

Arg*_*uts 8

简短的回答是 /sys/power/resume

更长的答案,因为如果有任何好处,这本身不会有太大作用。大多数发行版建议从 init / PID 1 进程(早期用户空间)启动恢复。但是,这些说明几乎总是会通知您将内核 cmd 行参数添加到具有恢复目标的引导加载程序。其原因几乎在所有情况下都是 initramfs 构建工具 (dracut / mkinitcpio / initramfs-tools) 本身由配置中的该参数触发。

根据您的示例和发行版,我假设您正在使用低级内核接口进行挂起(swsusp)。还有许多其他实用程序可用于启动挂起进程;所有这些基本上都是围绕第一个项目 swusp 的包装。

  • swusp - 低级内核接口;用户空间接口是通过 sysfs
  • uswswp - 低级用户空间软件挂起包装器 - 提供 s2disk、s2ram 实用程序(未主动维护)
  • pm-utils - 配置进程的高级脚本
  • systemd-suspend - 在 systemd 系统上,有一个挂起目标可用,它将通过内核接口启动挂起操作。

恢复配置

使用 initramfs 映像在 linux 中引导序列的一个过度简化的轮廓是:

[BIOS] ==> [引导加载程序] ==>[临时 rootfs 上的内核 - initramfs] ==> [rootfs 上的内核 - 驱动器]

在 initramfs 阶段的末尾有一个小窗口,可以在其中进行恢复;在内核启动 PID 1(systemd 或 init)之后,加载了 raid 的驱动程序,但在安装实际驱动器之前。

我提供了一个典型的简历配置示例。这假设您提供的恢复路径是交换分区;而不是包含交换文件的“正常”分区。交换文件需要额外的配置。systemd 方法是不同的 - 它使用基于 resume.target 的 udev 规则触发恢复过程。如果更传统的引导加载程序 / initramfs 映像方法不起作用,则值得研究。这是基于 init 的系统执行此操作的方式的直接核心;但是手动插入您自己的脚本并获得正确的相互依赖性/相对时间有点棘手。

最重要的是,触发恢复的时间点紧接在内核安装“真实”硬盘驱动器之前。因此,如果内核可以挂载整个 fs,它也具有挂载交换分区所需的所有功能和信息。

确保您的交换分区是通过 fstab 挂载的;dracut initramfs 工具专门寻找它,如果交换分区不存在,则不包括恢复模块。

配置引导加载程序

假设您使用的是 grub2,您需要在 更新您的 grub 映像中附加resume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9GRUB_CMDLINE_LINUX_DEFAULT字段/etc/default/grub,通常使用命令:sudo grub2-mkconfig -o /boot/grub2/grub.cfg

重建initramfs

您需要使用恢复功能(以及您已经进行的 raid 修改)重建 initramfs 映像。Debian 提供了 dracut 和 initramfs-tools 来生成 initramfs。它必须使用 resume 模块重新生成。使用 dracut,添加命令行参数--add resume。使用update-initramfs,将条目添加resume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9到配置文件中/etc/initramfs-tools/conf.d/resume

应该是这样;假设我对您的配置做了一些正确的假设。

编辑; 假设您可以正确计时,您可以将交换分区的主要/次要设备号从 init 脚本回显到 /sys/power/resume 以触发恢复。您的 initramfs(或 initd)映像需要具有恢复支持,否则该 sysfs 项及其代表的功能将不存在。见https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/983805