我已经配置了休眠,它的工作,只是为了确保它不会在某个时候失败 - 这个问题。
我在不同的设备上有两个交换文件,第一个是 SSD 上的小交换,第二个是 HDD 上的内存。Hibernate 配置为小一。它现在工作正常,因为休眠并不总是需要太多(不是所有的东西都写或压缩,我不知道)。
如何配置休眠以使用两个交换?或者它会自动处理它们而无需做任何事情?在内核选项中,我已经设置了第一个小交换,如果它首先使用它(最快)然后第二个,那就太好了。
我不想让 SSD 交换更大,因为 SSD 很小。
leonid@DevSSD:~$ grep resume < /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=050f8852-d8f6-4979-a4e4-c3d9b981bee9 resume_offset=34816"
/etc/fstab
UUID=050f8852-d8f6-4979-a4e4-c3d9b981bee9 / ext4 relatime,grpquota,data=ordered,usrquota,rw,errors=remount-ro,quota 0 1
UUID=3bcf1591-7033-416a-addf-9cf8e2e10c93 /home/leonid/hdd ext4 defaults,rw,errors=remount-ro 0 1
/swapfile none swap sw 0 0
/home/leonid/hdd/swapfile none swap sw 0 0
UUID=26DA-1C76 /boot/efi vfat defaults 0 1
更新:我为测试和设置优先级做了更小的交换。休眠不以更高的优先级交换:
leonid@DevSSD:~$ swapon
NAME TYPE SIZE USED PRIO
/swap64k file 60K 0B 1
/home/leonid/hdd/swapfile file 8G 0B 100
leonid@DevSSD:~$ systemctl hibernate
Failed to hibernate system via logind: Sleep verb not supported
简而言之,您不必使用单个文件或分区进行休眠。
TL;博士
睡眠状态或电源接口的基本内核文档中没有任何内容表明交换必须位于单个文件中。实际上,有一些迹象表明休眠数据已写入计算机上的可用交换空间:
然而,进一步的探索将我们引向 swsusp 的文档,其中有一个简短的常见问题解答部分,以及引用
尽管这仅直接与分区有关,但我当然会将其解释为应用于您机器上的交换空间。
您的“如果我的交换文件空间不足怎么办”的潜在问题。在这里,我们遇到了一些模糊。该文档向我们保证,系统将默认尝试创建大约2/5 内存大小的图像:
但是,如果图像超过交换大小,文档没有说明可能发生的情况。当我意外关闭交换并尝试休眠时,我自己的经验是没有任何反应。
稍后编辑
这是否说明了我、Ubuntu 用户或 Linux 用户?
我很好奇如果交换文件太小会发生什么,所以我创建了一个 44KB 交换文件(有效!)并尝试休眠:
我通过使用两个交换文件进行了进一步测试,较小的交换文件具有较高的优先级:
我个人的经验:交换分区比可用内存小没有什么问题,但在 Debian Buster 中,如果你只有一个交换文件,systemd 似乎会失败,并且必须正确设置交换设备的优先级。
最近版本的systemd似乎正在使用具有最低优先级的交换区域进行恢复(如果有空闲交换但最高优先级的分区已经满,可能会避免失败)。此外 IIRC,让系统分配优先级(在负范围内)不起作用(随时证明我错了......)我不确定交换文件是否有助于将恢复映像安装在小型交换分区中,或者是否在恢复设备选择中引入了错误 - 我不记得我是否真的验证了哪个设备用于恢复,我肯定知道是否是一种回归(在上次操作系统升级之前暂停用于在相同条件下工作)并且设置交换设备的优先级确实修复了它。
使用uswsusp的
s2disk
工具没有这个问题,我相信 pm-suspend 也没有。例如,我的交换配置 (fstab) - 16G 内存(始终完全使用)、4g 交换分区和 16g 交换文件:
通过为分区设置较低的优先级(由 UUID 标识),systemd将能够正常恢复。删除交换文件会在挂起阶段导致错误(交换区域太小),删除分区或未设置优先级会导致它在恢复时失败(initrd 无法找到正确的恢复交换卷)。
我不确定是什么驱动了恢复图像的大小,但内核通常会尝试使用不超过总 RAM 的 2/5。文档对此有点含糊;它确实说恢复图像必须适合恢复交换卷,但不是关于它包含的内容以及何时可以在图像本身之外利用其他分区。也就是说,请记住
最新的 systemd 代码明确支持在交换文件上设置恢复;我不确定它是多久以前添加的,也不确定我是在使用它还是只是将恢复图像安装在小分区中,但它确实适用于此设置。
power目录下的内核文档中有很多有用的文档。使用uswsusp可能还有更多运气,如果您仍然需要由systemd启动暂停,您也可以覆盖
systemd-hibernate.service
调用s2disk
。