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

nix*_*nix 5 swap nixos disk-encryption

有一种方法可以在Ubuntu上获得加密交换 + 休眠。还有一种方法可以在 nixos 上获得加密交换(使用 randomEncryption.enable = true),以及一种使 hibernate 进行交换的方法。有没有办法休眠加密交换?

Emm*_*osa 3

简而言之,要在加密交换上使用休眠,您需要创建一个密钥文件,然后使用该文件来解锁 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]";
    };
  }
];
Run Code Online (Sandbox Code Playgroud)

您可以使用 获取 LUKS 分区的 UUID lsblk -o name,uuid

最后,nixos-rebuild boot然后重新启动系统。重新启动后,NixOS 将解锁加密的交换分区并激活它。如果没有,请检查journalctl -b相关错误。