As etapas originais estavam corretas, mas por algum motivo, continuei com um initrd corrompido. Resumido abaixo estão todas as etapas que devem resultar em um cenário de trabalho para qualquer pessoa interessada em fazer o mesmo:
- Crie uma máquina virtual conforme desejado.
- Instale o Linux usando o layout de partição desejado e faça todas as alterações desejadas. Nesse caso, ele consiste em uma partição de inicialização BTRFS e uma partição raiz BTRFS criptografada pelo LUKS. Outros layouts devem funcionar se forem tomados cuidados para atualizar adequadamente as referências durante a transferência.
- Inicialize a VM anterior usando um ISO do Linux para que você possa acessar o sistema instalado off-line.
- Anexe uma unidade flash USB à VM para a transferência. (Nota: Você pode criar uma imagem
dd
da unidade instalada e salvar fora da VM, que você pode usar em um sistema Linux normal.) - Prepare as partições da unidade flash.
- Opção:
dd
da imagem original na unidade flash e pule para a etapa 7 e para a etapa 10. (Nota: Parece que, no meu caso, foi necessário recriar as partições por um motivo desconhecido em queblkid
foi incapaz de enumerar o UUID da partição BTRFS de inicialização.) - Opção: crie novas partições usando os mesmos UUIDs que os originais. Assumindo
/dev/sda1
para inicialização e/dev/sda2
para raiz.- Para partição de inicialização do BTRFS:
sudo mkfs.btrfs -f -L BOOT -U <original UUID> /dev/sda1
- Para partição raiz do LUKS:
sudo cryptsetup --uuid=<original UUID> luksFormat /dev/sda2
- Partição raiz do mapa:
sudo cryptsetup --allow-discards open --type luks /dev/sda2 flash_luks
- Formatar raiz usando BTRFS:
sudo mkfs.btrfs -f -L ROOT -U <original UUID> /dev/mapper/flash_luks
- Para partição de inicialização do BTRFS:
- Opção: crie novas partições usando novos UUIDs. Repita os mesmos passos da Opção 2, mas remova os argumentos relacionados ao UUID / uuid. Anote os novos UUIDs usando
sudo blkid
.
- Opção:
- Montar partições de imagem originais.
- Crie dispositivos de retorno de leitura somente leitura para cada partição:
sudo kpartx -ar <flash dd image file>
. Assumindo que o kpartx se liga ao loop0. - Crie diretórios para pontos de montagem:
sudo mkdir -p /media/orig_boot /media/orig_root
- Inicialização:
sudo mount -r /dev/mapper/loop0p1 /media/orig_boot
- LUKS de raiz:
sudo cryptsetup -r open --type luks /dev/mapper/loop0p2 orig_luks
- Raiz:
sudo mount -r /dev/mapper/orig_luks /media/orig_root
- Crie dispositivos de retorno de leitura somente leitura para cada partição:
- Monte as partições da unidade flash. Assumindo
/dev/sda1
para inicialização.- Crie diretórios para pontos de montagem:
sudo mkdir -p /media/flash_boot /media/flash_root
- Inicialização:
sudo mount -t btrfs -o nodiratime,noatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_boot
- Root (supondo que já tenha sido mapeado usando cryptsetup anteriormente):
sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/mapper/flash_luks /media/flash_root
- Crie diretórios para pontos de montagem:
- Copiar conteúdo:
- Inicialização:
sudo rsync -aEXS --progress /media/orig_boot/ /media/flash_boot
- Raiz:
sudo rsync -aEXS --progress /media/orig_root/ /media/flash_root
- Inicialização:
- Desmontar imagem original.
- Raiz:
sudo umount /media/orig_root
- LUKS de raiz:
sudo cryptsetup close orig_luks
- Inicialização:
sudo umount /media/orig_boot
- kpartx:
sudo kpartx -d <flash dd image file>
- Raiz:
- Chroot na unidade flash.
- Vincular
/sys
:sudo mount --bind /sys /media/flash_root/sys
- Vincular
/dev
:sudo mount --bind /dev /media/flash_root/dev
- Vincular
/dev/pts
:sudo mount --bind /dev/pts /media/flash_root/dev/pts
- Vincular
/proc
:sudo mount --bind /proc /media/flash_root/proc
- Desmontar inicialização:
sudo umount /media/flash_boot
- Remontar dentro da raiz:
sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_root/boot
- Chroot:
sudo chroot /media/flash_root
- Vincular
- Atualize
/etc/fstab
.- Linha de inicialização:
UUID=<btrfs boot uuid> /boot btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 2
- Linha raiz:
UUID=<btrfs root uuid> / btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 1
- Linha de inicialização:
- Atualizar
/etc/crypttab
:flash_luks UUID=<luks root uuid> none discard,luks
- Instale
btrfs-tools
(se não estiver instalado):sudo apt-get install btrfs-tools
- Atualize o material de inicialização.
- Initrd (faz uso do fstab / crypttab para decidir o que é necessário antes de montar e solicitar a senha do LUKS na inicialização):
sudo update-initramfs -u -k all
(Nota: Você pode recriar todos os initrds usandosudo update-initramfs -c -k all
, mas não tente isso para ter certeza.) - Grub (faz uso do fstab para atualizar opções de inicialização do kernel e montar partições corretas):
sudo update-grub
- Instale o grub no MBR (assumindo
/dev/sda
):sudo grub-install --recheck /dev/sda
- Saia do chroot:
exit
- Initrd (faz uso do fstab / crypttab para decidir o que é necessário antes de montar e solicitar a senha do LUKS na inicialização):
- Desmontar tudo.
-
sudo umount /media/flash_root/boot
-
sudo umount /media/flash_root/proc
-
sudo umount /media/flash_root/dev/pts
-
sudo umount /media/flash_root/dev
-
sudo umount /media/flash_root/sys
-
sudo umount /media/flash_root
-
sudo cryptsetup close flash_luks
-