如何在 Linux Kernel 4.x 中禁用暂停

如何在 Linux Kernel 4.x 中禁用暂停

我正在通过 LinuxPBA 和 sedutil 使用全盘加密(https://github.com/Drive-Trust-Alliance/sedutil)。简而言之,在启动时,一段独立于 BIOS 的代码会请求磁盘密码。如果正确,磁盘将被解锁,系统将在不关闭磁盘电源的情况下重新启动,我可以看到 grub,内核继续运行并且发行版启动。

在这种情况下暂停是危险的,这是一个已知的限制 [1] [2]。当这种情况发生时,数据就会被损坏。坏消息是我正在经历随机暂停事件经常。

我不需要暂停,但我使用休眠。有没有办法禁用暂停(不影响休眠)?也许重新编译内核,或者通过启动选项......


[1] 挂起动作触发磁盘断电;这意味着,在恢复时,FS 被加密。 Linux 尝试访问它之前映射的扇区,这些扇区现在已加密,从而损坏数据。它很快就会检测到问题,以只读方式重新安装 FS,并避免进一步损坏。下次重新启动时,fsck.ext4 通常会修复损坏。但由于我遇到随机暂停,不是由我触发的,很难调试/报告,我想在找出根本原因后完全禁用暂停。

[2]类似问题:类似这样的建议https://wiki.debian.org/Suspend#Disable_suspend_and_hibernation还不够。另外,似乎无法告诉内核/ACPI“请不要在挂起时关闭磁盘”(是否可以在挂起/睡眠/S3 状态下不关闭 SSD?)。

答案1

重新编译内核CONFIG_SUSPEND=nCONFIG_HIBERNATION=y应该防止挂起但仍允许休眠。挂起仅在用户空间请求时发生,所以您也应该能够以这种方式禁用它。

另外,我不确定驱动器到底是如何工作的,但我也担心重置可能会导致它们丢失密钥。如果是这样,请注意 Linux 存储堆栈将重置无法响应的设备 - 例如,如果它们长时间忙于重试坏块。/sys/block/sd?/device/timeout是设置超时的地方;默认为 30 秒。

最后,您可以使用例如hdparm -Y将驱动器置于睡眠模式。默认情况下,可能没有任何操作,但驱动器可能被配置为将自身置于待机(而不是睡眠)模式;希望如果是的话,不会丢失钥匙。

相关内容