从交换文件中hibernate和恢复
我在Notebook中配置了一个新的Ubuntu安装来使用交换文件,而不是使用交换分区。
默认情况下不可能使用交换文件让Ubuntuhibernate,所以我尝试了本教程 ,但它特定于grub1 ,而Ubuntu现在使用grub2 。
有人知道怎么做这个吗?
使用uswusp使用Swap文件进行hibernate
虽然可以通过设置内核参数来hibernate以交换文件,但它可以与systemd hibernate一起使用。 但是,我无法让它恢复,所以转而使用uswsusp(用户空间软件暂停) 。 以下是我在Ubuntu 17.04 / 17.10上使用的步骤。
创建交换文件
用于创建格式化4GiB交换文件的命令,已挂载并添加到/etc/fstab
:
sudo fallocate -l 4g /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
validation交换文件分区
sudo findmnt -no SOURCE,UUID -T /mnt/4GiB.swap > /dev/sda1 11cc33ee-1234-abcd-1234-ddeeff112233
安装用户空间软件暂停(uswsusp)
sudo apt install uswsusp
配置uswsusp
要创建/etc/uswsusp.conf
并重新创建initramfs
:
sudo dpkg-reconfigure -pmedium uswsusp
-
Yes
的’ 继续没有有效的交换空间? ‘ (向导没有设置交换文件。) - 选择交换文件所在的分区 ,交叉引用上面的
findmnt
详细信息。 ( 注意: 不是交换文件本身 )
注意:手动对/etc/uswsusp.conf
所做的任何更改都需要使用以下命令重新创建initramfs
:
sudo update-initramfs -u
测试uswusphibernate
sudo s2disk
hibernate和恢复时屏幕上应该有snapshot
消息。
将s2disk与systemd hibernate一起使用
默认情况下,systemd将使用它自己的hibernate命令,所以通过覆盖systemd-hibernate.service
用uswusp命令替换它们:
sudo systemctl edit systemd-hibernate.service
在打开的文本编辑器中放入以下文本(需要空白的ExecStart)。 然后保存并退出:
[Service] ExecStart= ExecStart=/usr/sbin/s2disk ExecStartPost=/bin/run-parts -a post /lib/systemd/system-sleep
这将创建带有覆盖详细信息的/etc/systemd/system/systemd-hibernate.service.d/override.conf
文件。
测试systemd hibernate:
systemctl hibernate
注意:要检查systemd override.conf
是否已创建,加载且没有错误,请运行:
systemctl status systemd-hibernate.service
参考文献:
- Debian Wiki – Hibernate_Without_Swap_Partition
- Arch Wiki – Uswsusp
我已经快速阅读了本教程,如果我已经正确理解,您只需要为Linux命令行指定resume
选项。 使用Grub2非常简单,您的更改将始终保留。 您需要编辑/etc/default/grub
文件,特别是此行:
GRUB_CMDLINE_LINUX="resume=... resume_offset=..."
之后,运行sudo update-grub
以使更改生效。
更改GRUB_CMDLINE_LINUX
不会影响您拥有的其他Linux安装(因为/etc/grub.d/30_os-prober
不使用此变量)。
关于你遇到的问题:交换文件的分区是加密的吗? 如果是这样,hibernate将无法正常工作。 如果没有,那么filefrag -v /swapfile
的输出可能会有所帮助。