Com a ajuda acima de Alexander Batischev, e algumas informações muito úteis do Reddit usuário cookie_enthusiast
na página /r/linuxquestions
no Reddit, eu consegui fazer isso funcionar.
Acontece que o GRUB2 funciona bem com UUIDs e não tão bem com nomes de dispositivos. Com esse conhecimento em mente, precisamos dos seguintes 4 UUIDs disponíveis, antes de podermos (manualmente) criar uma entrada de menu extra do GRUB para nosso NixOS grub.cfg
configfile
:
- O UUID do dispositivo LUKS.
- O UUID do grupo de volume LVM.
- O UUID do Volume Lógico do LVM.
- O UUID do sistema de arquivos que contém o arquivo
grub.cfg
que queremos carregar por meio da diretivaconfigfile
no GRUB2.
Vou listar aqui como obter esses quatro UUIDs:
- Execute
cryptsetup luksUUID /dev/sda2
e remova todos os traços (-
) do UUID ,a0cb535a-8468-485f-a220-a5f49e85c9f4
se tornariaa0cb535a8468485fa220a5f49e85c9f4
no meu caso. - Execute
vgdisplay
e procure oVG UUID
,lvmpool
com UUID5atKN9-PQBi-T9wb-Iyz8-qP4y-HN2E-c5uLOT
no meu caso. - Execute
lvdisplay
e procure oLV UUID
do nome do LV ou do caminho LV que contém o arquivogrub.cfg
,nix-root
ou/dev/lvmpool/nix-root
com UUIDC9zkjF-IHu0-qQkP-KgLf-8rAy-TVPu-HQ7gtj
no meu caso. - Execute
lsblk -p -o +UUID
e procure o UUID do caminho do dispositivo que contém seu arquivogrub.cfg
,/dev/mapper/lvmpool-nix--root
com UUIDcc6a06bb-336f-4e9f-a5f0-fdd43e7f548f
no meu caso.
Isso permitirá que você crie a seguinte entrada de menu extra do GRUB para fazer referência a nosso NixOS grub.cfg
configfile
, que está no meu nix-root
lv
e por causa do boot.loader.grub.device = "nodev";
no meu /etc/nixos/configuration.nix
não há GRUB instalado para minha instalação do NixOS (no Arch, isso entraria em /etc/grub.d/40_custom
):
menuentry 'NixOS' {
insmod crypto
insmod cryptodisk
insmod luks
insmod lvm
cryptomount -u a0cb535a8468485fa220a5f49e85c9f4
set root='lvmid/5atKN9-PQBi-T9wb-Iyz8-qP4y-HN2E-c5uLOT/C9zkjF-IHu0-qQkP-KgLf-8rAy-TVPu-HQ7gtj'
search --fs-uuid --set=root cc6a06bb-336f-4e9f-a5f0-fdd43e7f548f
configfile '/boot/grub/grub.cfg'
}
Para esclarecer isso ainda mais, isso contém alguns valores literais, como lvmid
, que não devem ser substituídos pelo nome ou ID do seu LVM. Isso não está devidamente documentado em nenhum lugar, parece. O mesmo problema se aplica quando você coloca o UUID do seu dispositivo LUKS na linha cryptomount -u
com traços , o GRUB apenas informará Press any key to continue
, o que (obviamente) não é muito útil.
O modelo simples para um menu do GRUB manual para inicializar a partir de crypt -> LVM -> root
com um LVM no LUKS configuração seria assim:
menuentry 'NixOS' {
insmod crypto
insmod cryptodisk
insmod luks
insmod lvm
cryptomount -u <LUKS UUID without dashes>
set root='lvmid/<LVM Volume Group UUID>/<LVM Logical Volume UUID>'
search --fs-uuid --set=root <Filesystem UUID>
configfile '/boot/grub/grub.cfg'
}
Para aqueles que também estão interessados na outra metade, modifiquei meu arquivo /etc/nixos/configuration.nix
para ficar assim:
boot.loader.grub.enable = true;
boot.loader.grub.version = 2;
boot.loader.grub.device = "nodev";
boot.initrd.luks.devices = [ { name = "cryptroot"; device = "/dev/sda2"; preLVM = true; } ];