Copiar deve ser relativamente fácil; As instalações do Linux são (quase inteiramente) apenas arquivos. A maior exceção (somente?) É o bootloader para BIOS; ele é instalado no registro mestre de inicialização e nos setores entre ele e a primeira partição. A UEFI realmente se livra dessa exceção; o bootloader agora é apenas um arquivo.
A inicialização do BIOS funciona (em resumo) que o BIOS lê o primeiro setor do disco (MBR) e executa o código desse setor. Esse código tem funções BIOS para ler setores disponíveis para ele e, no caso do grub, lê o resto de si mesmo dos setores restantes entre o MBR e a primeira partição. Isso precisa fornecer código suficiente para permitir que o GRUB entenda os sistemas de arquivos, para que ele possa ler a configuração e o resto de si mesmo do / boot. Ele faz isso, então também lê o kernel e initramfs de lá. Então ele aciona o kernel.
O boot de UEFI funciona (em resumo) que o firmware entende partições (pelo menos GPT e provavelmente DOS também) e sistemas de arquivos (pelo menos FAT). Ele tem algum tipo de NVRAM (as variáveis EFI) que armazena um comando para executar - pense no comando shell (o UEFI inclui um shell). Isto é, caminho (disco, partição, caminho no sistema de arquivos) e argumentos. Ele executa esse comando. No caso do Linux, isso seria um dos seguintes:
- um gerenciador de inicialização como o GRUB (no Debian, provavelmente em
EFI/debian/grubx64.efi
) ou vários outros (refind, systemd-boot, etc.) - um kernel Linux (suportado no Debian desde Wheezy )
- um shim assinado pela Microsoft para inicialização segura, que carrega um dos itens acima.
O comando tem acesso total à pilha UEFI, que inclui a leitura de arquivos, rede, etc. No caso do GRUB, ele inclui seu próprio suporte de sistema de arquivos que é usado para coisas como ext4, mdraid, LVM, etc. p>
Em última análise, a partir da instalação do Linux, isso significa que a diferença é: em vez de o GRUB ser instalado em alguns setores especiais no início do disco, é um arquivo em /boot/efi/
. Note que esta é uma compilação diferente do GRUB; sob o Debian é o grub-efi-amd64 (ou -ia32) ao invés do grub-pc. Você precisará trocar o pacote do grub que você instalou.
A única coisa que eu espero que você possa encontrar é que manipular as variáveis EFI normalmente requer que você já seja inicializado via UEFI. Por isso, pode ser difícil conseguir que o grub-install funcione. Algumas soluções alternativas:
-
Depois de copiar o sistema e alterar o pacote do grub, inicialize em um disco de recuperação ativado por UEFI (como o instalador Stretch, em execução no modo de recuperação) e execute grub-install ou efibootmgr.
-
Se o seu sistema tiver um menu de seleção de inicialização, ele poderá encontrar a instalação do Debian mesmo sem ser configurado como uma opção de inicialização através das variáveis EFI.
-
Copie o grub para
/boot/efi/EFI/debian/grubx64.efi
para/boot/efi/EFI/BOOT/bootx64.efi
- esse é o caminho oficial de fallback do UEFI (pelo menos para máquinas de 64 bits). Isso pode ser suficiente para que ele apareça no menu de inicialização do firmware. -
Se o seu sistema disponibilizá-lo, use o shell UEFI para inicializar o sistema. Então você pode atualizar as variáveis EFI com o grub-install ou o efibootmgr.
Depois de ter feito isso, não deve haver nada diferente entre o sistema copiado / convertido e o que foi instalado com o UEFI originalmente.