Capítulo 21. Virtualização

Esta tradução pode estar desatualizada. Para ajudar com as traduções, acesse a ferramenta de traduções do FreeBSD.

21.1. Sinopse

O software de virtualização permite que vários sistemas operacionais sejam executados simultaneamente no mesmo computador. Tais sistemas de software para PCs geralmente envolvem um sistema operacional host que executa o software de virtualização e suporta qualquer número de sistemas operacionais convidados.

Depois de ler este capítulo, você saberá:

  • A diferença entre um sistema operacional host e um sistema operacional convidado.

  • Como instalar o FreeBSD em um computador baseado em um Intel™Apple™Mac™.

  • Como instalar o FreeBSD no Microsoft™Windows™ com Virtual PC.

  • Como instalar o FreeBSD como um host convidado no bhyve.

  • Como ajustar um sistema FreeBSD para melhor desempenho sob virtualização.

Antes de ler este capítulo, você deve:

21.2. FreeBSD como Sistema Operacional Convidado no Parallels para Mac OS™ X

O Parallels Desktop para Mac™ é um produto de software comercial disponível para computadores baseados em Intel™Apple™Mac™ rodando Mac OS™ 10.4.6 ou superior. O FreeBSD é um sistema operacional convidado completamente suportado. Uma vez que o Parallels tiver sido instalado no Mac OS™ X, o usuário deve configurar uma maquina virtual e então instalar o sistema operacional convidado desejado.

21.2.1. Instalando o FreeBSD no Parallels/Mac OS™ X

O primeiro passo para instalar o FreeBSD no Parallels é criar uma nova máquina virtual para instalar o FreeBSD. Selecione FreeBSD como o Guest OS Type quando solicitado:

parallels freebsd1

Escolha uma quantidade razoável de disco e memória, dependendo dos planos para esta instância virtual do FreeBSD. 4GB de espaço em disco e 512MB de RAM funcionam bem para a maioria dos usos do FreeBSD executando sob o Parallels:

parallels freebsd2
parallels freebsd3
parallels freebsd4
parallels freebsd5

Selecione o tipo de rede e uma interface de rede:

parallels freebsd6
parallels freebsd7

Salve e finalize a configuração:

parallels freebsd8
parallels freebsd9

Após a criação da máquina virtual do FreeBSD, o FreeBSD pode ser instalado nela. Isto é feito melhor com um CD/DVD oficial do FreeBSD ou com uma imagem ISO baixada de um site FTP oficial. Copie a imagem ISO apropriada para o sistema de arquivos local do Mac™ ou insira um CD/DVD na unidade de CD-ROM do Mac™. Clique no ícone do disco no canto inferior direito da janela do FreeBSD no Parallels. Isso abrirá uma janela a qual pode ser usada para associar a unidade de CD-ROM na máquina virtual com o arquivo ISO no disco ou com drive CD.

parallels freebsd11

Uma vez que esta associação com a fonte do CD-ROM estiver feita, reinicialize a máquina virtual do FreeBSD clicando no ícone de reinicialização. O Parallels irá reiniciar com um BIOS especial o qual primeiro irá verificar se existe um CD-ROM.

parallels freebsd10

Neste caso, ele encontrará a mídia de instalação do FreeBSD e iniciará uma instalação normal do FreeBSD. Execute a instalação, mas não tente configurar o Xorg neste momento.

parallels freebsd12

Quando a instalação estiver concluída, reinicie a máquina virtual FreeBSD recém-instalada.

parallels freebsd13

21.2.2. Configurando o FreeBSD no Parallels

Depois que o FreeBSD foi instalado com sucesso no Mac OS™ X com o Parallels , existem várias etapas de configuração que podem ser executadas para otimizar o sistema para operar virtualizado.

  1. Definir variáveis do Boot Loader

    O passo mais importante é reduzir o kern.hz ajustável para reduzir a utilização de CPU no FreeBSD sob ambiente Parallels. Isso é feito adicionando a seguinte linha ao /boot/loader.conf:

    kern.hz=100

    Sem essa configuração, um sistema convidado inativo do FreeBSD no Parallels usará aproximadamente 15% da CPU de um único processador iMac™. Após essa alteração, o uso ficará mais próximo de 5%.

  2. Criar um novo arquivo de configuração do kernel

    Todos os drivers de dispositivos SCSI, FireWire e USB podem ser removidos de um arquivo de configuração de kernel personalizado. O Parallels fornece um adaptador de rede virtual usado pelo driver ed(4), portanto, todos os dispositivos de rede, exceto o ed(4) e o miibus(4) podem ser removidos do kernel .

  3. Configure a rede

    A configuração de rede mais básica usa o DHCP para conectar a máquina virtual à mesma rede local que o host Mac™. Isso pode ser feito adicionando ifconfig_ed0="DHCP" ao /etc/rc.conf. Configurações de rede mais avançadas são descritas em Rede Avançada.

21.3. FreeBSD como sistema convidado no Virtual PC para Windows™

O Virtual PC para Windows™ é um software da Microsoft™ disponível para download gratuito. Consulte este site para os requisitos do sistema. Depois que o Virtual PC tiver sido instalado no Microsoft™Windows™, o usuário poderá configurar uma máquina virtual e depois instalar o sistema operacional convidado desejado.

21.3.1. Instalando o FreeBSD no Virtual PC

O primeiro passo para instalar o FreeBSD no Virtual PC é criar uma nova máquina virtual para instalar o FreeBSD. Selecione Criar uma máquina virtual quando solicitado:

virtualpc freebsd1
virtualpc freebsd2

Selecione a opção Outro para o Sistema operacional quando solicitado:

virtualpc freebsd3

Em seguida, escolha uma quantidade razoável de disco e de memória, dependendo dos planos para esta instância virtual do FreeBSD. 4GB de espaço em disco e 512MB de RAM funcionam bem para a maioria dos usos do FreeBSD sob o Virtual PC:

virtualpc freebsd4
virtualpc freebsd5

Salve e finalize a configuração:

virtualpc freebsd6

Selecione a máquina virtual do FreeBSD e clique em Configurações, em seguida, defina o tipo de rede e uma interface de rede:

virtualpc freebsd7
virtualpc freebsd8

