Настройка NixOS с lvmcache и LUKS-on-LVM

Настройка NixOS с lvmcache и LUKS-on-LVM

Я пытаюсь установить NixOS 19.09 на ноутбук. Моя дисковая конфигурация — SSD на 30 ГБ и HDD на 700 ГБ. Я решил, что хочу использовать SSD в качестве кэша для HDD, а также хочу, чтобы весь корневой раздел был зашифрован.

Таким образом, моя настройка разделов выглядит следующим образом:

  • /dev/sda- SSD
    • /dev/sda1- загрузочный раздел, флаг загрузки UEFI, отформатирован в FAT, незашифрован
    • /dev/sda2- для использования в кэше
  • /dev/sdb- HDD, неразмеченный, для использования в качестве основного диска с LVM

Я отформатировал/dev/sda1с помощью mkfs.fat я создал группу томов vg, которая включала/dev/sda2и/dev/sdb, и затем я следовал руководству, которое вы можете найти вСтраница руководства lvmcache. После создания одного кэшированного тома с именемhdd0, я запустил cryptsetup на нем, чтобы я мог реализовать схему LUKS-on-LVM. Весь кэшированныйhdd0зашифрован с помощьюЛЮКС2.
Затем я разблокировалhdd0снова использую cryptsetup, сопоставляя его с/dev/mapper/корень. Я поднялся/мнтна нем создано/mnt/загрузкаи смонтированный/dev/sda1там. После этого я сгенерировал конфигурацию NixOS и в основном оставил ее по умолчанию, с заметными изменениями, добавивdm-кэшкboot.initrd.kernelМодули, и настройка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

Я предполагаю, что у него проблема с обнаружением всегоhdd0. Я попробовал загрузить его с USB-накопителя для установки в реальном времени, и там нужно включитьdm-кэшиспользуя modprobe и затем запустить

# lvchange -ay vg

получитьhdd0быть активным и заметным.

Кто-нибудь пробовал подобную настройку? Как мне сделать так, чтобы она загружалась автоматически? Или настройка концептуально ошибочна и никогда не сможет работать?

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;

Связанный контент