我在笔记本中配置了一个新的 Ubuntu 安装来使用交换文件,而不是使用交换分区。
默认情况下,不可能使用交换文件让 Ubuntu 休眠,所以我尝试了本教程,但它特定于grub1,而 Ubuntu 现在使用grub2。
有人知道怎么做这个吗?
Ant*_* O. 51
这是我为使其适用于 Ubuntu 18.04 所做的工作。
/swapfile至少拥有 RAM 的大小sudo swapoff /swapfile
sudo dd if=/dev/zero of=/swapfile bs=$(cat /proc/meminfo | awk '/MemTotal/ {print $2}') count=1024 conv=notrunc
sudo mkswap /swapfile
sudo swapon /swapfile
Run Code Online (Sandbox Code Playgroud)
/swapfile:$ sudo findmnt -no UUID -T /swapfile
20562a02-cfa6-42e0-bb9f-5e936ea763d0
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
sudo systemctl edit systemd-hibernate.service以下内容编辑 SystemD 休眠服务并填充它:[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
Run Code Online (Sandbox Code Playgroud)
/swapfile:$ sudo swap-offset /swapfile
resume offset = 34818
Run Code Online (Sandbox Code Playgroud)
/etc/default/grub和修改以下行,将 Grub 配置为从交换文件恢复:GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=20562a02-cfa6-42e0-bb9f-5e936ea763d0 resume_offset=34818 quiet splash"
Run Code Online (Sandbox Code Playgroud)
sudo update-grub
Run Code Online (Sandbox Code Playgroud)
/etc/initramfs-tools/conf.d/resume:RESUME=UUID=20562a02-cfa6-42e0-bb9e-5e936ea763d0 resume_offset=34816
# Resume from /swapfile
Run Code Online (Sandbox Code Playgroud)
sudo update-initramfs -u -k all
Run Code Online (Sandbox Code Playgroud)
现在您可以使用sudo systemctl hibernate.
还可以创建这些脚本:
sudo swapoff /swapfile
sudo dd if=/dev/zero of=/swapfile bs=$(cat /proc/meminfo | awk '/MemTotal/ {print $2}') count=1024 conv=notrunc
sudo mkswap /swapfile
sudo swapon /swapfile
Run Code Online (Sandbox Code Playgroud)
因此,您可以gotosleep使用gotohibernation.
您必须能够执行sudo s2both,sudo s2ram并且sudo systemctl hibernate无需输入密码才能使先前的脚本工作。
例如,您可以通过创建一个powerdev组,将您当前的用户添加到该组,并配置以下 sudoers 配置(使用 编辑它sudo visudo -f /etc/sudoers.d/powerdev)来做到这一点:
%powerdev ALL=NOPASSWD: /usr/sbin/s2both, /usr/sbin/s2ram, /bin/systemctl hibernate
Run Code Online (Sandbox Code Playgroud)
使用的文档:
Cas*_*Cas 29
尽管可以休眠以交换文件,并且据说它可以通过设置内核参数与 systemd 休眠一起使用。但是,我无法让它恢复,所以转而使用uswsusp (userspace software suspend)。以下是我在 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
Run Code Online (Sandbox Code Playgroud)
sudo findmnt -no SOURCE,UUID -T /swapfile
> /dev/sda1 11cc33ee-1234-abcd-1234-ddeeff112233
Run Code Online (Sandbox Code Playgroud)
sudo apt install uswsusp
Run Code Online (Sandbox Code Playgroud)
创建/etc/uswsusp.conf和重新创建initramfs:
sudo dpkg-reconfigure -pmedium uswsusp
Run Code Online (Sandbox Code Playgroud)
Yes' 在没有有效交换空间的情况下继续吗?' (向导尚未设置交换文件。)findmnt上面的详细信息。(注意:不是交换文件本身)注意:手动进行的任何更改/etc/uswsusp.conf都需要initramfs使用以下命令重新创建:
sudo update-initramfs -u
Run Code Online (Sandbox Code Playgroud)
sudo s2disk
Run Code Online (Sandbox Code Playgroud)
snapshot休眠和恢复时屏幕上应该有消息。
默认情况下,systemd 将使用它自己的休眠命令,因此通过覆盖以下命令将它们替换为 uswusp 命令systemd-hibernate.service:
sudo systemctl edit systemd-hibernate.service
Run Code Online (Sandbox Code Playgroud)
在打开的文本编辑器中输入以下文本(需要空白的 ExecStart)。然后保存退出:
[Service]
ExecStart=
ExecStart=/usr/sbin/s2disk
ExecStartPost=/bin/run-parts -a post /lib/systemd/system-sleep
Run Code Online (Sandbox Code Playgroud)
这将创建/etc/systemd/system/systemd-hibernate.service.d/override.conf具有覆盖详细信息的文件。
systemctl hibernate
Run Code Online (Sandbox Code Playgroud)
注意:要检查 systemdoverride.conf是否已创建、加载且没有错误,请运行:
systemctl status systemd-hibernate.service
Run Code Online (Sandbox Code Playgroud)
参考:
小智 11
uswusp已弃用。您仍然可以在Ubuntu <= 20.04上使用它。要查找 Ubuntu 22.04 上的交换偏移量:
Run sudo filefrag -v /swapfile"physical_offset"列中,复制第一行号(不带点!)。值示例:1234567.我已经快速阅读了本教程,如果我理解正确,您只需要指定resumeLinux 命令行的选项。使用 Grub2 非常简单,您的更改将始终保留。您需要编辑/etc/default/grub文件,特别是这一行:
GRUB_CMDLINE_LINUX="resume=... resume_offset=..."
Run Code Online (Sandbox Code Playgroud)
之后,运行sudo update-grub以使更改生效。
更改GRUB_CMDLINE_LINUX不会影响您拥有的其他 Linux 安装(因为/etc/grub.d/30_os-prober不使用此变量)。
关于您遇到的问题:交换文件的分区是否加密?如果是这样,休眠将不起作用。如果没有,那么 的输出filefrag -v /swapfile可能会有所帮助。
| 归档时间: |
|
| 查看次数: |
48391 次 |
| 最近记录: |