Skip to main content

351.2 Xen



Conceitos


O Xen é um Hypervisor do tipo 1 (bare metal) de código aberto. Na terminologia do Xen, essas máquinas virtuais são chamadas de "domínios" (dom), identificados por seus IDs numéricos de domínio (domid). O Xen é multiplataforma, o que significa que roda em x86, amd64 e arm. Ainda suporta PV e HVM e alguns intermediários.


O Xen é muito usado no ambiente de IoT e possui segurança como ponto forte da aplicação.


Existem algumas diferentes versões do Xen, segue a nomenclaturas usadas para descrever cada um:

  1. Xen Hypervisor

    • O Xen Hypervisor é o componente fundamental do projeto Xen. Ele é um hipervisor de código aberto que permite a execução de máquinas virtuais. O Xen Hypervisor fornece a base para a virtualização, gerenciando recursos de hardware e isolando as máquinas virtuais umas das outras.
  2. Xen Project

    • O Xen Project é o projeto de código aberto que desenvolve e mantém o Xen Hypervisor. Este projeto é colaborativo e recebe contribuições de uma comunidade global de desenvolvedores. O Xen Project tem como objetivo oferecer uma solução de virtualização eficiente e segura. Hoje ele é gerenciado pela Linux Foundation que inclue o Xen, o XAPI e outros softwares.
  3. Xen Server

    • XenServer é uma plataforma de virtualização completa que utiliza o Xen Hypervisor como base. Desenvolvido pela Citrix, o XenServer adiciona uma camada de gerenciamento e recursos adicionais para facilitar a implementação e administração de ambientes de virtualização. Oferece recursos avançados, como migração de máquinas virtuais e gerenciamento centralizado. Existe uma versão comercial e uma gratuita.


Arquitetura


O hipervisor do Projeto Xen é executado diretamente no hardware e é responsável por lidar com a CPU, memória, temporizadores e interrupções. Ele é o primeiro programa a ser executado após sair do carregador de inicialização.


Ao inicializar, o Xen inicia automaticamente o dom0, uma máquina virtual que, por padrão, recebe permissões completas. O dom0 desempenha o papel de domínio de controle, responsável por criar e gerenciar outras máquinas virtuais, além de atuar como domínio de hardware, supervisionando o hardware e gerenciando a entrada/saída das máquinas virtuais.


Xen Project Architecture

Imagem retirada do wiki.xenproject.org em [26/01/2024]


Na imagem podemos ver que o Xen fica no host hospedeiro (bare metal) e ele possui a VM0 (ou Dom0) como descrito acima para comunicação direta com o Hypervisor e com isso essa Dom0 gerencia as outras VMs. As VM que são criadas são nomeadas como DomU (vamos deixar de lado a parte do ID de cada Dom), o U é de Unprivileged, já que a Dom0 que detém a maioria dos privilégios. Dessa forma, Dom0 age como um controlador central que gerencia e coordena as demais VMs no ambiente virtualizado.


Um resumo sobre a Dom0, ela é a VM0, ou seja, a primeira VM a ser criada no Xen, é conhecida como Domínio controlador, acessa diretamente o hardware e a comunicação dela com as demais VMs (DomU) é via drivers. As ferramentas utilizadas para administrar VMs, também conhecidas como interfaces de controle, são chamadas de Toolstacks. Para gerenciar o Xen via linha de comando, usamos o xl (anteriormente era xm), podemos usar também o libvirt/virsh e XAPI/xe.



XenStore


O Xenstore é um banco de dados compartilhado que armazena informações de configuração e estado para máquinas virtuais (VMs). Ele permite que as VMs se comuniquem e compartilhem informações entre si, sem a necessidade de intervenção do administrador do sistema. Ele é implementado como um sistema de arquivos virtual de forma hierarquica similar a uma árvpre (igual LDAP, DNS), que é acessível por todas as VMs no sistema Xen. Ele é gerenciado pelo daemon Xenstored, que é executado no Dom0. As VMs podem acessar o Xenstore usando o comando xenstore-write para escrever dados no banco de dados e o comando xenstore-read para ler dados do banco de dados.



