Inicializando a partir do LVM no dispositivo criptografado

2

Acabei de terminar uma instalação Debian e estou tentando inicializar. Eu criptografei meu disco rígido (LUKS) sem particionar e configurei o LVM nele. Eu não tenho um volume de inicialização separado, então o sistema irá inicializar a partir do volume lógico root . Eu substituí minha BIOS com o GRUB, mas não tenho uma configuração do GRUB gerada para o sistema, então preciso inicializar manualmente a partir do GRUB.

O código de shell do GRUB que achei correto é o seguinte:

cryptomount ahci0
set root=lvm/vg-root
linux /vmlinuz root=/dev/mapper/vg-root cryptdevice=/dev/sda
initrd /initrd.img

Esta é uma modificação da configuração dada aqui para uma criptografia diferente Configuração LVM.

O GRUB descriptografa a unidade bem, mas quando eu tento inicializar assim eu recebo o seguinte várias dúzias de vezes:

Begin: Running /scripts/local-block ...   WARNING: Failed to connect to lvmetad. Falling back to device scanning.
  Volume group "vg" not found
  Cannot process volume group vg
done.

Então eu recebo um shell initramfs. Eu suspeito que o kernel esteja procurando pelo volume lógico da raiz antes de descriptografar o disco, já que a mesma coisa acontece se eu usar por exemplo root=/dev/mapper/bogus-root . Existem parâmetros do kernel que me permitirão inicializar este sistema, ou eu tenho que mudar o initrd?

    
por Jakob 05.08.2018 / 19:56

1 resposta

0

Isso pode ser resolvido adicionando /etc/crypttab ao initramfs (veja a página de manual para crypttab para o formato de arquivo) usando update-initramfs do pacote Debian initramfs-tools .

Primeiro, monte o disco criptografado. Em seguida, ligue a montagem /dev , /proc , /sys e /run no host no sistema de arquivos raiz com, e. %código%. Então chroot no sistema de arquivos raiz. O arquivo crypttab agora pode ser criado (em qualquer local) ou copiado antes do chrooting.

Para incluir o crypttab no initramfs, crie um script de gancho em mount --bind /dev /mnt/dev que copie o arquivo no initramfs. Observe que /usr/share/initramfs-tools/hooks usa dois tipos de scripts: os scripts de inicialização são executados pelo initramfs initramfs-tools quando o sistema é inicializado, enquanto os scripts de gancho são executados durante a criação da imagem initramfs.

O script de gancho deve ser parecido com isto ( source ):

#!/bin/sh
. /usr/share/initramfs-tools/hook-functions
cp -pnL /path/to/crypttab ${DESTDIR}/etc/crypttab
chmod 644 ${DESTDIR}/etc/crypttab

init expande para a raiz do initramfs que está sendo criado quando o gancho é executado.

Em seguida, execute ${DESTDIR} com as opções apropriadas. Eu usei update-initramfs desde que o host e o destino usaram a mesma versão do kernel. Também usei -k $(uname -r) e -c para especificar onde a imagem é gravada.

Após instalar a nova imagem ou passar seu caminho para o GRUB, o early userspace deve descriptografar o disco e mapear os volumes lógicos contidos antes de tentar montar o volume raiz. O único parâmetro do kernel necessário é o caminho do volume raiz, por ex. -b .

    
por 17.08.2018 / 17:45