Saltar para o conteúdo
101 · LPIC-1 (parte 1)

Linux virtualizado

TópicoT09ObjetivoLinux virtualizadoPeso1PáginasLPIC-1 (101) - Version 5.0

Resumo Conciso

Virtualização — Conceitos

ConceitoDescrição
HipervisorPlataforma de software que executa sistemas virtuais emulados
Guest (Convidado)Máquina virtual em execução no hipervisor
Host (Hospedeiro)Máquina física que executa o hipervisor
MigraçãoMover VM de um hipervisor para outro
Migração ao vivoMigração com o convidado em execução

Tipos de Hipervisores

HipervisorTipoObservações
XenTipo 1 (bare-metal)Código aberto; não depende de SO subjacente
KVMTipo 1 e Tipo 2Módulo do kernel Linux; usa libvirt e QEMU
VirtualBoxTipo 2Desktop multiplataforma (Linux, macOS, Windows); Oracle

Tipos de Máquina Virtual

TipoDescriçãoDesempenho
Totalmente virtualizadoSO convidado não sabe que é VM; requer extensões Intel VT-x ou AMD-VNormal
ParavirtualizadoSO convidado está ciente da VM; usa kernel modificado + drivers convidadosMelhor
HíbridoCombina os dois; drivers paravirtualizados em SO totalmente virtualizadoQuase nativo (E/S)

Drivers Convidados

PlataformaDrivers
KVMProjeto Virtio
VirtualBoxExtensões de Convidado (ISO)

Armazenamento de Disco de VMs

FormatoDescriçãoDesempenho
COW (qcow2)Copy-on-write; tamanho aumenta conforme dados são gravados; sparse imagesMenor (sobrecarga de monitoramento)
RAWEspaço pré-alocado; arquivo = tamanho total desde o inícioMaior

Local padrão (KVM/libvirt): /var/lib/libvirt/images/

D-Bus Machine ID

  • Número de identificação único gerado na instalação
  • Local: /var/lib/dbus/machine-id (link para /etc/machine-id)
  • Duas VMs não devem ter o mesmo ID
bash
# Verificar se existe IDdbus-uuidgen --ensure# Obter ID atualdbus-uuidgen --get# Gerar novo ID (em clone)sudo rm -f /etc/machine-idsudo dbus-uuidgen --ensure=/etc/machine-id

Cloud IaaS — Elementos-Chave

ElementoDescrição
Instâncias de computaçãoTempo de CPU cobrado; número de VMs provisionadas
Armazenamento em blocoNíveis variados; acesso rápido = mais caro; dados repouso = barato
RedeSub-redes, rotas, firewalls, DNS, VPN (conexão híbrida)

Acesso Seguro (SSH)

bash
# Gerar par de chavesssh-keygen# Copiar chave pública para servidorssh-copy-id -i <public_key> user@cloud_server
  • Chave privada: ~/.ssh/ (permissão 0600)
  • Chave pública: permissão 0644

cloud-init

  • Ferramenta neutra (independente de fornecedor) para pré-configurar VMs
  • Arquivos de configuração em YAML (cloud-config)
  • Configura: rede, pacotes, chave SSH, contas de usuário, localidade

Exemplo de arquivo cloud-config:

bash
#cloud-configtimezone: Africa/Dar_es_Salaamhostname: test-systemapt_update: trueapt_upgrade: truepackages:  - nginx
  • Importante: Sem espaço entre # e cloud-config na primeira linha

Contêineres vs Máquinas Virtuais

CaracterísticaMáquina VirtualContêiner
EmulaçãoComputador inteiroApenas software necessário para o aplicativo
SobrecargaAltaBaixa
MigraçãoPode precisar desligarAplicativo permanece em execução
IsolamentoCompleto (hardware emulado)Usa cgroups do kernel Linux
TecnologiasXen, KVM, VirtualBoxDocker, Kubernetes, LXD/LXC, systemd-nspawn, OpenShift

Exemplo de Configuração XML (KVM/libvirt)

Arquivo: /etc/libvirt/qemu/NOMEVM.xml

Campos principais:

  • <memory> — RAM atribuída
  • <vcpu> — Número de núcleos da CPU
  • <disk> — Imagem de disco rígido
  • <graphics> — Recursos de exibição (SPICE/VNC)
  • <interface> — Configuração de rede
  • <emulator> — Caminho para QEMU (/usr/bin/qemu-system-x86_64)

Rede padrão: /etc/libvirt/qemu/networks/default.xml

  • Rede privada Classe C com NAT
  • DHCP: 192.168.122.2 a 192.168.122.254

Comandos Essenciais

ComandoFunção
dbus-uuidgen --ensureVerificar/criar D-Bus machine ID
dbus-uuidgen --getObter D-Bus machine ID atual
ssh-keygenGerar par de chaves SSH
ssh-copy-idCopiar chave pública para servidor remoto
cloud-initPré-configurar VMs/contêineres em nuvem

Exercícios Exploratórios

Exercício Exploratório 1 — Verificar extensões de CPU

Enunciado: Execute o seguinte comando para ver se seu sistema já tem extensões de CPU habilitadas para rodar uma máquina virtual:

bash
grep --color -E "vmx|svm" /proc/cpuinfo

Dependendo da saída, vmx pode estar realçado (Intel VT-x) ou svm (AMD SVM).

Os resultados variam dependendo da sua CPU. Eis um exemplo de saída de um computador com uma CPU Intel com extensões de virtualização habilitadas no firmware UEFI:

bash
$ grep --color -E "vmx|svm" /proc/cpuinfoflags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tscart arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pnipclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmiflexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtmmpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida aratpln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d

Exercício Exploratório 2 — Instalar e configurar KVM

Enunciado: Se o seu processador suporta virtualizações, procure a documentação da sua distribuição para executar um hipervisor KVM.

Instalar pacotes KVM:

Instalar virt-manager (desktop gráfico):

bash
sudo apt install virt-manager

Criar VM: Baixe uma ISO de distribuição Linux e crie uma nova VM usando virt-manager ou virt-install pela linha de comando.

Exercício Exploratório 3 — Listar máquinas virtuais KVM

Enunciado: Se tiver KVM/libvirt instalado, use os comandos da linha de comando para listar as máquinas virtuais disponíveis e mostrar o seu estado.

bash
# Listar todas as VMs (incluindo desligadas)sudo virsh list --all# Listar apenas VMs em execuçãosudo virsh list# Mostrar informações detalhadas de uma VM específicasudo virsh dominfo <nome-da-vm># Listar as redes virtuais disponíveissudo virsh net-list --all

O comando virsh é a ferramenta de linha de comando para gerenciar VMs no libvirt/KVM.

Exercício Exploratório 4 — Verificar e gerar D-Bus Machine ID

Enunciado: Verifique se o seu sistema tem um D-Bus Machine ID configurado e, se não tiver, gere um novo. Em seguida, verifique o resultado.

bash
# Verificar se já existe um machine-idls -l /etc/machine-id# Obter o valor atualdbus-uuidgen --get# Garantir que o machine-id existe (cria se não existir)sudo dbus-uuidgen --ensure# Em um clone, gerar um novo ID únicosudo rm -f /etc/machine-idsudo dbus-uuidgen --ensure=/etc/machine-id# Verificar o novo IDcat /etc/machine-id

Cada VM/clonada deve ter um D-Bus Machine ID único para evitar conflitos de identificação.