Configurando NixOS com lvmcache e LUKS-on-LVM

Configurando NixOS com lvmcache e LUKS-on-LVM

Estou tentando instalar o NixOS 19.09 em um notebook. Minha configuração de disco é um SSD de 30 GB e um HDD de 700 GB. Decidi que quero usar o SSD como cache para o HDD e também que toda a partição raiz seja criptografada.

Minha configuração de partição, portanto, é assim:

  • /dev/sda-SSD
    • /dev/sda1- partição de inicialização, sinalizador de inicialização UEFI, formatado com FAT, não criptografado
    • /dev/sda2- para ser usado para o cache
  • /dev/sdb- HDD, não particionado, para ser usado como disco principal com LVM

Eu formatei/dev/sda1com mkfs.fat, configurei um grupo de volumes vg que incluía/dev/sda2e/dev/sdb, e então segui o guia que você pode encontrar nopágina de manual do lvmcache. Depois de criar um único volume em cache chamadodisco rígido0, executei o cryptsetup nele, para poder obter um esquema LUKS-on-LVM. Todo o cachedisco rígido0é criptografado comLUKS2.
Então eu desbloqueeidisco rígido0novamente usando cryptsetup, mapeando-o para/dev/mapper/root. eu montei/mntnele, criado/mnt/inicializaçãoe montado/dev/sda1lá. Depois disso, gerei uma configuração do NixOS e basicamente a deixei no padrão, com as mudanças notáveis ​​de adicionardm-cacheparaboot.initrd.kernelModulese configuraçãoboot.initrd.luks.devices."root".preLVMparafalso. Então, executei nixos-installcom sucesso e reiniciei.

O sistema conseguiu executar o GRUB com êxito, mas depois disso não conseguiu encontrar o volume raiz. Ele forneceu uma mensagem de erro de:

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

Presumo que haja um problema com a detecção de todo odisco rígido0. Eu tentei inicializá-lo a partir do pendrive de instalação ao vivo, e aí você tem que habilitardm-cacheusando modprobe e depois execute

# lvchange -ay vg

obterdisco rígido0estar ativo e visível.

Alguém tentou uma configuração semelhante? Como posso fazer com que ele inicialize automaticamente? Ou a configuração é conceitualmente falha e nunca poderá funcionar?

PS: Espero que a pergunta seja detalhada o suficiente, é a primeira vez que pergunto aqui.

Responder1

Aqui está a minha confirmação de que comecei a trabalhar hoje, depois de alguns headbangers:

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;
    };
  };

O truque principal era ter "dm-cache-smq"módulos - sem eles, eu estava recebendo uma mensagem de erro semelhante à que você está recebendo.

Você receberá uma mensagem de aviso feia sobre cache_checkfalta - para se livrar dela, adicione isto também:

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

informação relacionada