Após a criação da máquina virtual do FreeBSD, o FreeBSD pode ser instalado nela. Isso é feito da melhor maneira com um CD/DVD oficial ou com uma imagem ISO baixada de um site FTP oficial. Copie a imagem ISO apropriada para o sistema de arquivos local do Windows™ ou insira um CD/DVD na unidade de CD-ROM, então clique duas vezes na máquina virtual FreeBSD para inicializar. Em seguida, clique em CD e escolha Capturar imagem ISO…​ na janela do Virtual PC. Isso abrirá uma janela na qual a unidade de CD-ROM na máquina virtual poderá ser associada a um arquivo ISO no disco ou com o drive de CD-ROM real.

virtualpc freebsd9
virtualpc freebsd10

Uma vez que a associação com a fonte do CD-ROM estiver feita, reinicie a máquina virtual do FreeBSD clicando em Action e depois em Reset. O Virtual PC será reiniciado com um BIOS especial que irá procurar por um CD-ROM para inicializar.

virtualpc freebsd11

Neste caso, ele encontrará a mídia de instalação do FreeBSD e iniciará uma instalação normal do FreeBSD. Continue com a instalação, mas não tente configurar o Xorg neste momento.

virtualpc freebsd12

Quando a instalação estiver concluída, lembre-se de ejetar o CD/DVD ou de liberar a imagem ISO. Finalmente, reinicie a máquina virtual FreeBSD recém-instalada.

virtualpc freebsd13

21.3.2. Configuring FreeBSD on Virtual PC

Depois que o FreeBSD tiver sido instalado com sucesso no Microsoft™Windows™ com o Virtual PC, existem várias etapas de configurações que podem ser executadas para otimizar o sistema para operação virtualizada.

  1. Definir variáveis do Boot Loader

    O passo mais importante é reduzir o valor do parâmetro kern.hz para reduzir a utilização da CPU do FreeBSD sob o ambiente do Virtual PC. Isso é feito adicionando a seguinte linha ao /boot/loader.conf:

    kern.hz=100

    Sem esta configuração, uma VM idle do FreeBSD rodando sob o Virtual PC utilizará aproximadamente 40% da CPU de um computador com um único processador. Após essa mudança, o uso ficará mais próximo de 3%.

  2. Criar um novo arquivo de configuração do kernel

    Todos os drivers de dispositivos SCSI, FireWire e USB podem ser removidos do arquivo de configuração do kernel personalizado. O Virtual PC fornece um adaptador de rede virtual usado pelo driver de(4), portanto, todos os dispositivos de rede, exceto o de(4) e o miibus(4) podem ser removidos do kernel.

  3. Configure a rede

    A configuração de rede mais básica usa o DHCP para conectar a máquina virtual à mesma rede local que o host Microsoft™Windows™. Isso pode ser feito adicionando ifconfig_de0="DHCP" ao /etc/rc.conf. Configurações de rede mais avançadas são descritas em Rede Avançada.

21.4. FreeBSD como Sistema Operacional Convidado no VMware Fusion para Mac OS™

O VMware Fusion para Mac™ é um software comercial disponível para computadores Apple™Mac™ baseados em processadores Intel™ e que rodam o Mac OS™ 10.4.9 ou superior. O FreeBSD é um sistema operacional convidado totalmente suportado. Depois que o VMware Fusion for instalado no Mac OS™ X, o usuário poderá configurar uma máquina virtual e, em seguida, instalar o sistema operacional convidado desejado.

21.4.1. Instalando o FreeBSD no VMware Fusion

A primeira etapa é iniciar o VMware Fusion, que irá carregar a biblioteca de máquinas virtuais. Clique em Novo para criar a máquina virtual:

vmware freebsd01

Isto irá carregar o Assistente de Nova Máquina Virtual. Clique em Continuar para prosseguir:

vmware freebsd02

Selecione Outro como o Sistema Operacional e FreeBSD ou FreeBSD 64-bit, como Versão quando solicitado:

vmware freebsd03

Escolha o nome da máquina virtual e o diretório onde ela deve ser salva:

vmware freebsd04

Escolha o tamanho do disco rígido virtual para a máquina virtual:

vmware freebsd05

Escolha o método para instalar a máquina virtual, a partir de uma imagem ISO ou de um CD/DVD:

vmware freebsd06

Clique em Concluir e a máquina virtual inicializará:

vmware freebsd07

Instale o FreeBSD como de costume:

vmware freebsd08

Quando a instalação estiver concluída, as configurações da máquina virtual poderão ser modificadas, como o uso de memória:

As configurações de hardware do sistema da máquina virtual não podem ser modificadas enquanto a máquina virtual estiver em execução.

vmware freebsd09

O número de CPUs a que a máquina virtual terá acesso:

vmware freebsd10

O status do dispositivo CD-ROM. Normalmente, o CD/DVD/ISO é desconectado da máquina virtual quando não é mais necessário.

vmware freebsd11

A última coisa a mudar é como a máquina virtual se conectará à rede. Para permitir conexões à máquina virtual de outras máquinas além do host, escolha Conectar diretamente à rede física (Bridged). Caso contrário, Compartilhar a conexão de internet do host (NAT) é preferível para que a máquina virtual possa ter acesso à Internet, porém sem que as demais maquinas da rede possam acessá-la.

vmware freebsd12

Depois de modificar as configurações, inicialize a máquina virtual FreeBSD recém-instalada.

21.4.2. Configurando o FreeBSD no VMware Fusion

Depois que o FreeBSD for instalado com sucesso no Mac OS™ X rodando o VMware Fusion, existem várias etapas de configuração que podem ser executadas para otimizar o sistema para operar virtualizado.

  1. Definir variáveis do Boot Loader

    O passo mais importante é reduzir o valor do parâmetro kern.hz para reduzir a utilização da CPU do FreeBSD sob o ambiente do VMware Fusion. Isso é feito adicionando a seguinte linha ao /boot/loader.conf:

    kern.hz=100

    Sem esta configuração, uma VM idle do FreeBSD rodando sob o VMware Fusion usará aproximadamente 15% da CPU de um único processador iMac™. Após esta mudança, o uso ficará próximo de 5%.

  2. Criar um novo arquivo de configuração do kernel

    Todos os drivers de dispositivos FireWire e USB podem ser removidos do arquivo de configuração do kernel personalizado. O VMware Fusion fornece um adaptador de rede virtual usado pelo driver em(4), portanto, todos os dispositivos de rede, exceto o em(4) podem ser removidos do kernel.

  3. Configure a rede

    A configuração de rede mais básica usa o DHCP para conectar a máquina virtual à mesma rede local que o host Mac™. Isso pode ser feito adicionando ifconfig_em0="DHCP" ao /etc/rc.conf. Configurações de rede mais avançadas estão descritas em Rede Avançada.

