有一种方法可以打开加密交换+休眠乌班图。还有一种方法可以在 nixos 上获得加密交换(使用 randomEncryption.enable = true),以及一种使 hibernate 进行交换的方法。有没有办法休眠加密交换?
答案1
简而言之,要在加密交换上使用休眠,您需要创建一个密钥文件,然后使用该文件来解锁 LUKS 加密交换分区。这与使用随机加密密钥形成对比,随机加密密钥与休眠不兼容。
当然,使用这种方法时,密钥文件的位置很重要。您最好的选择是也加密您的根文件系统,然后将密钥文件放在那里(例如/root/swap.key)。在这种情况下,系统会在启动过程中提示您输入根文件系统密码,这将使密钥文件可用于启动进程,以便它可以解锁交换 LUKS 容器并将“解锁”设备用作交换设备。
说明
笔记: 将这些说明视为一般指导,而不是可以简单复制粘贴的内容。
启动安装介质后...
创建分区、LUKS 容器、文件系统并挂载它们。
创建密钥文件:dd count=1 bs=512 if=/dev/urandom of=/mnt/root/swap.key
使用密钥文件为加密交换创建 LUKS 容器。
解锁交换 LUKS 容器,使用 格式化它mkswap
并使用 激活它swapon
。
继续生成 NixOS 配置。到目前为止,它就像正常的 NixOS 安装一样。
创建密钥文件:dd count=1 bs=512 if=/dev/urandom of=/mnt/root/swap.key
将swapDevices
配置从/mnt/etc/nixos/hardware-configuration.nix
移至/mnt/etc/nixos/configuration.nix
。注意:如果您再次跑步,则需要重复此步骤nixos-generate-config
。
编辑swapDevices
以/mnt/etc/nixos/configuration.nix
启用加密。这是一个例子:
swapDevices =
[ {
device = "/dev/disk/by-uuid/..."; #This is already done for you. Leave as-is.
encrypted = {
enable = true;
keyFile = "/mnt-root/root/swap.key"; #Yes, /mnt-root is correct.
label = "..."; The name used with `cryptsetup` when unlocking the LUKS container. It can be whatever you want, ex "luksswap".
blkDev = "/dev/disk/by-uuid/[UUID of the LUKS partition]";
};
}
];
您可以使用 获取 LUKS 分区的 UUID lsblk -o name,uuid
。
最后,nixos-rebuild boot
然后重新启动系统。重新启动后,NixOS 将解锁加密的交换分区并激活它。如果没有,请检查journalctl -b
相关错误。
答案2
所以,我的方法是:
- 使用与主设备相同的密码创建 luks 设备
sudo cryptsetup -y -v luksFormat /dev/nvme0n1p1
- 重新启动以确保 UUID 正确更新(不确定为什么它在第一次重新启动后会发生变化)
- 添加配置以在 initrd 中挂载设备:
boot.initrd.luks.devices."swap".device = "/dev/disk/by-uuid/936542de-2068-41b7-b804-741ec80a59c6";
- 重新启动以确保设备正确打开。如果密码相同,luks 只会询问一次,并尝试使用相同的密码打开所有设备。
- 添加带有打开卷的 UUID 的纯配置,通过以下方式获得
blkid
:swapDevices = [{ device = "/dev/disk/by-uuid/772a37e9-c010-4942-8f3d-b7f645092b02"; }];
- 休眠与
pm-hibernate
.