Ok, eu percebi e consegui trabalhar. Passei algum tempo estudando os scripts initremfs cryptsetup em /usr/share/initramfs-tools/hooks
. Este diretório contém scripts que são executados sempre que update-initramfs é executado. Em particular, se cryptsetup estiver instalado, haverá um script cryptroot
neste diretório, que é o que estudei para encontrar pistas sobre como os discos são descriptografados na inicialização.
Quando o initramfs é carregado na inicialização, há um script que descriptografa as partições do disco rígido listadas em um arquivo chamado conf / conf.d / cryptroot. Este arquivo fica dentro do arquivo initramfs, que você pode explorar descompactando o arquivo com os seguintes comandos:
$ sudo cp /boot/initrd.img-4.4.0-93-generic ~
$ cd
$ # use sudo chown to change the ownership of the initramfs file to the current user
$ mv initrd.img-4.4.0-93-generic initrd.img-4.4.0-93-generic.gz
$ gunzip initrd.img-4.4.0-93-generic.gz
$ mkdir -p tmp && cd tmp
$ cpio -i < ../initrd.img-4.4.0-93-generic
Normalmente, conf/conf.d/cryptroot
listará apenas a partição que contém seu sistema de arquivos raiz para descriptografia. Se o seu sistema de arquivos raiz abranger várias partições criptografadas, como um sistema de arquivos btrfs ou um sistema de arquivos instalado em um volume lógico LVM, você não conseguirá montar corretamente o sistema de arquivos na inicialização porque apenas uma de suas partições criptografadas será descriptografada. O que precisamos é que all as partições de apoio sejam decifradas antes da montagem. As partições criptografadas que são listadas em conf/conf.d/cryptroot
são determinadas quando você cria o arquivo initramfs.
Quando você cria a imagem initramfs, o script cryptroot
varre quais partições contêm seu sistema de arquivos raiz. Para sistemas de arquivos btrfs, o cryptroot executará comandos btrfs para consultar as partições que suportam seu sistema de arquivos. No entanto, nem todas as partições retornadas da consulta serão adicionadas a conf / conf.d / cryptroot. Apenas as partições consultadas que também estão listadas em / etc / crypttab serão adicionadas a conf / conf.d / cryptroot. Minha solução foi adicionar uma entrada para a segunda partição criptografada que estava fazendo backup do meu sistema de arquivos raiz / etc / crypttab.
Meu arquivo / etc / crypttab resultante se parece com o seguinte:
sda3_crypt UUID=<my UUID for /dev/sda3> none luks,discard
sdb1_crypt UUID=<my UUID for /dev/sdb1> none luks
Em seguida, você deseja executar update-initramfs
para gerar o novo initramfs, que conterá uma entrada para sda3_crypt e sdb1_crypt em conf / conf.d / cryptroot. Isso fará com que o script de descriptografia solicite sua senha duas vezes na inicialização: uma vez para sda3_crypt e outra para sdb1_crypt.
TL; DR: Assegure-se de que todas as suas partições que suportam seu sistema de arquivos raiz contenham uma entrada em /etc/crypttab
. Execute update-initramfs
após atualizar /etc/crypttab
.
Nota: Sempre que o update-grub
é executado para sistemas de arquivos btrfs abrangendo vários dispositivos, ele não gera a linha de comando do kernel corretamente. Há uma solução rápida no link