21.5. FreeBSD como Sistema Operacional Convidado no VirtualBox™

O FreeBSD funciona bem como um sistema operacional convidado no VirtualBox™. O software de virtualização está disponível para a maioria dos sistemas operacionais comuns, incluindo o próprio FreeBSD.

Os complementos de sistema operacional convidado do VirtualBox™ fornecem suporte para:

  • Compartilhamento de área de transferência.

  • Integração do ponteiro do mouse.

  • Sincronização de hora com o host.

  • Redimensionamento de janela.

  • Modo Seamless.

Estes comandos são executados na instancia virtualizada do FreeBSD.

Primeiro, instale o pacote ou o port emulators/virtualbox-ose-additions na instancia virtualizada do FreeBSD. Isso irá instalar o port:

# cd /usr/ports/emulators/virtualbox-ose-additions && make install clean

Adicione estas linhas ao /etc/rc.conf:

vboxguest_enable="YES"
vboxservice_enable="YES"

Se o ntpd(8) ou o ntpdate(8) estiver sendo utilizado, desabilite a sincronização de horário com o host:

vboxservice_flags="--disable-timesync"

O Xorg reconhecerá automaticamente o driver vboxvideo. Ele também pode ser inserido manualmente no /etc/X11/xorg.conf:

Section "Device"
	Identifier "Card0"
	Driver "vboxvideo"
	VendorName "InnoTek Systemberatung GmbH"
	BoardName "VirtualBox Graphics Adapter"
EndSection

Para usar o driver vboxmouse, ajuste a seção do mouse no /etc/X11/xorg.conf:

Section "InputDevice"
	Identifier "Mouse0"
	Driver "vboxmouse"
EndSection

Usuários do HAL devem criar o arquivo /usr/local/etc/hal/fdi/policy/90-vboxguest.fdi com o conteúdo abaixo ou copiá-lo de /usr/local/shared/hal/fdi/policy/10osvendor/90-vboxguest.fdi:

<?xml version="1.0" encoding="utf-8"?>
<!--
# Sun VirtualBox
# Hal driver description for the vboxmouse driver
# $Id: chapter.xml,v 1.33 2012-03-17 04:53:52 eadler Exp $

	Copyright (C) 2008-2009 Sun Microsystems, Inc.

	This file is part of VirtualBox Open Source Edition (OSE, as
	available from http://www.virtualbox.org. This file is free software;
	you can redistribute it and/or modify it under the terms of the GNU
	General Public License (GPL) as published by the Free Software
	Foundation, in version 2 as it comes in the "COPYING" file of the
	VirtualBox OSE distribution. VirtualBox OSE is distributed in the
	hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.

	Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
	Clara, CA 95054 USA or visit http://www.sun.com if you need
	additional information or have any questions.
-->
<deviceinfo version="0.2">
  <device>
    <match key="info.subsystem" string="pci">
      <match key="info.product" string="VirtualBox guest Service">
        <append key="info.capabilities" type="strlist">input</append>
	<append key="info.capabilities" type="strlist">input.mouse</append>
        <merge key="input.x11_driver" type="string">vboxmouse</merge>
	<merge key="input.device" type="string">/dev/vboxguest</merge>
      </match>
    </match>
  </device>
</deviceinfo>

Pastas compartilhadas para transferências de arquivos entre o host e a VM são acessíveis montando-as usando mount_vboxvfs. Uma pasta compartilhada pode ser criada no host usando a GUI do VirtualBox ou via vboxmanage. Por exemplo, para criar uma pasta compartilhada chamada myshare em /mnt/bsdboxshare para a VM denominada BSDBox, execute :

# vboxmanage sharedfolder add 'BSDBox' --name myshare --hostpath /mnt/bsdboxshare

Observe que o nome da pasta compartilhada não deve conter espaços. Monte a pasta compartilhada de dentro do sistema convidado desta forma:

# mount_vboxvfs -w myshare /mnt

21.6. FreeBSD como Host com VirtualBox™

O VirtualBox™ é um pacote de virtualização completo e ativamente desenvolvido, disponível para a maioria dos sistemas operacionais, incluindo Windows™, Mac OS™, Linux™ e FreeBSD. Ele é igualmente capaz de executar sistemas operacionais convidados como o Windows™ ou UNIX™-like. Ele é distribuído como um software de código aberto, mas com componentes de código fechado disponíveis em um pacote de extensão separado. Esses componentes incluem suporte para dispositivos USB 2.0. Maiores informações podem ser encontradas na página wiki sobre Downloads do VirtualBox. Atualmente, essas extensões não estão disponíveis para o FreeBSD.

21.6.1. Instalando o VirtualBox™

O VirtualBox™ está disponível como um pacote ou port do FreeBSD em emulators/virtualbox-ose. O port pode ser instalado usando estes comandos:

# cd /usr/ports/emulators/virtualbox-ose
# make install clean

Uma opção útil no menu de configuração do port é o conjunto de programas GuestAdditions. Eles fornecem vários recursos úteis em sistemas operacionais convidados, como integração de ponteiro de mouse (permitindo que o mouse seja compartilhado entre host e o sistema convidado sem a necessidade de pressionar um atalho de teclado especial para alternar) e renderização de vídeo mais rápida, especialmente em sistemas convidados Windows™. Os complementos para os sistemas convidados estão disponíveis no menu Dispositivos, após a conclusão da instalação do sistema convidado.

Algumas alterações de configuração são necessárias antes do VirtualBox™ ser iniciado pela primeira vez. O port instala um módulo de kernel em /boot/modules o qual deve ser carregado no kernel em execução:

# kldload vboxdrv

Para garantir que o módulo seja sempre carregado após uma reinicialização, adicione esta linha ao /boot/loader.conf:

vboxdrv_load="YES"

Para usar os módulos do kernel que permitem conexões de rede bridged ou host-only, adicione esta linha ao /etc/rc.conf e reinicie o computador:

vboxnet_enable="YES"

O grupo vboxusers é criado durante a instalação do VirtualBox™. Todos os usuários que precisam acessar o VirtualBox™ deverão ser adicionados como membros desse grupo. O comando pw pode ser usado para adicionar novos membros:

# pw groupmod vboxusers -m yourusername

As permissões padrão para o /dev/vboxnetctl são restritivas e precisam ser alteradas para redes em modo Bridged:

# chown root:vboxusers /dev/vboxnetctl
# chmod 0660 /dev/vboxnetctl

Para tornar esta permissão permanente, adicione estas linhas ao /etc/devfs.conf:

own     vboxnetctl root:vboxusers
perm    vboxnetctl 0660

Para iniciar o VirtualBox™, digite a partir de uma sessão Xorg:

% VirtualBox

Para mais informações sobre como configurar e usar o VirtualBox™, consulte o site oficial. Para obter informações específicas sobre o FreeBSD e instruções para a solução de problemas, consulte a página relevante no wiki do FreeBSD.

21.6.2. Suporte USB no VirtualBox™

O VirtualBox™ pode ser configurado para passar dispositivos USB para o sistema operacional convidado. O controlador host da versão do OSE está limitado a emular dispositivos USB 1.1 até que o pacote de extensão que suporta dispositivos USB 2.0 e 3.0 esteja disponível no FreeBSD.

Para que o VirtualBox™ esteja ciente dos dispositivos USB conectados à máquina, o usuário precisa ser um membro do grupo operator.

# pw groupmod operator -m yourusername

Em seguida, adicione as seguintes linhas em /etc/devfs.rules ou crie o arquivo se ele ainda não existir:

[system=10]
add path 'usb/*' mode 0660 group operator

Em seguida, adicione as seguintes linhas ao /etc/rc.conf:

devfs_system_ruleset="system"

Então reinicie o devfs:

# service devfs restart

Reinicie a sessão de login e o VirtualBox™ para que essas alterações entrem em vigor e crie os filtros USB conforme necessário.

21.6.3. Acesso ao drive de DVD/CD no Host VirtualBox™

O acesso às unidades de DVD/CD do Host a partir dos convidados é obtido através do compartilhamento das unidades físicas. Dentro do VirtualBox™, isso é configurado a partir da janela Armazenamento nas Configurações da máquina virtual. Se necessário, crie primeiro um dispositivo vazio IDECD/DVD. Em seguida, escolha a unidade do host no menu pop-up para a seleção de unidade virtual de CD/DVD. Uma caixa de seleção rotulada como Passthrough será exibida. Isso permitirá que a máquina virtual use o hardware diretamente. Por exemplo, CDs de áudio ou o gravador só funcionará se esta opção estiver selecionada.

O HAL precisa ser executado para que as funções de DVD/CD do VirtualBox™ funcionem, então habilite-o no /etc/rc.conf e inicie-o se ele ainda não estiver em execução:

hald_enable="YES"
# service hald start

Para que os usuários possam usar as funções de DVD/CD do VirtualBox™, eles precisam acessar /dev/xpt0, /dev/cdN, e /dev/passN. Isso geralmente é obtido tornando o usuário um membro do grupo operator. As permissões para esses dispositivos devem ser corrigidas adicionando estas linhas ao /etc/devfs.conf:

perm cd* 0660
perm xpt0 0660
perm pass* 0660
# service devfs restart

21.7. FreeBSD como um Host bhyve

O hypervisor bhyveBSD-licensed tornou-se parte do sistema base com o FreeBSD 10.0-RELEASE. Este hypervisor suporta uma grande variedade de sistemas operacionais convidados, incluindo FreeBSD, OpenBSD e muitas distribuições Linux™. Por padrão, o bhyve fornece acesso ao console serial e não emula um console gráfico. Os recursos de offload de virtualização das CPUs mais recentes são usados para evitar os métodos legados de tradução de instruções e de gerenciamento manual de mapeamentos de memória.

O design do bhyve requer um processador que suporte tabelas de páginas estendidas da Intel™ (EPT) ou a Indexação Rápida de Virtualização da AMD™ (RVI) ou Tabelas de Páginas Aninhadas (NPT). Hospedar sistemas operacionais convidados Linux™ ou convidados FreeBSD com mais de uma vCPU requer suporte a modo irrestrito de VMX (UG). A maioria dos processadores mais recentes, especificamente o Intel™Core™ i3/i5/i7 e o Intel™Xeon™ E3/E5/E7, suportam esses recursos. O suporte UG foi introduzido com a microarquitetura Westmere da Intel. Para obter uma lista completa dos processadores Intel™ que suportam EPT, consulte https://ark.intel.com/content/www/us/en/ark/search/featurefilter.html?productType=873&0_ExtendedPageTables=True. O RVI é encontrado na terceira geração e depois nos processadores AMD Opteron™ (Barcelona). A maneira mais fácil de saber se um processador suporta o bhyve é executar o dmesg ou procurar no /var/run/dmesg.boot pelo o Sinalizador de recurso do processador POPCNT na linha Features2 para processadores AMD™ ou EPT e UG na linha VT-x para os processadores Intel™.

21.7.1. Preparando o host

O primeiro passo para criar uma máquina virtual no bhyve é configurar o sistema host. Primeiro, carregue o módulo do kernel bhyve:

# kldload vmm

Em seguida, crie uma interface tap para o dispositivo de rede na máquina virtual para anexar. Para que o dispositivo de rede participe da rede, crie também uma interface de bridge contendo a interface tap e a interface física como membros. Neste exemplo, a interface física é igb0:

# ifconfig tap0 create
# sysctl net.link.tap.up_on_open=1
net.link.tap.up_on_open: 0 -> 1
# ifconfig bridge0 create
# ifconfig bridge0 addm igb0 addm tap0
# ifconfig bridge0 up

21.7.2. Criando um Sistema Operacional Convidado do FreeBSD

Crie um arquivo para usar como o disco virtual da máquina convidada. Especifique o tamanho e o nome do disco virtual:

# truncate -s 16G guest.img

Baixe uma imagem de instalação do FreeBSD para instalar:

# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.3/FreeBSD-10.3-RELEASE-amd64-bootonly.iso
FreeBSD-10.3-RELEASE-amd64-bootonly.iso       100% of  230 MB  570 kBps 06m17s

O FreeBSD vem com um script de exemplo para executar uma máquina virtual com o bhyve. O script iniciará a máquina virtual e a executará em um loop, para que ela seja reiniciada automaticamente se houver falha. O script usa várias opções para controlar a configuração da máquina: -c controla o número de CPUs virtuais, -m limita a quantidade de memória disponível para o sistema operacional convidado, -t define qual dispositivo tap usar, -d indica qual imagem de disco usar, -i indica ao bhyve para inicializar a partir da imagem CD em vez do disco, e -I define qual imagem de CD deve ser usada. O último parâmetro é o nome da máquina virtual, usada para rastrear as máquinas em execução. Este exemplo inicia a máquina virtual no modo de instalação:

# sh /usr/shared/examples/bhyve/vmrun.sh -c 1 -m 1024M -t tap0 -d guest.img -i -I FreeBSD-10.3-RELEASE-amd64-bootonly.iso guestname

A máquina virtual inicializará e iniciará o instalador. Depois de instalar um sistema na máquina virtual, quando o sistema perguntar sobre a inserção em um shell no final da instalação, escolha Yes.

Reinicialize a máquina virtual. Enquanto a reinicialização da máquina virtual fará o bhyve finalizar, o script vmrun.sh executa o bhyve em um loop e o reiniciará automaticamente. Quando isso acontecer, escolha a opção de reinicialização no menu do carregador de inicialização para escapar do loop. Agora o convidado pode ser iniciado a partir do disco virtual:

# sh /usr/shared/examples/bhyve/vmrun.sh -c 4 -m 1024M -t tap0 -d guest.img guestname

21.7.3. Criando um Sistema Operacional convidado Linux™

Para inicializar sistemas operacionais diferentes do FreeBSD, o port sysutils/grub2-bhyve deve ser instalada primeiro.

Em seguida, crie um arquivo para usar como o disco virtual da máquina convidada:

# truncate -s 16G linux.img

Iniciar uma máquina virtual com o bhyve é um processo de duas etapas. Primeiro um kernel deve ser carregado, então o sistema operacional convidado pode ser iniciado. O kernel Linux™ é carregado com o sysutils/grub2-bhyve. Crie um device.map que o grub usará para mapear os dispositivos virtuais para os arquivos no sistema host:

(hd0) ./linux.img
(cd0) ./somelinux.iso

Use o sysutils/grub2-bhyve para carregar o kernel Linux™ de uma imagem ISO:

# grub-bhyve -m device.map -r cd0 -M 1024M linuxguest

Isto irá iniciar o grub. Se o CD de instalação contiver um grub.cfg, um menu será exibido. Caso contrário, os arquivos vmlinuz e initrd devem ser localizados e carregados manualmente:

grub> ls
(hd0) (cd0) (cd0,msdos1) (host)
grub> ls (cd0)/isolinux
boot.cat boot.msg grub.conf initrd.img isolinux.bin isolinux.cfg memtest
splash.jpg TRANS.TBL vesamenu.c32 vmlinuz
grub> linux (cd0)/isolinux/vmlinuz
grub> initrd (cd0)/isolinux/initrd.img
grub> boot

Agora que o kernel Linux™ está carregado, o sistema convidado pode ser iniciado:

# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img \
    -s 4:0,ahci-cd,./somelinux.iso -l com1,stdio -c 4 -m 1024M linuxguest

O sistema inicializará e iniciará o instalador. Depois de instalar um sistema na máquina virtual, reinicialize a máquina virtual. Isso fará com que o bhyve seja encerrado. A instância da máquina virtual precisa ser destruída antes de poder ser iniciada novamente:

# bhyvectl --destroy --vm=linuxguest

Agora, o sistema convidado pode ser iniciado diretamente do disco virtual. Carregue o kernel:

# grub-bhyve -m device.map -r hd0,msdos1 -M 1024M linuxguest
grub> ls
(hd0) (hd0,msdos2) (hd0,msdos1) (cd0) (cd0,msdos1) (host)
(lvm/VolGroup-lv_swap) (lvm/VolGroup-lv_root)
grub> ls (hd0,msdos1)/
lost+found/ grub/ efi/ System.map-2.6.32-431.el6.x86_64 config-2.6.32-431.el6.x
86_64 symvers-2.6.32-431.el6.x86_64.gz vmlinuz-2.6.32-431.el6.x86_64
initramfs-2.6.32-431.el6.x86_64.img
grub> linux (hd0,msdos1)/vmlinuz-2.6.32-431.el6.x86_64 root=/dev/mapper/VolGroup-lv_root
grub> initrd (hd0,msdos1)/initramfs-2.6.32-431.el6.x86_64.img
grub> boot

Inicialize a máquina virtual:

# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 \
    -s 3:0,virtio-blk,./linux.img -l com1,stdio -c 4 -m 1024M linuxguest

O Linux™ iniciará agora na máquina virtual e, eventualmente, apresentará o prompt de login. Faça o login e use a máquina virtual. Quando terminar, reinicialize a máquina virtual para sair do bhyve. Destrua a instância da máquina virtual:

# bhyvectl --destroy --vm=linuxguest

21.7.4. Inicializando máquinas virtuais bhyve com Firmware UEFI

Além do bhyveload e do grub-bhyve, o hypervisor bhyve também pode inicializar máquinas virtuais usando o firmware do espaço de usuário UEFI . Esta opção pode suportar sistemas operacionais convidados que não são suportados pelos outros carregadores.

Para utilizar o suporte ao UEFI no bhyve, primeiro obtenha as imagens de firmware UEFI. Isto pode ser feito instalando o port ou pacote sysutils/bhyve-firmware.

Com o firmware no lugar, adicione os sinalizadores -l bootrom,/path/to/firmware à linha de comando do bhyve. A sintaxe real do bhyve pode se parecer com a seguinte:

# bhyve -AHP -s 0:0,hostbridge -s 1:0,lpc \
-s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,./disk.img \
-s 4:0,ahci-cd,./install.iso -c 4 -m 1024M \
-l bootrom,/usr/local/shared/uefi-firmware/BHYVE_UEFI.fd \
guest

O sysutils/bhyve-firmware também contém um firmware habilitado para CSM, para inicializar sistemas operacionais hóspedes sem suporte à UEFI no modo de BIOS legado:

# bhyve -AHP -s 0:0,hostbridge -s 1:0,lpc \
-s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,./disk.img \
-s 4:0,ahci-cd,./install.iso -c 4 -m 1024M \
-l bootrom,/usr/local/shared/uefi-firmware/BHYVE_UEFI_CSM.fd \
guest

21.7.5. Framebuffer UEFI Gráfico para bhyve

O suporte ao firmware UEFI é particularmente útil em sistemas operacionais convidados predominantemente gráficos, como o Microsoft Windows™.

O suporte para o framebuffer UEFI-GOP também pode ser ativado com os sinalizadores -s 29,fbuf,tcp=0.0.0.0:5900. A resolução do framebuffer pode ser configurada com w=800 e h=600 e o bhyve pode ser instruído para aguardar uma conexão VNC antes de inicializar o sistema operacional convidado adicionando wait. O framebuffer pode ser acessado pelo host ou pela rede através do protocolo VNC. Além disso, -s 30,xhci,tablet pode ser adicionado para obter a sincronização precisa do cursor do mouse com o host.

O comando bhyve resultante ficaria assim:

# bhyve -AHP -s 0:0,hostbridge -s 31:0,lpc \
-s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,./disk.img \
-s 4:0,ahci-cd,./install.iso -c 4 -m 1024M \
-s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait \
-s 30,xhci,tablet \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
guest

Observe que, no modo de emulação do BIOS, o framebuffer deixará de receber atualizações quando o controle for passado do firmware para o sistema operacional convidado.

21.7.6. Usando o ZFS com os sistemas operacionais convidados no bhyve

Se o ZFS estiver disponível na máquina host, o uso de volumes ZFS em vez de arquivos de imagem de disco pode fornecer benefícios significativos de desempenho para as VMs convidadas. Um volume ZFS pode ser criado por:

# zfs create -V16G -o volmode=dev zroot/linuxdisk0

Ao iniciar a VM, especifique o volume ZFS como a unidade de disco:

# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s3:0,virtio-blk,/dev/zvol/zroot/linuxdisk0 \
    -l com1,stdio -c 4 -m 1024M linuxguest

21.7.7. Consoles de máquinas virtuais

É vantajoso executar o console do bhyve em uma ferramenta de gerenciamento de sessão, como o sysutils/tmux ou sysutils/screen, para que possa desanexar e reanexar o console. Também é possível ter o console do bhyve como um dispositivo de modem nulo o qual pode ser acessado com o comando cu. Para fazer isso, carregue o módulo do kernel nmdm e substitua -l com1,stdio with -l com1,/dev/nmdm0A. Os dispositivos /dev/nmdm são criados automaticamente conforme necessário, onde cada um é um par, correspondente às duas extremidades do cabo de modem nulo (/dev/nmdm0A e /dev/nmdm0B). Veja nmdm(4) para maiores informações.

# kldload nmdm
# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img \
    -l com1,/dev/nmdm0A -c 4 -m 1024M linuxguest
# cu -l /dev/nmdm0B
Connected

Ubuntu 13.10 handbook ttyS0

handbook login:

21.7.8. Gerenciando Máquinas Virtuais

Um nó de dispositivo é criado em /dev/vmm para cada máquina virtual. Isso permite que o administrador veja facilmente uma lista das máquinas virtuais em execução:

# ls -al /dev/vmm
total 1
dr-xr-xr-x   2 root  wheel    512 Mar 17 12:19 ./
dr-xr-xr-x  14 root  wheel    512 Mar 17 06:38 ../
crw-------   1 root  wheel  0x1a2 Mar 17 12:20 guestname
crw-------   1 root  wheel  0x19f Mar 17 12:19 linuxguest
crw-------   1 root  wheel  0x1a1 Mar 17 12:19 otherguest

Uma máquina virtual especificada pode ser destruída usando bhyvectl:

# bhyvectl --destroy --vm=guestname

21.7.9. Configuração Persistente

Para configurar o sistema para iniciar os sistemas operacionais convidados do bhyve no momento da inicialização, as seguintes configurações devem ser feitas nos arquivos especificados:

  1. /etc/sysctl.conf

    net.link.tap.up_on_open=1
  2. /etc/rc.conf

    cloned_interfaces="bridge0 tap0"
    ifconfig_bridge0="addm igb0 addm tap0"
    kld_list="nmdm vmm"

21.8. FreeBSD como Host Xen™

O Xen é um hypervisor tipo 1 licenciado sob a GPLv2 para arquiteturas Intel™ e ARM™. O FreeBSD suporta domínios não privilegiados (máquina virtual) nas plataformas i386™ e AMD™ 64-Bit DomU e Amazon EC2 desde o FreeBSD 8.0 e incluiu o suporte ao domínio de controle Dom0 (host) no FreeBSD 11.0. O suporte para domínios para-virtualizados (PV) foi removido do FreeBSD 11 em favor de domínios virtualizados de hardware (HVM), o que proporciona melhor desempenho.

O Xen™ é um hypervisor bare-metal, o que significa que é o primeiro programa carregado após o BIOS. Um convidado especial privilegiado chamado Domain-0 (Dom0 para abreviar) é então iniciado. O Dom0 usa seus privilégios especiais para acessar diretamente o hardware físico subjacente, tornando-o uma solução de alto desempenho. Ele é capaz de acessar os controladores de disco e adaptadores de rede diretamente. As ferramentas de gerenciamento do Xen™ para gerenciar e controlar o hypervisor Xen™ também são usadas pelo Dom0 para criar, listar e destruir VMs. Dom0 fornece discos virtuais e recursos de rede para domínios sem privilégios, geralmente chamados de DomU. O Xen™ Dom0 pode ser comparado ao console de serviço de outras soluções de hypervisor , enquanto o DomU é onde as VMs convidadas são executadas.

O Xen™ pode migrar VMs entre diferentes servidores Xen™. Quando os dois hosts xen compartilham o mesmo armazenamento subjacente, a migração pode ser feita sem a necessidade de primeiro desligar a VM. Em vez disso, a migração é executada ao vivo enquanto o DomU está em execução e não há necessidade de reiniciá-lo ou planejar um tempo de inatividade. Isso é útil em cenários de manutenção ou em janelas de atualização para garantir que os serviços fornecidos pelo DomU continuem disponiveis. Muitos outros recursos do Xen™ estão listados na página wiki com a visão global sobre o Xen. Note que ainda nem todos os recursos são suportados no FreeBSD.

21.8.1. Requisitos de hardware para o Xen™ Dom0

Para executar o hypervisor Xen™ em um host, são necessárias certas funcionalidades de hardware. Os domínios virtualizados de hardware requerem o suporte à Tabela de Páginas Estendidas (EPT) e à Unidade de Gerenciamento de Memória de Entrada / Saída (IOMMU) no processador do host.

Para executar um Xen™ Dom0 no FreeBSD, a maquina deve ser inicializada usando o boot legado (BIOS).

21.8.2. Configuração do Xen™ Dom0 Domínio de Controle

Os usuários do FreeBSD 11 devem instalar os pacotes emulators/xen-kernel47 e sysutils/xen-tools47 que são baseados no Xen versão 4.7. Sistemas rodando o FreeBSD-12.0 ou mais novo podem usar o Xen 4.11 fornecido por emulators/xen-kernel411 e sysutils/xen-tools411, respectivamente.

Os arquivos de configuração devem ser editados para preparar o host para a integração do Dom0 após a instalação dos pacotes do Xen. Uma entrada para /etc/sysctl.conf desabilita o limite de quantas páginas de memória podem ser conectadas. Caso contrário, as VMs do DomU com requisitos de memória mais altos não serão executadas.

# echo 'vm.max_wired=-1' >> /etc/sysctl.conf

Outra configuração relacionada à memória envolve a alteração do /etc/login.conf, configurando a opção memorylocked para unlimited. Caso contrário, a criação de domínios DomU poderá falhar com erros Cannot allocate memory. Depois de fazer a mudança no /etc/login.conf, execute o comando cap_mkdb para atualizar o banco de dados de recursos. Veja Limites de Recursos para detalhes.

# sed -i '' -e 's/memorylocked=64K/memorylocked=unlimited/' /etc/login.conf
# cap_mkdb /etc/login.conf

Adicione uma entrada para o console do Xen™ ao /etc/ttys:

# echo 'xc0     "/usr/libexec/getty Pc"         xterm   onifconsole  secure' >> /etc/ttys

A seleção de um kernel Xen™ no /boot/loader.conf ativa o Dom0. O Xen™ também requer recursos como CPU e memória da máquina host para ele mesmo e para outros domínios DomU. Quanto de CPU e memória depende dos requisitos individuais e das capacidades de hardware. Neste exemplo, 8 GB de memória e 4 CPUs virtuais são disponibilizados para o Dom0. O console serial também é ativado e as opções de log são definidas.

O seguinte comando é usado para pacotes Xen 4.7:

# sysrc -f /boot/loader.conf hw.pci.mcfg=0
# sysrc -f /boot/loader.conf if_tap_load="YES"
# sysrc -f /boot/loader.conf xen_kernel="/boot/xen"
# sysrc -f /boot/loader.conf xen_cmdline="dom0_mem=8192M dom0_max_vcpus=4 dom0pvh=1 console=com1,vga com1=115200,8n1 guest_loglvl=all loglvl=all"

Para as versões Xen 4.11 e superiores, o seguinte comando deve ser usado:

# sysrc -f /boot/loader.conf if_tap_load="YES"
# sysrc -f /boot/loader.conf xen_kernel="/boot/xen"
# sysrc -f /boot/loader.conf xen_cmdline="dom0_mem=8192M dom0_max_vcpus=4 dom0=pvh console=com1,vga com1=115200,8n1 guest_loglvl=all loglvl=all"

Os arquivos de log criados pelo Xen™ para as VMs do DomU são armazenados em /var/log/xen. Por favor, certifique-se de verificar o conteúdo do diretório em caso de problemas.

Ative o serviço xencommons durante a inicialização do sistema:

# sysrc xencommons_enable=yes

Essas configurações são suficientes para iniciar um sistema habilitado para Dom0. No entanto, falta a funcionalidade de rede para as máquinas DomU. Para corrigir isso, defina uma interface em bridge com a NIC principal do sistema que as VMs DomU poderão usar para se conectar à rede. Substitua em0 pelo nome da interface de rede do host.

# sysrc cloned_interfaces="bridge0"
# sysrc ifconfig_bridge0="addm em0 SYNCDHCP"
# sysrc ifconfig_em0="up"

Reinicie o host para carregar o kernel Xen™ e inicie o Dom0.

# reboot

Após inicializar com sucesso o kernel Xen™ e efetuar login no sistema novamente, a ferramenta de gerenciamento do Xen™, xl é usada para mostrar informações sobre os domínios.

# xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  8192     4     r-----     962.0

A saída confirma que o Dom0 (chamado Domain-0) tem o ID 0 e está em execução. Ele também possui a memória e as CPUs virtuais que foram definidas anteriormente no /boot/loader.conf. Mais informações podem ser encontradas na Documentação do Xen. Agora as VMs convidadas do DomU podem ser criadas.

21.8.3. Configuração da VM Convidada Xen™ DomU

Domínios desprivilegiados consistem em um arquivo de configuração e discos rígidos virtuais ou físicos. Os discos virtuais para armazenamento do DomU podem ser arquivos criados pelo truncate(1) ou volumes ZFS, conforme descrito em Criando e Destruindo Volumes. Neste exemplo, um volume de 20 GB é usado. Uma VM é criada com o volume ZFS, uma imagem ISO do FreeBSD, 1 GB de RAM e duas CPUs virtuais. O arquivo ISO de instalação é obtido com o fetch(1) e salvo localmente em um arquivo chamado freebsd.iso.

# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-bootonly.iso -o freebsd.iso

Um volume de 20 GB do ZFS chamado xendisk0 é criado para servir como espaço em disco para a VM.

# zfs create -V20G -o volmode=dev zroot/xendisk0

A nova VM DomU convidada é definida em um arquivo. Algumas definições específicas, como nome, mapa de teclado e detalhes da conexão VNC, também são definidas. O seguinte freebsd.cfg contém uma configuração mínima de DomU para este exemplo:

# cat freebsd.cfg
builder = "hvm" (1)
name = "freebsd" (2)
memory = 1024 (3)
vcpus = 2 (4)
vif = [ 'mac=00:16:3E:74:34:32,bridge=bridge0' ] (5)
disk = [
'/dev/zvol/tank/xendisk0,raw,hda,rw', (6)
'/root/freebsd.iso,raw,hdc:cdrom,r' (7)
  ]
vnc = 1 (8)
vnclisten = "0.0.0.0"
serial = "pty"
usbdevice = "tablet"

Estas linhas são explicadas com mais detalhes:

1Isso define que tipo de virtualização usar. hvm refere-se à virtualização assistida por hardware ou à máquina virtual de hardware. Os sistemas operacionais convidados podem ser executados sem modificação em CPUs com extensões de virtualização, fornecendo quase o mesmo desempenho que a execução em hardware físico. generic é o valor padrão e cria um domínio PV.
2Nome desta máquina virtual para distingui-la de outras executadas no mesmo Dom0. Requerido.
3Quantidade de RAM em megabytes para disponibilizar para a VM. Esse valor é subtraído da memória total disponível do hypervisor, não da memória do Dom0.
4Número de CPUs virtuais disponíveis para a VM convidada. Para um melhor desempenho, não crie convidados com mais CPUs virtuais do que o número de CPUs físicas no host.
5Adaptador de rede virtual. Esta é a bridge conectada à interface de rede do host. O parâmetro mac é o endereço MAC definido na interface de rede virtual. Este parâmetro é opcional, se nenhum MAC for fornecido, o Xen™ irá gerar um aleatório.
6Caminho completo para o disco, arquivo ou volume ZFS do armazenamento em disco para essa VM. As opções e as várias definições de disco são separadas por vírgulas.
7Define o meio de inicialização a partir do qual o sistema operacional inicial é instalado. Neste exemplo, é a imagem ISO baixada anteriormente. Consulte a documentação do Xen™ para outros tipos de dispositivos e outras opções para configurar.
8Opções que controlam a conectividade do VNC para o console serial do DomU. Em ordem, estes são: ativa suporte ao VNC, define o endereço IP no qual escutar, device node para o console serial e o método de entrada para posicionamento preciso do mouse e outros métodos de entrada. keymap define qual mapa de teclas usar, sendo english por padrão.

Após o arquivo ter sido criado com todas as opções necessárias, o DomU é criado passando-o como um parâmetro para o comando xl create.

# xl create freebsd.cfg

Cada vez que o Dom0 é reiniciado, o arquivo de configuração deve ser passado para xl create novamente para recriar o DomU. Por padrão, somente o Dom0 é criado após uma reinicialização, não as VMs individuais. As VMs podem continuar de onde pararam, pois armazenaram o sistema operacional no disco virtual. A configuração da máquina virtual pode mudar com o tempo (por exemplo, ao adicionar mais memória). Os arquivos de configuração da máquina virtual devem ter um backup e manter-se disponíveis para poder recriar a VM convidada quando necessário.

A saída de xl list confirma que o DomU foi criado.

# xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  8192     4     r-----  1653.4
freebsd                                      1  1024     1     -b----   663.9

Para iniciar a instalação do sistema operacional base, inicie o cliente VNC, direcionando-o para o endereço de rede principal do host ou para o endereço IP definido na linha vnclisten do freebsd.cfg. Depois que o sistema operacional tiver sido instalado, desligue o DomU e desconecte o visualizador VNC. Edite o freebsd.cfg, removendo a linha com a definição cdrom ou comentando-a inserindo um caractere # no início da linha. Para carregar esta nova configuração, é necessário remover o DomU antigo com xl destroy, passando o nome ou o id como parâmetro. Depois, recrie-o usando o freebsd.cfg modificado.

# xl destroy freebsd
# xl create freebsd.cfg

A máquina pode então ser acessada novamente usando o visualizador VNC. Desta vez, ele será inicializado a partir do disco virtual em que o sistema operacional foi instalado e pode ser usado como uma máquina virtual.

21.8.4. Solução de problemas

Esta seção contém informações básicas para ajudar a solucionar problemas encontrados ao usar o FreeBSD como host ou convidado do Xen™.

21.8.4.1. Solução de problemas de inicialização do host

Observe que as dicas de solução de problemas a seguir são destinadas ao Xen™ 4.11 ou mais recente. Se você ainda estiver usando o Xen™ 4.7 e tendo problemas, considere migrar para uma versão mais recente do Xen™.

Para solucionar problemas de inicialização do host, você provavelmente precisará de um cabo serial ou de um cabo USB de depuração. Uma saída de boot verbosa do Xen™ pode ser obtida adicionando-se parametros à opção xen_cmdline encontrada no loader.conf. Alguns parametros de depuração relevantes são:

  • iommu=debug: pode ser usado para imprimir informações de diagnóstico adicionais sobre o iommu.

  • dom0=verbose: pode ser usado para imprimir informações de diagnóstico adicionais sobre o processo de compilação dom0.

  • sync_console: flag para forçar a saída síncrona do console. Útil para depuração para evitar a perda de mensagens devido à limitação de taxa. Nunca use essa opção em ambientes de produção, pois ela pode permitir que convidados mal-intencionados realizem ataques DoS contra o Xen™ usando o console.

O FreeBSD também deve ser inicializado no modo verbose para identificar quaisquer problemas. Para ativar a inicialização detalhada, execute este comando:

# sysrc -f /boot/loader.conf boot_verbose="YES"

Se nenhuma dessas opções ajudar a resolver o problema, envie o registro de inicialização serial para freebsd-xen@FreeBSD.org e xen-devel@lists.xenproject.org para uma análise mais aprofundada.

21.8.4.2. Solução de problemas na criação de VMs convidadas

Problemas também podem surgir ao criar convidados, as informações a seguir tentam fornecer alguma ajuda para aqueles que precisarem diagnosticar problemas de criação de convidados.

A causa mais comum de falhas na criação de convidados é o comando xl cuspindo algum erro e saindo com um código de retorno diferente de 0. Se o erro fornecido não for suficiente para ajudar a identificar o problema, uma saída mais detalhada pode ser obtida do comando xl usando-se a opção v repetidamente.

# xl -vvv create freebsd.cfg
Parsing config from freebsd.cfg
libxl: debug: libxl_create.c:1693:do_domain_create: Domain 0:ao 0x800d750a0: create: how=0x0 callback=0x0 poller=0x800d6f0f0
libxl: debug: libxl_device.c:397:libxl__device_disk_set_backend: Disk vdev=xvda spec.backend=unknown
libxl: debug: libxl_device.c:432:libxl__device_disk_set_backend: Disk vdev=xvda, using backend phy
libxl: debug: libxl_create.c:1018:initiate_domain_create: Domain 1:running bootloader
libxl: debug: libxl_bootloader.c:328:libxl__bootloader_run: Domain 1:not a PV/PVH domain, skipping bootloader
libxl: debug: libxl_event.c:689:libxl__ev_xswatch_deregister: watch w=0x800d96b98: deregister unregistered
domainbuilder: detail: xc_dom_allocate: cmdline="", features=""
domainbuilder: detail: xc_dom_kernel_file: filename="/usr/local/lib/xen/boot/hvmloader"
domainbuilder: detail: xc_dom_malloc_filemap    : 326 kB
libxl: debug: libxl_dom.c:988:libxl__load_hvm_firmware_module: Loading BIOS: /usr/local/shared/seabios/bios.bin
...

Se a saída detalhada não ajudar a diagnosticar o problema, verifique também os logs do toolstack QEMU e do Xen™ em /var/log/xen. Observe que o nome do domínio é anexado ao nome do registro, portanto, se o domínio tiver o nome freebsd, você deverá encontrar um /var/log/xen/xl-freebsd.log e provavelmente um /var/log/xen/qemu-dm-freebsd.log. Ambos os arquivos de log podem conter informações úteis para a depuração. Se nada disso ajudar a resolver o problema, envie a descrição do problema que você está enfrentando e o máximo de informações possíveis para freebsd-xen@FreeBSD.org e xen-devel@lists.xenproject.org para obter ajuda.


Última alteração em: 9 de março de 2024 por Danilo G. Baio