使用 LUKs 加密交换分区进行休眠

使用 LUKs 加密交换分区进行休眠

在我公司的笔记本电脑上,我装有 Windows 11,它具有加密磁盘、工作休眠模式,登录时我只需要提供一次密码。我希望在我的个人笔记本电脑上也能有同样的 Ubuntu。现在我有 Ubuntu 20.04。里面有些乱,所以我想全新安装 Ubuntu 22.04。并且想知道加密分区(LUKS,或者其他什么?)的最佳和最简单的方法是什么,这将允许我跳过 GRUB,并在使用登录密码登录时解锁磁盘/分区。同时,我需要/要求一个可以工作的休眠模式。请注意,我不使用 SWAP 文件而是使用分区。

RN我使用这个配置进行休眠: https://gist.github.com/Mlocik97/5936fa55d4971f05c6a1c0fb10c4c9bb 也就是说我设置了sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla文件内容:

[Enable hibernate in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Enable hibernate 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

但它有效,因为我没有加密 SWAP。我像GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/nvme0n1p3"/etc/default/grub文件中一样设置了恢复参数,但现在当我打开计算机时,会显示 GRUB 菜单,即使 Ubuntu 只是我个人笔记本电脑上的系统,我想跳过该步骤。

我尝试在虚拟机(QEMU/KVM)中安装带有加密虚拟磁盘(LUKS)的 Ubuntu 22.04。该安装程序在 LVM 分区上为我提供了选项,但是当我这样做时,我需要输入两次密码,一次用于解锁磁盘/分区,第二次是在登录时,我觉得这很烦人,如果我可以只输入一次密码就好了。

所以我正在解决两个问题,让休眠与加密的 SWAP 一起工作,并让分区解锁与登录密码一起工作。有人能帮我吗?

答案1

此答案适用于使用加密交换分区启用休眠。此答案不涉及使用 TPM 或其他绕过 LUKS 密码提示的方法。

使用 LUKs 加密交换分区进行休眠

提纲和参考文献

第一的增加交换分区:

更改加密 LVM 上的交换大小?(kubuntu 20.04 安装)

第二启用休眠

增加加密交换的大小 https://gist.github.com/tjvr/f82004565139a5b13031af1ce5a50a02

1.减少根目录并增加交换分区

介绍

使用默认安装过程在笔记本电脑中安装 Ubuntu。在高级选项下选择 LUKS(和 LVM)。测试系统以确保一切正常。

我的笔记本电脑有 4GB RAM 和 1GB 的安装过程中加密的交换分区。我使用了以下公式:

新的交换分区大小 = RAM 大小 + Sqrt(RAM 大小)

所以我需要一个 6GB 的交换空间。也就是说,我需要向现有的交换分区添加 5GB。

实际过程

注意:分区号、逻辑卷名等来自没有其他操作系统的笔记本电脑上 Ubuntu 22.04 的全新默认安装(带加密)。YMMV。

从 Ubuntu Live Installation USB 启动并使用“尝试 Ubuntu”选项。

打开终端并以超级用户身份运行后续命令

sudo su

加密设备不应被解锁。使用以下方法验证:

lsblk 

输出不应该有任何cryptlvm

解锁加密设备

cryptsetup open /dev/sda4 crypt 

出现提示时输入 LUKS 密码。

获取逻辑卷标识符

lsblk

# └─sda4                  8:6    0 464,6G  0 part
#   └─sda4_crypt        253:0    0 464,5G  0 crypt
#     ├─vgubuntu-root   253:1    0 463,6G  0 lvm   /
#     └─vgubuntu-swap_1 253:2    0   980M  0 lvm   [SWAP]

缩小逻辑根卷和文件系统。

lvresize --verbose --resizefs -L -5G /dev/mapper/vgubuntu-root

# `lvresize` <volume> => resize a logical volume
#   --verbose  => Give more info.
#   --resizefs => Resize filesystem AND LV with fsadm(8).
#   -L         => Specifies the new size of the LV, 
#                 +/- add/subtracts to/from current size, g|G is GiB.

检查逻辑根卷的文件系统是否存在错误

e2fsck -f /dev/mapper/vgubuntu-root

# `e2fsck`<fs-path> => Check a Linux ext2/ext3/ext4 file system
#   -f => Force checking even if the file system seems clean.

增加 swapsize

lvresize --verbose -L +5G /dev/mapper/vgubuntu-swap_1

关闭终端并重新启动到内部 LUKS 加密驱动器。

该命令free显示旧的交换大小。

来源:增加加密交换的大小

终端中的以下命令应该可以解决此问题:

sudo swapoff -a  
sudo cryptsetup resize vgubuntu-swap_1
sudo mkswap /dev/mapper/vgubuntu-swap_1 
sudo swapon -a 

再次使用该free命令来验证您是否具有所需的交换大小。

2. 启用休眠以进行交换

注意:我不需要对文件进行任何更改(或创建) /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla 正如问题中提到的那样。

编辑文件/etc/initramfs-tools/conf.d/resume并添加:

RESUME=/dev/mapper/vgubuntu-swap_1

编辑该文件/etc/default/grub以使以以下内容开头的行GRUB_CMDLINE_LINUX_DEFAULT看起来像:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mapper/vgubuntu-swap_1"

接下来的两个命令将分别更新 intramfs 和 grub:

sudo update-initramfs -u -k all
sudo update-grub
sudo reboot

测试运行:

sudo systemctl hibernate

如果一切顺利,您的笔记本电脑应该进入休眠状态。

希望这可以帮助

相关内容