XPAI


O XAPI, ou Xen Project Management API, é uma API aberta que permite a comunicação entre sistemas de gerenciamento e infraestruturas de virtualização. Ele fornece uma maneira padronizada para que os sistemas de gerenciamento controlem e monitorem máquinas virtuais (VMs), recursos de armazenamento e redes virtualizadas, ou seja, administra de forma local e remota os recursos do Xen.


Ele é usado diretamente no Dom0 com o comando xe (com daemon denonominado xapi) ou via HTTPS, é um subprojeto do Xen Project. O XAPI é baseado no protocolo HTTP e usa o formato de dados JSON. Ele é projetado para ser flexível e escalável, para que possa ser usado em uma variedade de cenários.



Instalando o Xen


Vamos ver como instalar o Xen no Debian. Para isso, vamos seguir esse tutorial. Primeiro de tudo, o Sistema Debian não tem mais nada instalado, apenas foi atualizado o sistema (vou usar o Debian 12).


Terminal
# Instale o Xen, as ferramentas para usar o xen e um utilitário para configurar interfaces bridges:
$ sudo apt install -y xen-system-amd64 xen-tools bridge-utils

# Após ter instalado, vamos reiniciar o sistema:
$ sudo reboot

# Após ter reiniciado, vamos executar o primeiro comando do Xen vendo as informações do sistema:
$ sudo xl info
host : debian12.localdomain
release : 6.1.0-17-amd64
version : #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30)
machine : x86_64
nr_cpus : 2
max_cpu_id : 1
nr_nodes : 1
cores_per_socket : 1
threads_per_core : 1
cpu_mhz : 2687.975
hw_caps : 0f8bfbff:c7f82223:2c100800:00000121:0000000f:219c078b:1840010c:00000000
virt_caps : pv hvm hap shadow gnttab-v1 gnttab-v2
total_memory : 2047
free_memory : 127
sharing_freed_memory : 0
sharing_used_memory : 0
outstanding_claims : 0
free_cpus : 0
xen_major : 4
xen_minor : 17
xen_extra : .4-pre
xen_version : 4.17.4-pre
xen_caps : xen-3.0-x86_64 hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64
xen_scheduler : credit2
xen_pagesize : 4096
platform_params : virt_start=0xffff800000000000
xen_changeset :
xen_commandline : placeholder
cc_compiler : x86_64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0
cc_compile_by : pkg-xen-devel
cc_compile_domain : lists.alioth.debian.org
cc_compile_date : Sun Feb 4 15:31:59 UTC 2024
build_id : d0c85ddff788a56b72811a274a9f56888198eb6e
xend_config_format : 4

# Veja as vm criadas:
$ sudo xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1897 2 r----- 7.8

A tabela abaixo mostra os principais comandos do Xen:

ComandoDescrição
xl create <config_file>Cria uma nova instância VM usando um arquivo de configuração especificado.
xl listLista todas as VMs em execução.
xl shutdown <vm_name>Desliga uma VM.
xl destroy <vm_name>Destroi uma VM (Deleta ela mantendo os discos).
xl pause <vm_name>Pausa a execução de uma VM.
xl unpause <vm_name>Retoma a execução de uma VM pausada.
xl reboot <vm_name>Reinicia uma VM especificada.
xl vcpu-list <vm_name>Lista as VCPUs de uma VM especificada.
xl infoExibe informações sobre o host Xen.
xl uptimeExibe informações sobre o uptime para as VMs em execução.
xl dmesgExibe mensagens de registro do Xen.
xl console <vm_name>Conecta-se ao console de uma VM especificada.
xl topExibe estatísticas em tempo real sobre as VMs.
xl mem-set <vm_name> <memory>Define a quantidade de memória de uma VM.
xl cpupool-listLista os cpupools disponíveis.
xl cpupool-create name=<pool_name>Cria um novo cpupool com o nome especificado.
xl cpupool-destroy <pool_name>Destroi um cpupool especificado.
xl cpupool-info <pool_name>Exibe informações sobre um cpupool.
xl cpupool-list-cpus <pool_name>Lista as CPUs atribuídas a um cpupool.
xl save <vm_name> <save_file>Salva o estado da VM em um arquivo especificado (tudo que está rodando e em execução em memória da VM será salvo).
xl restore <save_file>Restaura uma VM a partir de um arquivo de salvamento especificado.

Limitando recursos para dom0

Podemos limitar memoria e CPU para a dom0 da seguinte forma:


sudo vim /etc/default/grub
# Crie a linha abaixo:
GRUB_CMDLINE_XEN_DEFAULT="dom0_max_vcpu=1 dom0_mem=1024M,max:1024M"

dom0_max_vcpu=1: Define o número máximo de VCPUs (Virtual CPUs) que o dom0 pode usar como 1. Isso limita o dom0 a apenas uma CPU virtual.


dom0_mem=1024M,max:1024M: Define a quantidade de memória RAM que o dom0 pode usar. Neste caso, está definido como 1024MB (1GB) de memória RAM fixa. O max:1024M indica que este é o limite máximo de memória que o dom0 pode alocar, ou seja, ele não pode alocar mais do que 1024MB de memória.


Após ter salvado, atualize o grub:


Terminal
# Atualize o grub:
$ sudo update-grub

# Agora reinicie o sistema:
$ sudo reboot

# Veja novamente as vm criadas:
$ sudo xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 2 r----- 4.5

# Também podemos ver os comandos passados via grub:
$ sudo xl info | grep -i commandline
xen_commandline : placeholder dom0_max_vcpu=1 dom0_mem=1024M,max:1024M

# Também podemos ver os comandos passados via grub usando o dmesg:
$ sudo xl dmesg | grep -i 'command line'
(XEN) Command line: placeholder dom0_max_vcpu=1 dom0_mem=1024M,max:1024M


Configurações de Rede e Armazenamento


No servidor Debian vamos configurar uma das interfaces de rede como bridge, para que todas as VMs sejam conectadas na rede física.


Vamos configurar o arquivo abaixo do Debian para configurar a rede de eth1 em modo bridge:

sudo vim /etc/network/interfaces
auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0
bridge_hw eth0

Agora vamos reiniciar a interface de rede:

Terminal
# Reinicie as configurações de rede:
$ sudo systemctl restart networking

# Agora veja a nova interface:
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master xenbr0 state UP group default qlen 1000
link/ether 52:54:00:d7:cd:ad brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname ens5
13: xenbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:d7:cd:ad brd ff:ff:ff:ff:ff:ff
inet 192.168.121.161/24 brd 192.168.121.255 scope global dynamic xenbr0
valid_lft 3532sec preferred_lft 3532sec

# Podemos ver com o comando brctl também:
$ sudo brctl show
bridge name bridge id STP enabled interfaces
xenbr0 8000.525400d7cdad no eth0

Agora vamos configurar o armazenamento para usar LVM, nele vamos armazenar os discos virtuais das VMs. Para que fique fácil de gerenciar vamos usar LVM.

Terminal
# Liste os discos existentes:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 254:0 0 128G 0 disk
├─vda1 254:1 0 487M 0 part /boot
├─vda2 254:2 0 1.9G 0 part [SWAP]
└─vda3 254:3 0 125.6G 0 part /
vdb 254:16 0 100G 0 disk

# Vamos criar gerenciar os discos por lvm, então vamos criar o PV:
$ sudo pvcreate /dev/vdb
Physical volume "/dev/vdb" successfully created.

# Crie o VG usando os PV:
$ sudo vgcreate xen-vg /dev/vdb
Volume group "xen-vg" successfully created

# Liste tudo:
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
xen-vg 1 0 0 wz--n- <100.00g <100.00g


Arquivos de Configuração


Os arquivos de configuração mais comuns do Xen são:

  • /etc/xen/xl.conf
    Este é o arquivo de configuração principal do Xen. Este arquivo contém as configurações globais do hipervisor, como a definição de parâmetros de inicialização, configuração de dispositivos de armazenamento, configuração de interfaces de rede, etc.

  • /etc/xen/oxenstored.conf
    Este é um arquivo de configuração usado pelo software Oxenstore. O Oxenstore é um projeto separado que usa tecnologia blockchain para armazenamento de dados distribuído. O arquivo oxenstored.conf contém informações sobre como o Oxenstore deve ser configurado e operado.

  • /etc/default/xen
    Este arquivo é usado para definir variáveis de ambiente e configurações padrão para o Xen. Geralmente, ele é utilizado para configurar parâmetros de inicialização do hypervisor Xen e suas ferramentas relacionadas.

  • /etc/default/xendomains
    Este arquivo é usado para definir configurações padrão para o gerenciamento de domínios (máquinas virtuais) no Xen. Ele geralmente contém variáveis relacionadas ao comportamento padrão do xendomains, que é o daemon responsável por gerenciar os domínios do Xen.

  • /etc/xen/auto/
    É um diretório onde podemos colocar arquivos de configuração de máquinas virtuais (VMs) que desejamos iniciar automaticamente durante o boot do sistema Xen.

    Quando o Xen é iniciado, ele verifica o conteúdo do diretório /etc/xen/auto e inicia todas as VMs cujos arquivos de configuração estão presentes nesse diretório. Isso permite que você configure facilmente quais VMs devem ser iniciadas automaticamente quando o sistema Xen é inicializado, sem a necessidade de manualmente invocar o comando xl create para cada uma delas.

    Por padrão as VMs (domínios) já são iniciados automaticamente, mas pode acontecer delas não subirem, para isso podemos forçar essa inicialização.


Os arquivos com extensões .pvhlinux, .pvlinux e .hvm são exemplos de arquivos de configuração para iniciar diferentes tipos de VM ou domínios (no Xen é dom).

  • xlexample.pvhlinux: Este arquivo é um exemplo de configuração para um domínio PVH (Paravirtualized Hardware) no Xen, destinado a sistemas operacionais Linux.

  • xlexample.pvlinux: Este arquivo .pvlinux é um exemplo de configuração para um domínio PV (Paravirtualized) no Xen, também destinado a sistemas operacionais Linux. Este é o padrão caso não seja especificado no arquivo.

  • xlexample.hvm: Este arquivo .hvm é um exemplo de configuração para um domínio HVM (Hardware Virtual Machine) no Xen.


Diferença entre pv, hvm e pvh

O PV é uma abordagem de virtualização na qual o sistema operacional convidado é modificado para estar ciente de que está sendo virtualizado.


O HVM é uma abordagem de virtualização na qual o sistema operacional convidado não é modificado e é executado em uma máquina virtual emulada. O Xen emula uma plataforma de hardware completa para os sistemas operacionais HVM, permitindo a execução de sistemas operacionais não modificados.


O PVH é uma combinação das abordagens PV e HVM, oferecendo o melhor dos dois mundos.


Para mais detalhes, configura o man para xl.conf e xl.cfg.



Configuração de uma VM no modo PV


Agora vamos configurar nossa primeira VM no Xen usando o tipo PV. Para isso vamos usar alguns scripts Perl que estão no pacote xen-tools que foi instalado. Vale notar que esse script só cria VM do tipo PV, para criação de HVM o processo é manual.


Vamos começar a criar nossa primeira VM. Na verdade, o comando abaixo vai preparar o ambiente para executar a VM, ele irá baixar a imagem do Sistema Operacional, criar os discos para a VM usar, criar interface de rede e etc. Tudo que ele faz pode ser visto pelos logs no arquivo de logs criado pelo comando e pela saída no terminal.

Terminal
$ sudo xen-create-image --hostname=test-pv --memory=512mb --vcpus=1 --lvm=xen-vg --dhcp --pygrub --dist=bookworm

General Information
--------------------
Hostname : test-pv
Distribution : bookworm
Mirror : http://deb.debian.org/debian
Partitions : swap 512M (swap)
/ 4G (ext4)
Image type : full
Memory size : 512mb
Bootloader : pygrub

Networking Information
----------------------
IP Address : DHCP [MAC: 00:16:3E:3D:02:94]


Creating swap on /dev/xen-vg/test-pv-swap
Done

Creating ext4 filesystem on /dev/xen-vg/test-pv-disk
Done
Installation method: debootstrap
Done

Running hooks
Done

No role scripts were specified. Skipping

Creating Xen configuration file
Done

No role scripts were specified. Skipping
Setting up root password
Generating a password for the new guest.
All done


Logfile produced at:
/var/log/xen-tools/test-pv.log

Installation Summary
---------------------
Hostname : test-pv
Distribution : bookworm
MAC Address : 00:16:3E:3D:02:94
IP Address(es) : dynamic
SSH Fingerprint : SHA256:emFVm7+u5E0lD27a6950b5MHOBgYie4tqDYggXHcbQY (DSA)
SSH Fingerprint : SHA256:MqGngiC3c8GAg1CBixLe50RKj0wJAUBO7O25UHk6EzI (ECDSA)
SSH Fingerprint : SHA256:dxYbY/mrwN8il/pzSFTtRPNewNkOHhv/TaZ/tiPo2zg (ED25519)
SSH Fingerprint : SHA256:DIbQQu8YWQmJMNGAyejjzgHBY9YuVyEfGZ86bWpB/Tc (RSA)
Root Password : rML5ZfuLSGWEZeLmRnLtHsQ

O pygrub é um Bootloader que é fornecido pelo Xen Project. O --dist=bookworm é qual distro vamos usar, no caso, bookworm é o codename do Debian 12.


Vamos ver alguns detalhes com a criação da VM no modo PV.

Terminal
# O comando acima criou um arquivo novo dentro do '/etc/xen', esse arquivo contém a configuração da nossa VM:
$ sudo ls -l /etc/xen/test-pv.cfg
-rw-r--r-- 1 root root 651 Apr 20 17:59 /etc/xen/test-pv.cfg

# Veja que foi criado os "discos" da nossa VM:
$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
test-pv-disk xen-vg -wi-a----- 4.00g
test-pv-swap xen-vg -wi-a----- 512.00m


# Agora vamos iniciar nossa VM e já entrar no console da VM:
$ sudo xl create -c /etc/xen/test-pv.cfg

## Para sair do console use 'ctrl + ]'

# Veja novamente as vm criadas:
$ sudo xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 2 r----- 98.9
test-pv 1 512 1 -b---- 1.7

# Para logar novamente podemos fazer via console (ao invés do nome da VM, podemos usar o ID):
$ sudo xl console test-pv

# Para deletar tudo podemos fazer:
$ sudo xen-delete-image test-pv --lvm=xen-vg
Deleting: /etc/xen/test-pv.cfg
Removing swap volume
Removing LVM disk volume


Configuração de uma VM no modo HVM


Agora vamos configurar nossa primeira VM no Xen usando o tipo HVM. Para que isso seja possível, vamos ter que fazer todo o processo manualmente. Antes de iniciar, se você está fazendo testes usando o KVM, deve certificar que a virtualização herdada está habilitada, para isso veja esse site.


Vamos começar criando o disco para nossa VM.

Terminal
$ sudo lvcreate -n test-hvm-disk -L 20G xen-vg
WARNING: swap signature detected on /dev/xen-vg/test-hvm-disk at offset 4086. Wipe it? [y/n]: y
Wiping swap signature on /dev/xen-vg/test-hvm-disk.
Logical volume "test-hvm-disk" created.

# Liste os LVs:
$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
test-hvm-disk xen-vg -wi-a----- 20.00g

Agora vamos criar o arquivo de configuração da VM.

sudo vim /etc/xen/test-hvm.cfg
# Tipo da VM:
type = "hvm"

## Além do 'type', podemos usar 'builder = "hvm"'

# Nome da VM:
name = "test-hvm"

# Quantidade de memória em MB
memory = 1024

# Quantidade de memória máxima em MB
maxmem = 1024

# Quantidade de VCPUS
vcpus = 1

# Interface de rede
vif = [ 'bridge=xenbr0' ]

# Disco da VM.
disk = [
'phy:/dev/xen-vg/test-hvm-disk,hda,w',
'file:/root/ubuntu-22.04.4-live-server-amd64.iso,hdc:cdrom,r',
]

# Configurando o boot, no caso será via cdrom primeiro:
boot="d"

## Para iniciar pelo disco use a configuração abaixo:
#boot="c"

# Console VGA para acessar a vm e instalar/configurar:
#sdl = 1
vnc = 1

Agora vamos iniciar a VM.

Terminal
$ sudo xl create /etc/xen/test-hvm.cfg
Parsing config from /etc/xen/test-hvm.cfg

# Veja as VMs:
$ sudo xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 2 r----- 8.7
test-hvm 1 512 1 r----- 24.7

# Podemos ver todas as imagens criadas:
$ sudo xen-list-images
Name: test-hvm
Memory: 512 MB
Config: /etc/xen/test-hvm.cfg

Name: test-pv
Memory: 512 MB
Config: /etc/xen/test-pv.cfg

# Crie um redirecionamento entre sua máquina e o server Xen:
$ ssh -L 5900:localhost:5900 vagrant@192.168.121.161

# Agora na sua máquina, use um software para conectar via VNC.
# Use apenas 'localhost' como endereço de conexão.

Imagem versus Domínio

No Xen, uma "imagem" refere-se a uma imagem de disco, que é um arquivo que contém uma instalação de um sistema operacional. Geralmente, uma imagem de disco é associada a uma máquina virtual (domínio) e é usada para inicializar e executar o sistema operacional dentro dessa máquina virtual.


Um "domínio" no Xen refere-se a uma máquina virtual, que é uma instância isolada de um sistema operacional em execução em um ambiente virtualizado.


Em resumo, enquanto uma "imagem" se refere a um arquivo que contém uma instalação de sistema operacional, um "domínio" se refere a uma máquina virtual em execução no ambiente virtualizado do Xen, que pode usar uma ou mais imagens de disco para sua operação.



Comandos para Gerenciamento das VMs


É importante conhecer os comandos de gerenciamento das VMs, assim como já foi mostrado mais acima, vou deixar novamente a tabela abaixo.

ComandoDescrição
xl create <config_file>Cria uma nova instância VM usando um arquivo de configuração especificado.
xl listLista todas as VMs em execução.
xl shutdown <vm_name>Desliga uma VM.
xl destroy <vm_name>Destroi uma VM (Deleta ela mantendo os discos).
xl pause <vm_name>Pausa a execução de uma VM.
xl unpause <vm_name>Retoma a execução de uma VM pausada.
xl reboot <vm_name>Reinicia uma VM especificada.
xl vcpu-list <vm_name>Lista as VCPUs de uma VM especificada.
xl infoExibe informações sobre o host Xen.
xl uptimeExibe informações sobre o uptime para as VMs em execução.
xl dmesgExibe mensagens de registro do Xen.
xl console <vm_name>Conecta-se ao console de uma VM especificada.
xl topExibe estatísticas em tempo real sobre as VMs.
xl mem-set <vm_name> <memory>Define a quantidade de memória de uma VM.
xl cpupool-listLista os cpupools disponíveis.
xl cpupool-create name=<pool_name>Cria um novo cpupool com o nome especificado.
xl cpupool-destroy <pool_name>Destroi um cpupool especificado.
xl cpupool-info <pool_name>Exibe informações sobre um cpupool.
xl cpupool-list-cpus <pool_name>Lista as CPUs atribuídas a um cpupool.
xl save <vm_name> <save_file>Salva o estado da VM em um arquivo especificado.
xl restore <save_file>Restaura uma VM a partir de um arquivo de salvamento especificado.

O comando xl list mostra alguns dados das VMs, dentre eles temos o State. Esse campo lista 6 estados para um domínio Xen e em quais deles o domínio atual está.

EstadoDescrição
rO domínio está atualmente em execução em uma CPU.
bO domínio está bloqueado e não está em execução ou pronto para execução. Isso pode ocorrer quando o domínio está aguardando E/S ou entrou em um estado de espera por falta de tarefas a serem executadas.
pO domínio foi pausado, geralmente pelo administrador usando o comando xl pause. Quando em estado de pausa, o domínio ainda consome recursos alocados (como memória), mas não está elegível para agendamento pelo hipervisor Xen.
sO sistema operacional convidado foi desligado (a chamada SCHEDOP_shutdown foi feita), mas o domínio ainda não está encerrado.
cO domínio falhou, o que sempre é um término violento. Normalmente, este estado só ocorre se o domínio estiver configurado para não reiniciar após uma falha. Consulte xl.cfg(5) para obter mais informações.
dO domínio está no processo de encerramento, mas ainda não foi completamente desligado ou falhou.


Xenstore


Também temos a tabela abaixo que mostra comandos para gerenciamento do xenstore. O xenstore é um mecanismo de comunicação e armazenamento de dados utilizado pelo Xen para compartilhar informações entre os domínios (VMs) e o hypervisor.

ComandoDescrição
xenstore-lsLista todas as chaves e valores no Xenstore.
xenstore-read <path>Lê o valor associado a uma chave específica.
xenstore-write <path> <value>Escreve um valor em uma chave específica.
xenstore-rm <path>Remove uma chave e seu valor do Xenstore.
xenstore-mkdir <path>Cria um novo diretório no Xenstore.
xenstore-watch <path>Aguarda uma alteração em uma chave específica.
xenstore-chmod <path> <perms>Altera as permissões de uma chave no Xenstore.
xenstore-exists <path>Verifica se uma chave específica existe no Xenstore.
xenstore-updateAtualiza o cache do Xenstore.


Gerenciando discos


Precisamos aprender como gerenciar os discos dos domínios (VMs) no Xen. A tabela abaixo representa os comandos mais comuns.

ComandoDescrição
xl block-list <vm_name>Lista todos os dispositivos de bloco associados a uma máquina virtual específica.
xl block-attach <vm_name> <backend_type> <backend_spec>Anexa um dispositivo de bloco a uma máquina virtual, onde <backend_type> é o tipo de backend (por exemplo, file, phy, tap, etc.) e <backend_spec> é a especificação do backend (por exemplo, o caminho do arquivo, o dispositivo físico, etc.).
xl list -l <vm_name>Podemos usar esse comando para ver os vdev que serão usados para desconectar os discos.
xl block-detach <vm_name> <vdev>Desanexa um dispositivo de bloco de uma máquina virtual, onde <device> é o nome do dispositivo.
xl block-create <vm_name> <backend_type> <backend_spec> <device>Cria um novo dispositivo de bloco e o anexa a uma máquina virtual, onde <backend_type> e <backend_spec> são como descritos acima, e <device> é o nome do dispositivo a ser criado.
xl block-params <vm_name> <device>Exibe os parâmetros de configuração de um dispositivo de bloco específico em uma máquina virtual.
xl cd-eject <vm_name> <vdev>Ejecta o cdrom da VM (não remove o device, apenas ejeta o cdrom).
xl cd-insert <vm_name> hdc <cdrom_path>"Insere" o cdrom na VM (não adicione um device novo, apenas insere o cdrom, fazendo a VM reconhecer).


Fontes


https://www.lpi.org/blog/2020/10/01/xen-virtualization-and-cloud-computing-01-introduction/

https://www.lpi.org/blog/2020/10/08/xen-virtualization-and-cloud-computing-02-how-xen-does-job/

https://www.lpi.org/blog/2020/10/15/xen-virtualization-and-cloud-computing-03-key-features-xen/

https://www.lpi.org/blog/2020/10/22/xen-virtualization-and-cloud-computing-04-containers-openstack-and-other-related/

https://www.lpi.org/blog/2020/10/29/xen-virtualization-and-cloud-computing-05-xen-project-unikernels-and-future/

https://www.youtube.com/watch?v=X1XMc755NjI

https://wiki.xenproject.org/wiki/Xen_Project_Software_Overview

https://xenbits.xenproject.org/docs/unstable/index.html

https://xenbits.xenproject.org/docs/unstable/admin-guide/introduction.html

https://wiki.debian.org/BridgeNetworkConnections#Bridging_Network_Connections

https://wiki.debian.org/NetworkConfiguration#Bridging

https://www.howtogeek.com/devops/how-to-enable-nested-kvm-virtualization/