使用 lvmcache 和 LUKS-on-LVM 设置 NixOS

使用 lvmcache 和 LUKS-on-LVM 设置 NixOS

我正在尝试在笔记本电脑上安装 NixOS 19.09。我的磁盘设置是 30GB SSD 和 700GB HDD。我决定使用 SSD 作为 HDD 的缓存,并且还希望对整个根分区进行加密。

因此,我的分区设置如下所示:

  • /dev/sda- 固态硬盘
    • /dev/sda1- 启动分区,UEFI可启动标志,FAT格式,未加密
    • /dev/sda2- 用于缓存
  • /dev/sdb- HDD,未分区,用作 LVM 的主磁盘

我格式化了/dev/sda1使用 mkfs.fat,我设置了一个卷组 vg,其中包括/dev/sda2/dev/sdb,然后我按照您可以在lvmcache 手册页。创建名为的单个缓存卷后硬盘0,我在上面运行了 cryptsetup,这样我就可以实现 LUKS-on-LVM 方案。整个缓存硬盘0被加密为卢克斯2
然后我解锁了硬盘0再次使用 cryptsetup,将其映射到/dev/映射器/根。我安装了/mnt在其上,创建了/mnt/启动并安装/dev/sda1那里。之后,我生成了一个 NixOS 配置并基本上将其保留为默认值,其中显着的变化是添加dm缓存boot.initrd.kernelModules,并设置boot.initrd.luks.devices."root".preLVM错误的。然后,我运行nixos-install成功并重新启动。

系统成功运行GRUB,但之后无法找到根卷。它提供了以下错误消息:

device-mapper: table: 254:3: cache: Error creating cache's policy  
device-mapper: reload ioctl on (254:3) failed: Invalid argument

我假设它在检测整个硬盘0。我尝试从实时安装 USB 记忆棒启动它,并且您必须启用dm缓存使用 modprobe 然后运行

# lvchange -ay vg

要得到硬盘0活跃且可见。

有人尝试过类似的设置吗?我怎样才能让它自动启动?或者这个设置在概念上有缺陷并且永远无法工作?

PS:希望问题足够详细,我是第一次在这里问。

答案1

这是我今天在经历了一些令人头疼的事情之后开始工作的消息:

boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "ehci_pci" "usb_storage" "usbhid" "sd_mod" "sr_mod" ];
  boot.initrd.kernelModules = [ "dm-cache" "dm-cache-smq" "dm-cache-mq" "dm-cache-cleaner" ];
  boot.kernelModules = [ "kvm-amd" "dm-cache" "dm-cache-smq" "dm-persistent-data" "dm-bio-prison" "dm-clone" "dm-crypt" "dm-writecache" "dm-mirror" "dm-snapshot"];

  boot.initrd.luks.devices = {
    "decrypted" = {
      device = "/dev/mapper/vg-crypt";
      allowDiscards = true;
      preLVM = false;
    };
  };

主要技巧是"dm-cache-smq"在模块中使用 - 没有它,我会收到类似的错误消息,就像你得到的那样。

您将收到一条有关丢失的丑陋警告消息cache_check- 要摆脱它,请添加以下内容:

services.lvm.boot.thin.enable = true;

相关内容