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 / 766553
Accepted
Steve-no-Jobs
Steve-no-Jobs
Asked: 2024-01-10 11:23:55 +0800 CST2024-01-10 11:23:55 +0800 CST 2024-01-10 11:23:55 +0800 CST

como inicializar o QEMU a partir de um pendrive clonado

  • 772

Configuração:

  • MacOS arm64 M1 Apple Silicon como host
  • Live USB com Ubuntu 20.04 amd64 em um sistema de arquivos squashfs como convidado
  • Emulador QEMU no sistema operacional host

Quero retirar o sistema operacional do squashfs e inicializá-lo em uma máquina virtual AMD64 emulada no meu Mac. Consegui extrair o sistema operacional Ubuntu. Montei o squashfs e copiei o conteúdo em um arquivo img que criei usando dd. Copiei a imagem no mac mas quando tento inicializar a VM diz "Nenhum dispositivo inicializável".

Aqui estão os comandos que usei, de uma máquina virtual Linux compatível

mount -t squashfs -o loop /path/to/filesystem.squashfs /sqshfs/mount/point

Criei uma imagem vazia e fiz um ext4 fs

dd if=/dev/zeroes of=image.img bs=1M count=15000
mkfs.ext4 image.img

montei e copiei os arquivos

mount -t auto image.img /img/mount/point
cp -r /sqshfs/mount/point/* /img/mount/point

agora na imagem eu tenho essas pastas

total 112
drwxr-xr-x   2 root root  4096 Jan 10 02:37 bin
drwxr-xr-x   3 root root  4096 Jan 10 02:37 boot
drwxr-xr-x   4 root root  4096 Jan 10 02:37 dev
drwxr-xr-x 147 root root 12288 Jan 10 02:37 etc
drwxr-xr-x   3 root root  4096 Jan 10 02:37 home
lrwxrwxrwx   1 root root    33 Jan 10 02:37 initrd.img -> boot/initrd.img-5.4.0-150-generic
lrwxrwxrwx   1 root root    33 Jan 10 02:37 initrd.img.old -> boot/initrd.img-5.4.0-148-generic
drwxr-xr-x  23 root root  4096 Jan 10 02:37 lib
drwxr-xr-x   2 root root  4096 Jan 10 02:37 lib64
drwx------   2 root root 16384 Jan 10 02:36 lost+found
drwxr-xr-x   2 root root  4096 Jan 10 02:37 media
drwxr-xr-x   2 root root  4096 Jan 10 02:37 mnt
drwxr-xr-x   5 root root  4096 Jan 10 02:37 opt
drwxr-xr-x   2 root root  4096 Jan 10 02:37 proc
drwx------   3 root root  4096 Jan 10 02:37 root
drwxr-xr-x   2 root root  4096 Jan 10 02:37 run
drwxr-xr-x   2 root root 12288 Jan 10 02:37 sbin
drwxr-xr-x   2 root root  4096 Jan 10 02:37 snap
drwxr-xr-x   2 root root  4096 Jan 10 02:37 srv
drwxr-xr-x   2 root root  4096 Jan 10 02:37 sys
drwxr-xr-t   2 root root  4096 Jan 10 02:37 tmp
drwxr-xr-x  11 root root  4096 Jan 10 02:38 usr
drwxr-xr-x  15 root root  4096 Jan 10 02:38 var
lrwxrwxrwx   1 root root    30 Jan 10 02:38 vmlinuz -> boot/vmlinuz-5.4.0-150-generic
lrwxrwxrwx   1 root root    30 Jan 10 02:38 vmlinuz.old -> boot/vmlinuz-5.4.0-148-generic

converti o img em qcow2

qemu-img convert -f raw -O qcow2 -c image.img image.qcow2

e configurei o QEMU da seguinte maneira

qemu-system-x86_64 \
-name TEST \
-cpu qemu64-v1 \
-smp cpus=4,sockets=1,cores=4,threads=1 \
-machine pc-q35-7.2,vmport=off,i8042=off,hpet=off \
-accel tcg,thread=multi,tb-size=1024 \
-m 4096 \
-drive file=/Users/steve/VMs/image.qcow2 \
-boot menu=on

Quando tento inicializar a VM diz "Nenhum dispositivo inicializável". Sou muito novo no QEMU e sei que falta alguma coisa nesta configuração, mas deveria pelo menos tentar inicializar o kernel. GUIA?

virtual-machine
  • 1 1 respostas
  • 25 Views

1 respostas

  • Voted
  1. Best Answer
    telcoM
    2024-01-10T14:48:03+08:002024-01-10T14:48:03+08:00

    Você não disse ao QEMU para encontrar o kernel e o initramfs diretamente e especificou machine pc-q35-7.2.

    Olhando para o código-fonte , um dos padrões para esse tipo de sistema é firmware=bios-256k.bin, o que significa que o sistema executará SeaBIOS, tentará inicializar como um sistema x86 clássico baseado em BIOS e procurará um Master Boot Record.

    Como você copiou os arquivos de uma imagem do sistema de arquivos para outra, quaisquer blocos de inicialização (que estão incorporados diretamente na imagem e não fazem parte de nenhum arquivo ) não estão presentes. Além disso, sua image.qcow2imagem é de um único sistema de arquivos, equivalente a apenas executá- mkfs.ext4 /dev/sdalo sem particioná-lo primeiro. Portanto, não há tabela de partições nem registro mestre de inicialização (que está localizado fora de qualquer partição).

    Você poderia facilmente copiar os arquivos kernel e initramfs da imagem:

    mount -t auto image.img /img/mount/point
    cp /img/mount/point/boot/vmlinux-5.4.0-150-generic /Users/steve/VMs/
    cp /img/mount/point/boot/initrd.img-5.4.0-150-generic /Users/steve/VMs/
    

    e adicione as opções do QEMU -kernel /Users/steve/VMs/vmlinux-5.4.0-150-generic -initrd /Users/steve/VMs/initrd.img-5.4.0-150-genericpara fornecê-las diretamente ao QEMU para inicialização.

    Seu próximo obstáculo é que você precisaria especificar a localização do sistema de arquivos raiz para o kernel, uma vez que quaisquer UUIDs do sistema de arquivos raiz incorporados na imagem initramfs não estão mais corretos porque o sistema de arquivos não é mais o original. Portanto, você pode adicionar uma opção QEMU para especificar uma linha de comando do kernel como -append root=/dev/sda(imagem não particionada, lembra?) e esperar que o kernel não seja reduzido para suportar apenas squashfs para o tipo de sistema de arquivos raiz.

    Além disso, uma inicialização direta como essa pode não permitir que o kernel obtenha qualquer informação de configuração que normalmente receberia do BIOS, portanto, algumas coisas podem ser instáveis.

    Você pode achar que seria melhor configurar uma imagem de disco particionada adequada com um gerenciador de inicialização adequado incorporado no MBR, mas pelo menos a inicialização direta da imagem do kernel será fácil de tentar. E quem sabe? Pode funcionar!

    • 1

relate perguntas

  • Convidado do VirtualBox Win10 @ Linux host trava muito tempo na inicialização, como solucionar problemas?

  • Debian 9: Como configurar o Samba-Exchange entre QEMU-Host e QEMU-Guest (Windows)?

  • Como posso acionar manualmente o driver de balão virtio em um convidado?

  • Como você altera a porta KVM VNC em tempo de execução, na linha de comando?

  • Linux do zero dentro de um contêiner LXC

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