有没有办法在 nixos 上进行休眠和加密交换?

有没有办法在 nixos 上进行休眠和加密交换?

有一种方法可以打开加密交换+休眠乌班图。还有一种方法可以在 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

所以,我的方法是:

  1. 使用与主设备相同的密码创建 luks 设备
    sudo cryptsetup -y -v luksFormat /dev/nvme0n1p1
    
  2. 重新启动以确保 UUID 正确更新(不确定为什么它在第一次重新启动后会发生变化)
  3. 添加配置以在 initrd 中挂载设备:
    boot.initrd.luks.devices."swap".device = 
    "/dev/disk/by-uuid/936542de-2068-41b7-b804-741ec80a59c6";
    
  4. 重新启动以确保设备正确打开。如果密码相同,luks 只会询问一次,并尝试使用相同的密码打开所有设备。
  5. 添加带有打开卷的 UUID 的纯配置,通过以下方式获得blkid
      swapDevices =
        [{ device = "/dev/disk/by-uuid/772a37e9-c010-4942-8f3d-b7f645092b02"; }];
    
  6. 休眠与pm-hibernate.

相关内容