Answers:
尽管可以休眠以交换文件,并且据说可以通过设置内核参数与systemd休眠一起使用。但是,我无法恢复它,所以改用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
sudo findmnt -no SOURCE,UUID -T /swapfile
> /dev/sda1 11cc33ee-1234-abcd-1234-ddeeff112233
sudo apt install uswsusp
要创建/etc/uswsusp.conf
和重新创建initramfs
:
sudo dpkg-reconfigure -pmedium uswsusp
Yes
继续' 没有有效的交换空间?' (向导尚未设置交换文件。)findmnt
上面的详细信息进行交叉引用。(注意:不是交换文件本身)注意:手动进行的任何更改/etc/uswsusp.conf
都需要initramfs
使用以下命令重新创建:
sudo update-initramfs -u
sudo s2disk
snapshot
休眠和继续屏幕上应该有消息。
默认情况下,systemd将使用它自己的休眠命令,因此通过覆盖以下内容,将它们替换为uswusp命令systemd-hibernate.service
:
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
带有替代详细信息的文件。
systemctl hibernate
注意:要检查systemd override.conf
是否已创建,加载并没有错误,请运行:
systemctl status systemd-hibernate.service
参考文献:
enable
选项。您永远不应直接复制到systemctl
/etc/systemd/system/
/lib/systemd/system/
/etc/systemd/system/
sudo s2disk
仅Saving snapshot
关闭日志,然后关闭了显示器,挂起了约5分钟,然后关闭了计算机。但是,在我打开它后,它通常会启动,就像没有休眠一样。
sudo findmnt -no SOURCE,UUID -T /mnt/4GiB.swap
应更改为sudo findmnt -no SOURCE,UUID -T /swapfile
这是我为使其与Ubuntu 18.04兼容而所做的工作。
使您/swapfile
的RAM至少大小
sudo swapoff /swapfile
sudo dd if=/dev/zero of=/swapfile bs=$(cat /proc/meminfo | grep MemTotal | grep -oh '[0-9]*') count=1024 conv=notrun
sudo mkswap /swapfile
sudo swapon /swapfile
请注意包含您的分区的UUID /swapfile
:
$ sudo findmnt -no SOURCE,UUID -T /swapfile
/dev/nvme0n1p5 20562a02-cfa6-42e0-bb9f-5e936ea763d0
重新配置软件包uswsusp
以正确使用交换文件:
sudo dpkg-reconfigure -pmedium uswsusp
# Answer "Yes" to continue without swap space
# Select "/dev/disk/by-uuid/20562a02-cfa6-42e0-bb9f-5e936ea763d0" replace the UUID with the result from the previous findmnt command
# Encrypt: "No"
使用来编辑SystemD休眠服务,sudo systemctl edit systemd-hibernate.service
并将其填充以下内容:
[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
ExecStart=/usr/sbin/s2disk
ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep
注意您的的简历偏移/swapfile
:
$ sudo swap-offset /swapfile
resume offset = 34818
通过编辑/etc/default/grub
和修改以下行,将Grub配置为从交换文件恢复:
GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=20562a02-cfa6-42e0-bb9f-5e936ea763d0 resume_offset=34818 quiet splash"
更新Grub:
sudo update-grub
创建以下内容/etc/initramfs-tools/conf.d/resume
:
RESUME=UUID=20562a02-cfa6-42e0-bb9e-5e936ea763d0 resume_offset=34816
# Resume from /swapfile
更新initramfs:
sudo update-initramfs -u -k all
现在您可以使用休眠了sudo systemctl hibernate
。
也可以创建这些脚本:
sudo tee /usr/local/bin/gotosleep <<EOF
dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
sleep 2
sudo /usr/sbin/s2both
EOF
sudo chmod +x /usr/local/bin/gotosleep
sudo tee /usr/local/bin/gotohibernation <<EOF
dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
sleep 2
sudo systemctl hibernate
EOF
sudo chmod +x /usr/local/bin/gotohibernation
因此,您可以与睡眠gotosleep
或休眠gotohibernation
。
你必须能够执行sudo s2both
,sudo s2ram
而sudo systemctl hibernate
不必为以前的脚本工作输入您的密码。
您可以这样做,例如,通过创建一个powerdev
组,将当前用户添加到该组,然后配置以下sudoers config(使用进行编辑sudo visudo -f /etc/sudoers.d/powerdev
):
%powerdev ALL=NOPASSWD: /usr/sbin/s2both, /usr/sbin/s2ram, /bin/systemctl hibernate
使用的文件:
我已快速阅读了该教程,如果我对它的理解正确,则只需要为resume
Linux命令行指定选项即可。使用Grub2非常简单,您的更改将始终保留。您需要编辑/etc/default/grub
文件,特别是以下行:
GRUB_CMDLINE_LINUX="resume=... resume_offset=..."
之后,运行sudo update-grub
以使更改生效。
更改GRUB_CMDLINE_LINUX
不会影响您拥有的其他Linux安装(因为/etc/grub.d/30_os-prober
不使用此变量)。
关于您遇到的问题:交换文件的分区是否已加密?如果是这样,休眠将不起作用。如果不是,则输出filefrag -v /swapfile
可能会有所帮助。
/etc/default/grub
您需要运行update-grub
。
ExceStart=run-parts -a post /lib/systemd/system-sleep
是ExceStartPost=run-parts -a post /lib/systemd/system-sleep