AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 6769
In Process
tfmoraes
tfmoraes
Asked: 2010-10-14 03:58:06 +0800 CST2010-10-14 03:58:06 +0800 CST 2010-10-14 03:58:06 +0800 CST

从交换文件休眠和恢复

  • 772

我已经在笔记本中配置了一个新的 Ubuntu 安装以使用交换文件,而不是使用交换分区。

默认情况下,使用交换文件是不可能让 Ubuntu 休眠的,所以我尝试了这个教程,但它是特定于grub1的,而 Ubuntu 现在使用grub2。

有人知道怎么做这个吗?

swap hibernate
  • 5 5 个回答
  • 60165 Views

5 个回答

  • Voted
  1. Anthony O.
    2019-04-09T05:42:57+08:002019-04-09T05:42:57+08:00

    这是我为使其与 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
    
    • 请注意包含您的分区的 UUID /swapfile:
    $ sudo findmnt -no UUID -T /swapfile
    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"
    
    • sudo systemctl edit systemd-hibernate.service使用以下内容编辑 SystemD hibernate 服务并填充它:
    [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"
    
    • 更新蛴螬:
    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 配置(使用 编辑它sudo visudo -f /etc/sudoers.d/powerdev)来做到这一点:

    %powerdev ALL=NOPASSWD: /usr/sbin/s2both, /usr/sbin/s2ram, /bin/systemctl hibernate
    

    使用的文档:

    • 卡斯的回答
    • Debian“没有交换分区的休眠”
    • 配置 Lubuntu 18.04 以使用交换文件启用休眠
    • 所以问题“s2disk 工作,但从菜单休眠在登录后卡住”
    • 59
  2. Cas
    2017-03-13T14:50:05+08:002017-03-13T14:50:05+08:00

    使用 uswusp 使用交换文件休眠

    尽管可以休眠以交换文件,并且可以通过设置内核参数与 systemd hibernate 一起使用。但是,我无法让它恢复,所以转而使用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
    

    验证交换文件分区

    sudo findmnt -no SOURCE,UUID -T /swapfile
    > /dev/sda1 11cc33ee-1234-abcd-1234-ddeeff112233
    

    安装用户空间软件挂起(uswsusp)

    sudo apt install uswsusp
    

    配置 uswsusp

    创建/etc/uswsusp.conf和重新创建initramfs:

    sudo dpkg-reconfigure -pmedium uswsusp
    
    • Yesto '在没有有效交换空间的情况下继续?' (向导尚未设置交换文件。)
    • 选择交换文件所在的分区,与上面的详细信息交叉引用findmnt。(注意:不是交换文件本身)

    注意:手动进行的任何更改/etc/uswsusp.conf都需要initramfs使用以下命令重新创建:

    sudo update-initramfs -u
    

    测试uswusp休眠

    sudo s2disk
    

    屏幕上应该有snapshot关于休眠和恢复的消息。

    将 s2disk 与 systemd 休眠一起使用

    默认情况下,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具有覆盖详细信息的文件。

    测试 systemd 休眠:

    systemctl hibernate 
    

    注意:要检查 systemdoverride.conf是否已创建、加载且没有错误,请运行:

    systemctl status systemd-hibernate.service
    

    参考:

    • Debian Wiki - Hibernate_Without_Swap_Partition
    • Arch Wiki-Uswsusp
    • 30
  3. Andrea Corbellini
    2010-10-14T07:46:35+08:002010-10-14T07:46:35+08:00

    我已经快速阅读了本教程,如果我理解正确,您只需指定resumeLinux 命令行的选项。使用 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可能会有所帮助。

    • 9
  4. Nairum
    2022-06-02T06:13:00+08:002022-06-02T06:13:00+08:00

    Ubuntu 22.04

    uswusp已弃用。你仍然可以将它用于Ubuntu <= 20.04。要在 Ubuntu 22.04 上查找交换偏移量:

    • Run sudo filefrag -v /swapfile
    • 在"physical_offset"列中,复制第一行号(不带点!)。值示例:1234567。

    来源:如何在 Ubuntu 上启用休眠(使用交换文件时)

    对于 Ubuntu 22.04,所有其他步骤保持不变,因此除了安装和使用uswusp之外,您可以遵循其他答案。

    • 2
  5. user2275455
    2021-06-02T13:46:56+08:002021-06-02T13:46:56+08:00

    我花了几个小时在关机菜单上获得带有休眠选项的 KDE(霓虹灯),既然我已经解决了,我决定在这里分享它。如果你使用 KDE,你应该创建一个文件“/etc/polkit-1/localauthority/10-vendor.d/hibernate.pkla”,内容如下:

    [Re-enable hibernate by default in upower]
    Identity=unix-user:*
    Action=org.freedesktop.upower.hibernate
    ResultActive=yes
    
    [Re-enable hibernate by default in logind]
    Identity=unix-user:*
    Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
    ResultActive=yes
    

    我在这里:https ://forum.kde.org/viewtopic.php?f=309&t=135294

    • 0

相关问题

  • 如何在默认设置不起作用的笔记本电脑上使休眠/睡眠工作?

  • 如何从命令行挂起/休眠?

  • 混合动力在哪里暂停?

  • 如果有空闲 RAM,如何清空交换?

  • 如何让我的电脑中的风扇在暂停时关闭?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve