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 / 问题 / 1266599
Accepted
alexanderadam
alexanderadam
Asked: 2020-08-13 06:38:30 +0800 CST2020-08-13 06:38:30 +0800 CST 2020-08-13 06:38:30 +0800 CST

如何在 Ubuntu 20.04 上增加与 ZFS 的交换以启用休眠?

  • 772

前言

我犯了一个错误,在我的高效工作桌面上以双启动配置安装了带有加密 ZFS / OpenZFSroot分区的 Ubuntu 20.04 LTS (请参阅下面的分区表)。但是我没有对我正在关注的教程给予适当的关注,现在似乎我有一个 4G 的交换分区,虽然我有 32G 的 RAM(编辑: 我发现了我如何能够增加交换但我仍然不能进入休眠状态——见下文)。因此我不能让这台机器进入休眠状态。

解决此问题的最佳方法是什么,以便我可以让这台机器进入休眠状态?

当前状态

$ sudo fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 1.88 TiB, 2048408248320 bytes, 4000797360 sectors
Disk model: KXG60PNV2T04 NVMe KIOXIA 2048GB         
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 1FCA11ED-9263-4C06-A8DF-594C0DE84AFA

Device             Start        End    Sectors   Size Type
/dev/nvme0n1p1      2048    1085439    1083392   529M Windows recovery environment
/dev/nvme0n1p2   1085440    1290239     204800   100M EFI System
/dev/nvme0n1p3   1290240    1323007      32768    16M Microsoft reserved
/dev/nvme0n1p4   1323008  409420488  408097481 194.6G Microsoft basic data
/dev/nvme0n1p5 409421824  410920959    1499136   732M Windows recovery environment
/dev/nvme0n1p6 410923008  415117311    4194304     2G Linux filesystem
/dev/nvme0n1p7 415117312 4000797326 3585680015   1.7T Linux filesystem

$ sudo swapon --show --output all
NAME     TYPE      SIZE USED PRIO UUID                                 LABEL
/dev/zd0 partition   4G   0B   -2 1e1fb013-69d9-4878-b358-6b8ee53d5b09

$ sudo zpool list -v
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
Root         1.66T   535G  1.13T        -         -     2%    31%  1.00x    ONLINE  -
  nvme0n1p7  1.66T   535G  1.13T        -         -     2%  31.5%      -  ONLINE

$ sudo zpool status -v
  pool: Root
 state: ONLINE
  scan: none requested
config:

    NAME         STATE     READ WRITE CKSUM
    Root         ONLINE       0     0     0
      nvme0n1p7  ONLINE       0     0     0

errors: No known data errors

$ sudo zfs list
NAME                                                                              USED  AVAIL     REFER  MOUNTPOINT
Root                                                                              539G  1.08T      192K  none
Root/root                                                                         534G  1.08T      530G  /
Root/root/00a891589b00cebc55cb6767e266ca38ac201daf3a6048c1f33d7d55c0710533        544K  1.08T      143M  legacy
[…] # many other legacy mount points
Root/root/ffe52d35c873e6a417ee12c7025d848dac1f269b8078266f00a8d8088fd34384        396K  1.08T      607M  legacy
Root/swap                                                                        4.25G  1.08T      172M  -

$ sudo zfs get all Root/swap
NAME       PROPERTY              VALUE                 SOURCE
Root/swap  type                  volume                -
Root/swap  creation              So Aug  2 15:36 2020  -
Root/swap  used                  4.25G                 -
Root/swap  available             1.08T                 -
Root/swap  referenced            172M                  -
Root/swap  compressratio         1.00x                 -
Root/swap  reservation           none                  default
Root/swap  volsize               4G                    local
Root/swap  volblocksize          4K                    -
Root/swap  checksum              on                    default
Root/swap  compression           off                   local
Root/swap  readonly              off                   default
Root/swap  createtxg             3746                  -
Root/swap  copies                1                     default
Root/swap  refreservation        4.25G                 local
Root/swap  guid                  12379969387189982956  -
Root/swap  primarycache          metadata              local
Root/swap  secondarycache        none                  local
Root/swap  usedbysnapshots       0B                    -
Root/swap  usedbydataset         172M                  -
Root/swap  usedbychildren        0B                    -
Root/swap  usedbyrefreservation  4.08G                 -
Root/swap  logbias               throughput            local
Root/swap  objsetid              278                   -
Root/swap  dedup                 off                   default
Root/swap  mlslabel              none                  default
Root/swap  sync                  always                local
Root/swap  refcompressratio      1.00x                 -
Root/swap  written               172M                  -
Root/swap  logicalused           169M                  -
Root/swap  logicalreferenced     169M                  -
Root/swap  volmode               default               default
Root/swap  snapshot_limit        none                  default
Root/swap  snapshot_count        none                  default
Root/swap  snapdev               hidden                default
Root/swap  context               none                  default
Root/swap  fscontext             none                  default
Root/swap  defcontext            none                  default
Root/swap  rootcontext           none                  default
Root/swap  redundant_metadata    all                   default
Root/swap  encryption            aes-256-gcm           -
Root/swap  keylocation           none                  default
Root/swap  keyformat             passphrase            -
Root/swap  pbkdf2iters           342K                  -
Root/swap  encryptionroot        Root                  -
Root/swap  keystatus             available             -

我试过的

创建交换文件

我认为交换文件可能很容易解决,但我显然错了:

$ sudo dd if=/dev/zero of=/swapfile bs=1MiB count=$((32*1024))
32768+0 records in
32768+0 records out
34359738368 bytes (34 GB, 32 GiB) copied, 14.5783 s, 2.4 GB/s

$ sudo chmod 600 /swapfile

$ sudo swapon /swapfile
swapon: /swapfile: skipping - it appears to have holes.

所以我想我应该增加交换分区。我也不清楚为什么swapon声称交换分区有,4G尽管zfs get all Root/swap说它1.08T是可用的。

任何与 GParted 相关的东西

GParted 不会识别太多。这可能与os-prober(GParted 问题 14、Debian 错误 888114、os-prober 问题 1848496、openzfs 问题9801和9069)中的错误有关

在此处输入图像描述

替换小的 Swap 分区(=增加 ZFS 上的 Swap 分区)

创建命令的灵感来自GitHub 上的评论,但请记住不要使用-o sync=always.

$ sudo zfs create -V 32G -b $(getconf PAGESIZE) -o logbias=throughput -o primarycache=metadata -o secondarycache=none -o com.sun:auto-snapshot=false -o compression=zle Root/swap_two
$ sudo zfs rename Root/swap Root/swap_bak
$ sudo zfs rename Root/swap_two Root/swap
$ sudo mkswap -f /dev/zvol/Root/swap
$ sudo swapon /dev/zvol/Root/swap

确保此条目位于/etc/fstab:

/dev/zvol/Root/swap none swap discard 0 0

然后重新启动并删除微小的旧交换:

$ sudo zfs destroy Root/swap_bak

虽然这似乎有效,但我仍然无法休眠:

$ sudo systemctl hibernate
Failed to hibernate system via logind: Sleep verb "hibernate" not supported

因此,我仍然愿意接受任何建议。也许它需要一个专用resume参数GRUB_CMDLINE_LINUX_DEFAULT?

swap partitioning hibernate zfs 20.04
  • 2 2 个回答
  • 1724 Views

2 个回答

  • Voted
  1. Best Answer
    alexanderadam
    2021-05-25T04:34:24+08:002021-05-25T04:34:24+08:00

    最后原因与ZFS无关。即使在调整交换大小后它也不起作用,因为它只是在较新的 Ubuntu 版本上被禁用(不过会重新考虑)。

    要解决这个问题,您必须激活休眠。

    1. com.ubuntu.desktop.pkla在编辑器中打开:
    $ sudo vim /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
    # or on some machines
    $ sudo vim /etc/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
    

    搜索条目Disable hibernate by default in upower并将Disable hibernate by default in logind每个ResultActive值更改为yes。

    重新启动并测试结果

    $ sudo systemctl hibernate
    # or
    $ sudo pm-hibernate
    

    如果它仍然不起作用,您可能必须在 BIOS中停用Fast boot和之类的东西(注意:您很可能必须在较新的机器上这样做)。Secure boot

    如果测试不再导致错误,您还应该能够将休眠分配给 Ubuntu 设置中的某些操作。例如按下电源按钮。

    电源 — 挂起和电源 — 按钮 电源按钮行为 — 休眠

    • 1
  2. Avishek Acharya Av
    2020-08-13T06:55:39+08:002020-08-13T06:55:39+08:00

    增加交换分区大小并将其用于休眠的过程

    1. 创建交换分区

      激活交换分区

      使新的交换分区适用于休眠(可选)

      创建交换分区 启动到 Ubuntu 安装 CD 并选择立即运行 Ubuntu 的选项 转到系统 -> GParted 分区编辑器

    删除交换分区,如果其中没有其他内容,则删除保存它的扩展分区。(如果你能奇迹般地从这里调整交换分区的大小,我想你的生活会比我的轻松得多。)将主分区的大小减少你希望新交换的大小(我做了为了安全起见,我的 2x RAM + 500MB)。最简单的方法是在“free space following”字段中填写您希望交换的空间量在现在已经创建的空闲空间中,选择new,输入linux-swap,您可以命名分区如果您喜欢“交换”,请点击应用按钮(应该是复选标记)将更改写入磁盘完成后,重新启动进入 Ubuntu 激活交换分区(如果您的交换位于主硬盘驱动器上,则无需在此处执行任何操作。)现在您需要查找您的交换所在的分区以及它的 UUID 是什么。UUID?!你说?好吧,这是分区的通用唯一标识符,因此即使由于添加磁盘等原因,它位于从引导到引导的不同挂载点上,您也可以引用它。

    打开终端并运行 gksu gparted & 并输入您的 root 密码。& 让这个进程运行,同时仍然允许你访问命令行。

    右键单击您的交换分区并选择Information。您应该会看到那里列出的路径和UUID 。保持开放以供进一步参考。运行 gksu gedit /etc/fstab & 并查找其中包含交换的行。它应该是第三列,由空格或制表符分隔。您可以使用路径或 UUID 告诉 Linux 在哪里可以找到您的交换分区。我推荐 UUID,因为即使您移动分区或磁盘以某种方式变为 sdb 而不是 sda 或类似的东西,它也会保持不变。进行适当的编辑并保存文件。如果您使用 UUID(当然,使用您的 UUID),您的行应该如下所示:

    UUID=41e86209-3802-424b-9a9d-d7683142dab7 无交换 sw 0 0

    或者如果您使用路径:/dev/sda2 none swap sw 0 0

    保存文件。使用此命令启用新的交换分区。

    sudo swapon --all
    

    或者

    $ sudo swapon --all --verbose
    
    swapon on /dev/sda2
    swapon: /dev/sda2: found swap signature: version 1, page-size 4, same byte order
    swapon: /dev/sda2: pagesize=4096, swapsize=2147483648, devsize=2147483648
    Confirm that the swap partition exists.
    
    $ cat /proc/swaps
    Filename                                Type            Size    Used    Priority
    /dev/sda2                               partition       2097148 0       -1
    

    重新启动以确保在启动时正确激活新的交换 使交换分区为休眠(可选)工作“信息:这不适用于 12.04,从休眠恢复工作在 12.04 中有所不同。”

    再次打开终端并运行 cat /proc/swaps ,希望您能看到那里列出的交换分区的路径。如果不是,则上述步骤中可能出现问题。这是我的输出:

    使用的文件名类型大小优先级 /dev/sda2 分区 2676732 73380 -1 gksu gedit /etc/default/grub & 拉起引导加载程序配置

    查找 GRUB_CMDLINE_LINUX="" 行并确保它看起来像这样(当然使用您的 UUID) GRUB_CMDLINE_LINUX="resume=UUID=41e86209-3802-424b-9a9d-d7683142dab7" 并保存文件

    sudo update-grub并等待它完成

    gksu gedit /etc/initramfs-tools/conf.d/resume & 并确保其内容为 resume=UUID=41e86209-3802-424b-9a9d-d7683142dab7 (当然用你的 UUID 代替我的)。保存文件!

    sudo update-initramfs -u
    

    重启!现在你应该可以休眠和恢复了!

    • -2

相关问题

  • Linux 文件系统层次结构中的默认目录是什么意思?

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

  • 如何将 /usr 移动到新分区?

  • 如何从双启动计算机访问加密的主文件夹?

  • 您对台式机和家庭服务器的驱动器分区方案有什么建议?[关闭]

Sidebar

Stats

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

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

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

    • 24 个回答
  • Marko Smith

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

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +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
    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