Copiando uma instalação não-EFI / GPT para uma instalação EFI / GPT

2

Comprei recentemente 2 SSDs (meu primeiro) e moverei meu sistema para lá. Estou usando o MD RAID 1 + LVM. Ainda não decidi se irei configurar uma nova instalação de extensão ou copiando minha instalação do jessie para os novos discos, se isso for possível.

Gostaria de fazer a nova instalação UEFI / GPT. Eu já fiz uma instalação de extensão de teste nos novos discos, mas estava pensando em copiar minha instalação jessie atual (os sistemas de arquivos / , /home e /boot ) para a nova instalação, mas sem tocar no sistema EFI partições. A questão é se isso vai funcionar. As instalações não-EFI / GPT e EFI / GPT são compatíveis?

Meu conhecimento superficial de como o GRUB2 funciona, é que a configuração "normal" do BIOS normalmente tem o primeiro estágio do GRUB no MBR, e o segundo estágio normalmente na partição /boot . Considerando que na configuração UEFI / GPT, é presumivelmente tudo no ESP.

    
por Faheem Mitha 19.06.2017 / 12:17

2 respostas

3

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

    
por 20.06.2017 / 21:03
2

As respostas do @derobert abrangem várias opções diferentes. Acabei usando algo nos moldes do seu não. 3, mas vou entrar em alguns detalhes sobre isso.

De acordo com a abordagem descrita em Mover um volume lógico de um grupo de volumes para outro , eu copiei alguns volumes lógicos contendo um sistema Debian 9 existente usando o BIOS para alguns novos discos que eu comprei. Eu também fiz uma nova instalação do Debian 9, do zero, do zero, nesses discos.

Em seguida, o problema era como fazer com que a cópia do meu sistema nesses discos fosse inicializada. Por acaso, eu pude usar o menu de inicialização do GRUB a partir da nova instalação do / from-scratch / UEFI. Quando eu acessei e na entrada do menu GRUB para a nova instalação, eu pude mudar os nomes dos dispositivos no script do GRUB para o dos LVs copiados, usando o formulário (lvm/debian-root) onde debian é o nome do volume group e root é o nome do volume lógico. Dessa forma, consegui inicializar a cópia do meu sistema existente.

No entanto, eu ainda precisava tornar o sistema inicializável. Com alguma ajuda do @debrobert, fiz o seguinte:

  1. Comutado de grub-pc para grub-efi
  2. Montou a partição do sistema EFI existente pertencente à nova instalação como /boot/efi .
  3. Ran

    grub-install --efi-directory=/boot/efi --bootloader-id=origdebian --force-extra-removable
    

    Isso fez duas coisas.

    • Instalou um executável EFI grubx64.efi no diretório %código%. A nova instalação já tinha um executável /boot/efi/EFI/origdebian no diretório grubx64.efi .

      O firmware EFI pôde ver uma entrada /boot/efi/EFI/debian no menu de inicialização do firmware.

    • Instalou um executável EFI origdebian no diretório %código%. Este é o chamado "caminho da mídia removível". Como descrito no Debian Wiki ,

All firmware implentations have to use this path to be able to run an OS installer.

Portanto, este caminho destina-se a funcionar como um fallback temporário. Depois que o sistema é inicializável, ele pode ser removido.

    
por 18.07.2017 / 13:12

Tags