AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 787873
Accepted
Le Nain Jaune
Le Nain Jaune
Asked: 2024-12-10 01:52:36 +0800 CST2024-12-10 01:52:36 +0800 CST 2024-12-10 01:52:36 +0800 CST

Como inicializar uma partição desejada de um disco UEFI com o Qemu?

  • 772

Clonei um disco formatado em GPT que contém um dual boot (Windows + Linux Debian) que funciona perfeitamente bem na máquina real.

Tentei criar uma VM com o Qemu que usa o disco clonado para inicializar na partição Debian, mas o melhor que consegui fazer foi inicializar o Windows.

Aqui está o comando que usei:

virt-install \
    --name "vm-test_dual_boot" \
    --boot loader=/usr/share/OVMF/OVMF_CODE.fd \
    --vcpus 2 --memory 8192 --osinfo debian11 \
    --network bridge=br0 \
    --graphics=vnc \
    --disk path=/home/user/vm/clone.qcow2 \
    --import -v

Não consigo fazer a mesma coisa que a máquina UEFI real que associa um HD(1,GPT,unique_identifier)sistema de arquivos ao \EFI\debian\shimx64.efiarquivo.

Você poderia me ajudar a inicializar o Debian?


Graças ao @telcoM alterei o comando em:

boot_config=\
"loader=/usr/share/OVMF/OVMF_CODE_4M.fd,"\
"loader.readonly=yes,"\
"loader.type=pflash,"\
"nvram.template=/usr/share/OVMF/OVMF_VARS_4M.ms.fd,"\
"nvram=/home/user/vm/clone_nvram.fd" ;

virt-install \
    --name "vm-test_dual_boot" \
    --boot $boot_config \
    --vcpus 2 --memory 8192 --osinfo win10 \
    --network bridge=br0 \
    --graphics=vnc \
    --disk path=/home/user/vm/clone.qcow2 \
    --import -v

Notas:

  • do diretório /usr/share/OVMF loaderdeve corresponder ao nvram.templateentão OVMF_CODE_4M.fdpara OVMF_VARS_4M.ms.fd, então no meu caso isso disparou este erro: "O convidado não inicializou o display (ainda)".

  • o usuário definido em /etc/libvirt/qemu.conf(padrão : libvirt-qemu), deve ter direitos de leitura e execução no nvramarquivo, caso contrário isso acionará um erro de permissão.

  • no meu caso --osinfo win10é obrigatório, pois a inicialização EFI vHD padrão é o Windows (antes eu tentava, debian11mas terminava em BSOD ).

  • para a --networkparte assume-se que temos um br0dispositivo de ponte (veja aqui para ponte temporária com Network Managerou aqui com iproutee aqui para ponte permanente com ifup).

Depois de criada, configure a VM EFI para inicializar a partição correta (veja a resposta detalhada de @telcoM para fazer isso temporariamente ou permanentemente).

dual-boot
  • 1 1 respostas
  • 75 Views

1 respostas

  • Voted
  1. Best Answer
    telcoM
    2024-12-10T02:54:24+08:002024-12-10T02:54:24+08:00

    Você não definiu um armazenamento NVRAM para variáveis ​​de boot, então não há lugar para armazenar persistentemente as variáveis ​​de boot UEFI. Como resultado, o sistema sempre retornará para a inicialização de \EFI\boot\bootx64.efi... e, por padrão, o Windows coloca seu bootloader de backup lá.

    Você precisará fazer algo como:

    virt-install \
        --name "vm-test_dual_boot" \
        --boot loader=/usr/share/OVMF/OVMF_CODE.fd,loader.readonly=yes,loader.type=pflash,nvram.template=/usr/share/OVMF/OVMF_VARS_4M.ms.fd,nvram=/home/user/vm/clone_nvram.fd \
        --vcpus 2 --memory 8192 --osinfo debian11 \
        --network bridge=br0 --graphics=vnc \
        --disk path=/home/user/vm/clone.qcow2 \
        --import -v
    

    Isso reservará um espaço para as configurações de inicialização UEFI na forma de um pequeno arquivo localizado em /home/user/vm/clone_nvram.fd. Este arquivo representará o armazenamento NVRAM persistente na placa-mãe virtual.

    A VM de inicialização dupla ainda inicializará no Windows na primeira vez, porque o caminho do bootloader de fallback ainda mantém o bootloader do Windows (e a "autocorreção" do Windows moderno provavelmente o manterá assim).

    O próximo passo é entrar no menu de configurações de inicialização do firmware UEFI da VM. Se você for realmente rápido, pode conseguir chegar lá pressionando F2enquanto a VM estiver inicializando, mas uma maneira mais fácil é dizer ao Windows para reinicializar e ir lá na próxima inicialização (da Microsoft ):

    na tela de login ou no menu Iniciar, selecione Energia (ícone do botão de energia) > segure Shift enquanto seleciona Reiniciar. Selecione Solucionar problemas > Opções avançadas > Configurações do firmware UEFI.

    Uma vez lá, você pode ir para Boot Maintenance Managero submenu, selecionar Boot from File, selecionar seu disco virtual, então selecionar a <EFI>pasta, então a <debian>subpasta e então o shimx64.efiarquivo. Isso permitirá que você inicialize o GRUB, e assim o Debian, na VM.

    Para criar uma entrada de inicialização persistente para o GRUB, use grub-install --target=x86_64-efi /dev/sda(supondo que seu disco do sistema seja /dev/sda; se seu disco do sistema for /dev/vda, ajuste adequadamente) para reinstalar o carregador de inicialização GRUB e reescrever a variável de inicialização UEFI para ele.

    (Você também pode fazer isso usando o efibootmgrcomando, mas usar grub-installprovavelmente é mais fácil.)

    Ao clonar um sistema Linux não dualboot, você pode evitar complicações como essa com sistemas UEFI (virtuais ou não) fazendo um

    grub-install --force-extra-removable
    

    no sistema original antes de cloná-lo. Isso colocará uma segunda cópia de shimx64.efipara /boot/efi/EFI/boot/bootx64.efi, o que efetivamente tornará o disco (e seus clones futuros) UEFI-bootáveis ​​mesmo se as configurações de NVRAM forem perdidas... ou deixadas para trás no chip UEFI NVRAM do sistema original ao clonar sistemas ou convertê-los em VMs.

    • 2

relate perguntas

  • Debian dualboot (WIN10) - não é possível instalar o gerenciador de inicialização GRUB [fechado]

  • É possível instalar o Linux Mint em um PC que já possui o Windows 10 com duas partições de disco?

  • Não é possível acessar a partição do disco rígido criada no Windows em um sistema de inicialização dupla

  • Como determinar quando um sistema Linux sem execução foi inicializado pela última vez?

  • Como instalar o rEFInd para multiboot USB DIY

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve