Post

Instalação do KVM no Oracle Linux 7: Guia Completo e Reorganizado

Tutorial completo e reorganizado para instalação e configuração do KVM no Oracle Linux 7, especialmente desenvolvido para servidores IBM x3550 M2 e hardware legado.

Instalação do KVM no Oracle Linux 7: Guia Completo e Reorganizado

Índice

  1. Introdução e Visão Geral
  2. Preparação e Pré-requisitos
  3. Configuração Base do Sistema
  4. Configuração de Armazenamento
  5. Configuração Avançada e Acesso Remoto
  6. Criação e Gerenciamento de Máquinas Virtuais
  7. Monitoramento e Manutenção
  8. Apêndices

1. Introdução e Visão Geral

1.1 Sobre este Tutorial

Este tutorial detalhado foi desenvolvido para guiar administradores de sistema, engenheiros de DevOps e entusiastas de virtualização através do processo completo de instalação e configuração do Kernel-based Virtual Machine (KVM) em um ambiente Oracle Linux 7. O documento foi estruturado de forma progressiva, permitindo tanto o aprendizado sequencial quanto o uso como material de referência para configurações específicas.

Tempo Estimado de Conclusão: 4-6 horas (dependendo da experiência prévia)

Nível de Dificuldade: Intermediário a Avançado

Versão do Tutorial: 2.0 (Reorganizada)

Última Atualização: Junho 2025

1.2 Por que KVM no Oracle Linux 7?

O KVM (Kernel-based Virtual Machine) é uma solução de virtualização de código aberto que transforma o Linux em um hypervisor de tipo 1 (bare-metal), permitindo a execução de múltiplas máquinas virtuais isoladas e de alto desempenho. Sua integração direta com o kernel Linux confere vantagens significativas em termos de performance, segurança e escalabilidade.

Contexto de Hardware e Compatibilidade:

Este tutorial foi desenvolvido especificamente para um servidor IBM x3550 M2, uma plataforma robusta e confiável que, embora não seja mais considerada de última geração, ainda oferece capacidades adequadas para virtualização. Uma consideração importante na escolha do Oracle Linux 7 foi a compatibilidade de hardware: o IBM x3550 M2 não atende aos requisitos mínimos de hardware das versões mais recentes do Oracle Linux (versões 8 e 9), que demandam processadores e chipsets mais modernos.

Esta situação é comum em muitos ambientes corporativos, onde servidores mais antigos, mas ainda funcionais, precisam ser aproveitados para projetos de virtualização. O Oracle Linux 7 representa uma escolha pragmática que equilibra funcionalidades modernas de virtualização com compatibilidade de hardware legado.

Vantagens da Combinação KVM + Oracle Linux 7:

O Oracle Linux 7, com seu Kernel Inquebrável (Unbreakable Enterprise Kernel - UEK), oferece uma plataforma otimizada para virtualização que funciona perfeitamente em hardware mais antigo. A combinação do KVM com o Oracle Linux 7 proporciona uma base sólida para a criação de infraestruturas virtualizadas eficientes e confiáveis, mesmo em servidores que não suportam as versões mais recentes do sistema operacional. O KVM aproveita os recursos de virtualização de hardware (Intel VT-x ou AMD-V) presentes nos processadores do IBM x3550 M2, garantindo que as VMs operem com desempenho próximo ao nativo.

Principais Benefícios desta Combinação:

  • Performance Superior: Aproveitamento direto das extensões de virtualização do hardware
  • Segurança Robusta: Isolamento completo entre VMs através do kernel Linux
  • Escalabilidade: Suporte a grandes quantidades de VMs e recursos
  • Custo-Benefício: Solução enterprise sem custos de licenciamento de hypervisor
  • Flexibilidade: Suporte a diversos sistemas operacionais guest
  • Integração: Compatibilidade nativa com ferramentas de gerenciamento Linux

1.3 Arquitetura e Conceitos

Antes de iniciar a implementação, é fundamental compreender a arquitetura do KVM e os componentes envolvidos na solução de virtualização.

Componentes Principais:

KVM (Kernel-based Virtual Machine): Módulo do kernel Linux que fornece a infraestrutura de virtualização básica. Atua como um hypervisor de tipo 1, executando diretamente sobre o hardware e gerenciando o acesso das VMs aos recursos físicos.

QEMU (Quick Emulator): Emulador de máquina que trabalha em conjunto com o KVM para fornecer virtualização de dispositivos e gerenciamento de VMs. Quando usado com KVM, o QEMU atua como um processo userspace que gerencia cada VM individual.

Libvirt: Biblioteca e conjunto de ferramentas que fornecem uma interface comum para gerenciar diferentes tecnologias de virtualização. O daemon libvirtd atua como uma camada de abstração, permitindo gerenciamento unificado através de diversas ferramentas.

Virt-Manager: Interface gráfica para gerenciamento de máquinas virtuais que utiliza libvirt como backend. Oferece uma experiência visual intuitiva para criação, configuração e monitoramento de VMs.

Bridge Networking: Configuração de rede que permite às VMs se conectarem diretamente à rede física do host, comportando-se como dispositivos independentes na rede local.

A arquitetura resultante oferece uma solução completa e integrada, onde o KVM fornece a virtualização de hardware, o QEMU gerencia os dispositivos virtuais, o libvirt oferece APIs de gerenciamento padronizadas, e ferramentas como virt-manager proporcionam interfaces amigáveis para administração.


2. Preparação e Pré-requisitos

2.1 Requisitos de Hardware

Para uma implementação bem-sucedida do KVM no Oracle Linux 7, é essencial que o hardware atenda aos requisitos mínimos e recomendados. A virtualização eficiente depende significativamente das capacidades do hardware subjacente.

Requisitos Mínimos:

  • Processador: CPU x86_64 com suporte a virtualização (Intel VT-x ou AMD-V)
  • Memória RAM: 4GB (mínimo absoluto), sendo 2GB para o host e 2GB para VMs
  • Armazenamento: 50GB de espaço livre em disco
  • Rede: Interface de rede Ethernet funcional

Requisitos Recomendados:

  • Processador: CPU multi-core com suporte a virtualização e tecnologias avançadas (EPT/NPT)
  • Memória RAM: 16GB ou superior (permite múltiplas VMs simultâneas)
  • Armazenamento: 500GB ou superior, preferencialmente SSD para melhor performance
  • Rede: Múltiplas interfaces de rede para separação de tráfego

Verificação de Compatibilidade do Processador:

Antes de prosseguir, verifique se seu processador possui e tem habilitado o suporte a virtualização de hardware:

1
egrep --color -i "svm|vmx" /proc/cpuinfo

Interpretação dos Resultados:

Se o comando retornar linhas contendo vmx (processadores Intel) ou svm (processadores AMD), o suporte a virtualização está presente e habilitado. A ausência de saída indica que a virtualização pode estar desabilitada na BIOS/UEFI ou não estar disponível no processador.

Exemplo de Saída Esperada:

1
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm ssbd rsb_ctxsw ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid dtherm spec_ctrl intel_stibp flush_l1d

2.2 Requisitos de Software

Sistema Operacional Base:

  • Oracle Linux 7 (com UEK ou Red Hat Compatible Kernel - RHCK)
  • Sistema atualizado com patches de segurança mais recentes
  • Acesso aos repositórios oficiais Oracle Linux

Privilégios de Acesso:

  • Acesso root ou usuário com privilégios sudo configurados
  • Capacidade de modificar configurações de rede do sistema
  • Permissões para instalar pacotes e modificar configurações do sistema

Conectividade:

  • Conexão ativa com a internet para download de pacotes
  • Acesso aos repositórios Oracle Linux (ol7_latest, ol7_optional)
  • Largura de banda suficiente para download de ISOs de sistemas operacionais

Conhecimentos Prévios Recomendados:

  • Familiaridade com comandos básicos do Linux
  • Compreensão de conceitos de rede (IP, gateway, DNS)
  • Experiência básica com gerenciamento de usuários e permissões Linux
  • Conhecimento fundamental sobre virtualização (desejável)

2.3 Verificação de Compatibilidade

Antes de iniciar a instalação, execute uma série de verificações para garantir que o ambiente está adequadamente preparado.

Verificação do Sistema Operacional:

1
2
cat /etc/oracle-release
uname -r

Verificação de Recursos do Sistema:

1
2
3
4
5
6
7
8
# Verificar memória disponível
free -h

# Verificar espaço em disco
df -h

# Verificar informações do processador
lscpu | grep -E "Model name|CPU\(s\)|Virtualization"

Verificação de Conectividade:

1
2
3
4
5
# Testar conectividade com repositórios
ping -c 3 yum.oracle.com

# Verificar configuração de DNS
nslookup yum.oracle.com

Verificação de Privilégios:

1
2
3
4
5
# Verificar acesso sudo (se não estiver como root)
sudo whoami

# Verificar grupos do usuário
groups

2.4 Preparação Inicial do Sistema

Com as verificações concluídas, proceda com a preparação inicial do sistema para a instalação do KVM.

Atualização do Sistema:

1
sudo yum update -y

Instalação de Ferramentas Básicas:

1
sudo yum install -y wget curl vim net-tools lsof

Configuração de Firewall (se necessário):

1
2
3
4
5
6
# Verificar status do firewall
sudo systemctl status firewalld

# Se o firewall estiver ativo, configure as regras necessárias
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

Verificação de Módulos do Kernel:

1
2
3
4
# Verificar se o módulo KVM está disponível
modinfo kvm
modinfo kvm_intel  # Para processadores Intel
modinfo kvm_amd    # Para processadores AMD

Com a preparação inicial concluída, o sistema está pronto para a instalação e configuração do KVM. As próximas seções abordarão a configuração específica dos componentes necessários para um ambiente de virtualização funcional e otimizado.


3. Configuração Base do Sistema

3.1 Configuração de Hostname

A definição de um hostname claro e descritivo é uma prática fundamental para qualquer servidor, tornando-se ainda mais crucial em ambientes de virtualização onde múltiplos hosts KVM podem estar operando simultaneamente. Um hostname significativo facilita a identificação do servidor na rede, simplifica a gestão e o monitoramento, além de ser essencial para a configuração de serviços que dependem da resolução de nomes.

Importância do Hostname em Ambientes de Virtualização:

Em infraestruturas virtualizadas, o hostname serve como identificador único que permite distinguir entre diferentes hosts de virtualização, facilitando operações de gerenciamento, monitoramento e troubleshooting. Além disso, muitas ferramentas de gerenciamento de virtualização utilizam o hostname para identificar e organizar recursos em interfaces gráficas e relatórios.

Configuração do Hostname:

Para definir o hostname do seu servidor KVM, utilize o comando hostnamectl, que é a ferramenta padrão no Oracle Linux 7 para gerenciamento de hostname:

1
sudo hostnamectl set-hostname kvm-01

Verificação da Configuração:

Após a configuração, verifique se o hostname foi definido corretamente:

1
hostnamectl status

Exemplo de Saída Esperada:

1
2
3
4
5
6
7
8
9
   Static hostname: kvm-01
         Icon name: computer-server
           Chassis: server
        Machine ID: a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
           Boot ID: z9y8x7w6v5u4t3s2r1q0p9o8n7m6l5k4
  Operating System: Oracle Linux Server 7.9
       CPE OS Name: cpe:/o:oracle:linux:7:9:server
            Kernel: Linux 4.14.35-2047.511.5.3.el7uek.x86_64
      Architecture: x86-64

Persistência da Configuração:

O comando hostnamectl automaticamente atualiza os arquivos de configuração necessários (/etc/hostname e /etc/hosts) para garantir que a mudança seja persistente após reinicializações. No entanto, é recomendável verificar se o arquivo /etc/hosts contém uma entrada apropriada:

1
cat /etc/hosts

Certifique-se de que existe uma linha similar a:

1
127.0.0.1   localhost localhost.localdomain kvm-01

3.2 Configuração de Rede Bridge

A configuração de uma rede bridge (ponte de rede) é um componente fundamental para o funcionamento adequado do KVM. A bridge permite que as máquinas virtuais se conectem diretamente à rede física do host, comportando-se como dispositivos independentes na mesma rede local. Isso significa que as VMs receberão endereços IP da sua rede e poderão se comunicar com outros dispositivos na rede externa, como se fossem máquinas físicas separadas.

Conceitos Fundamentais da Bridge:

Uma bridge de rede atua como um switch virtual, encaminhando o tráfego entre a interface de rede física do host e as interfaces de rede virtuais das VMs. Esta configuração oferece várias vantagens:

  • Conectividade Direta: VMs podem acessar a rede externa sem NAT
  • Endereçamento Independente: Cada VM pode ter seu próprio IP na rede local
  • Performance Superior: Menor overhead comparado a soluções NAT
  • Flexibilidade: Facilita configurações de rede complexas

Identificação da Interface de Rede:

Antes de configurar a bridge, é crucial identificar a interface de rede física que está ativa e conectada à sua rede. O nome da interface pode variar dependendo do hardware e da configuração do sistema.

1
ip addr show

ou

1
nmcli device status

Exemplo de Saída:

1
2
3
DEVICE      TYPE      STATE      CONNECTION
enp11s0f0   ethernet  connected  enp11s0f0
lo          loopback  unmanaged  --

Procure por uma interface que tenha o estado connected e anote o nome (no exemplo, enp11s0f0) para usar nos comandos seguintes.

Configuração da Bridge com NetworkManager:

O Oracle Linux 7 utiliza o NetworkManager para gerenciamento de rede. Os comandos nmcli (NetworkManager Command Line Interface) serão utilizados para configurar a bridge de forma persistente e integrada ao sistema.

Passo 1: Criação da Bridge

1
sudo nmcli con add type bridge con-name br0 ifname br0

Este comando cria uma nova conexão do tipo bridge com o nome br0 e associa a interface virtual br0 a ela.

Passo 2: Configuração de Endereçamento IP

1
2
3
4
sudo nmcli con modify br0 ipv4.addresses 192.168.0.250/24
sudo nmcli con modify br0 ipv4.gateway 192.168.0.1
sudo nmcli con modify br0 ipv4.dns 192.168.0.1
sudo nmcli con modify br0 ipv4.method manual

IMPORTANTE: Substitua os endereços IP pelos valores apropriados para sua rede:

  • 192.168.0.250/24: Endereço IP e máscara que você deseja atribuir ao host KVM
  • 192.168.0.1: Endereço IP do seu gateway de rede
  • 192.168.0.1: Endereço IP do seu servidor DNS

Passo 3: Adição da Interface Física à Bridge

1
sudo nmcli con add type bridge-slave ifname enp11s0f0 master br0

Substitua enp11s0f0 pelo nome da sua interface identificada anteriormente.

Passo 4: Configuração de Inicialização Automática

1
2
sudo nmcli con modify br0 connection.autoconnect yes
sudo nmcli con modify bridge-slave-enp11s0f0 connection.autoconnect yes

Passo 5: Ativação da Configuração

1
2
sudo nmcli con up br0
sudo nmcli con up bridge-slave-enp11s0f0

AVISO CRÍTICO SOBRE CONECTIVIDADE:

ATENÇÃO: Ao executar os comandos de ativação da bridge, você perderá temporariamente a conexão SSH com o servidor, pois a interface de rede física será reconfigurada. Execute esta etapa apenas se você tiver:

  • Acesso físico ao servidor ou console remoto (iLO, iDRAC, IPMI)
  • Uma segunda interface de rede configurada para gerenciamento
  • Certeza de que os parâmetros de rede estão corretos

Recomendação: Teste a configuração em um ambiente de laboratório antes de aplicar em produção.

Verificação da Configuração:

Após a ativação da bridge, verifique se a configuração foi aplicada corretamente:

1
2
3
4
5
6
7
8
# Verificar conectividade básica
ping -c 3 192.168.0.250

# Verificar configuração da bridge
nmcli connection show br0

# Verificar interfaces de rede
ip addr show br0

Exemplo de Saída Esperada:

1
2
3
4
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.250/24 brd 192.168.0.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever

Verificação do Arquivo de Configuração:

O NetworkManager gera automaticamente arquivos de configuração que podem ser inspecionados:

1
cat /etc/sysconfig/network-scripts/ifcfg-br0

Exemplo de Conteúdo:

1
2
3
4
5
6
7
8
9
STP=yes
TYPE=Bridge
BOOTPROTO=none
NAME=br0
ONBOOT=yes
IPADDR=192.168.0.250
PREFIX=24
GATEWAY=192.168.0.1
DNS1=192.168.0.1

3.3 Instalação de Pacotes KVM

Com a rede bridge configurada e funcional, o próximo passo é instalar os pacotes necessários para o KVM e suas ferramentas de gerenciamento. O Oracle Linux 7 simplifica este processo através do gerenciador de pacotes yum, que resolve automaticamente as dependências necessárias.

Pacotes Essenciais para KVM:

1
sudo yum install -y qemu-kvm qemu-img libvirt virt-install libvirt-python virt-manager

Detalhamento dos Pacotes Instalados:

qemu-kvm: Este é o pacote principal que fornece o emulador QEMU otimizado para KVM. O QEMU é um emulador de máquina genérico e virtualizador que, quando usado em conjunto com o KVM, pode virtualizar hardware de forma extremamente eficiente, aproveitando as extensões de virtualização do processador para oferecer performance próxima ao nativo.

qemu-img: Ferramenta de linha de comando essencial para criar, converter e gerenciar imagens de disco de máquinas virtuais. Esta ferramenta suporta múltiplos formatos de imagem (qcow2, raw, vmdk, vdi) e oferece funcionalidades avançadas como compressão, criptografia e snapshots.

libvirt: Biblioteca e conjunto de ferramentas que fornecem uma interface comum para gerenciar diferentes tecnologias de virtualização, incluindo KVM, Xen, VMware ESX, entre outros. O daemon libvirtd é o serviço central que gerencia as máquinas virtuais, oferecendo APIs padronizadas para criação, configuração e monitoramento.

virt-install: Ferramenta de linha de comando para criar novas máquinas virtuais de forma automatizada. Simplifica significativamente o processo de configuração inicial da VM, permitindo especificar recursos como CPU, memória, disco e rede através de parâmetros de linha de comando.

libvirt-python: Bindings Python para libvirt, permitindo automação e integração com scripts Python para gerenciamento programático de VMs.

virt-manager: Interface gráfica completa para gerenciamento de máquinas virtuais que utiliza libvirt como backend. Oferece uma experiência visual intuitiva para criação, configuração e monitoramento de VMs, sendo especialmente útil para usuários que preferem interfaces gráficas.

Pacotes Adicionais Recomendados:

1
sudo yum install -y virt-viewer virt-top libguestfs-tools
  • virt-viewer: Cliente para visualização de consoles de VMs
  • virt-top: Ferramenta de monitoramento em tempo real para VMs
  • libguestfs-tools: Conjunto de ferramentas para manipulação de imagens de VM

Verificação da Instalação:

Após a instalação, verifique se os componentes foram instalados corretamente:

1
2
3
4
5
6
7
8
# Verificar versão do libvirt
virsh version

# Verificar disponibilidade do QEMU
qemu-kvm --version

# Verificar módulos do kernel KVM
lsmod | grep kvm

Exemplo de Saída Esperada:

1
2
3
4
5
6
7
8
9
# virsh version
Compiled against library: libvirt 4.5.0
Using library: libvirt 4.5.0
Using API: QEMU 4.5.0
Running hypervisor: QEMU 1.5.3

# lsmod | grep kvm
kvm_intel             183621  0
kvm                   586948  1 kvm_intel

Habilitação e Inicialização do Serviço Libvirtd:

Para que o KVM esteja operacional, o serviço libvirtd deve estar em execução e configurado para iniciar automaticamente na inicialização do sistema:

1
sudo systemctl enable --now libvirtd

Verificação do Status do Serviço:

1
sudo systemctl status libvirtd

Exemplo de Saída Esperada:

1
2
3
4
5
6
7
8
9
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2025-06-18 10:30:15 UTC; 2min 5s ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 1234 (libvirtd)
    Tasks: 19 (limit: 32768)
   CGroup: /system.slice/libvirtd.service
           └─1234 /usr/sbin/libvirtd

3.4 Configuração de Usuários e Permissões

Para gerenciar máquinas virtuais KVM sem a necessidade de usar sudo a cada comando virsh ou operação de gerenciamento, é altamente recomendável configurar adequadamente as permissões de usuário. Esta configuração envolve adicionar usuários aos grupos apropriados e configurar políticas de acesso.

Grupos Relacionados ao KVM:

Primeiro, verifique os grupos existentes relacionados ao KVM no seu sistema:

1
getent group | grep -E 'kvm|qemu|libvirt'

Exemplo de Saída:

1
2
3
kvm:x:36:qemu
qemu:x:107:
libvirt:x:992:

Adição de Usuário aos Grupos:

Adicione o usuário que irá gerenciar as VMs aos grupos necessários:

1
2
sudo usermod -a -G libvirt $(whoami)
sudo usermod -a -G kvm $(whoami)

Para adicionar um usuário específico (substitua username pelo nome do usuário):

1
sudo usermod -a -G libvirt,kvm username

Configuração de Políticas PolicyKit:

O libvirt utiliza PolicyKit para controle de acesso. Crie uma política personalizada para permitir que usuários do grupo libvirt gerenciem VMs sem sudo:

1
2
3
4
5
6
7
8
9
sudo tee /etc/polkit-1/rules.d/50-libvirt.rules > /dev/null << 'EOF'
/* Allow users in libvirt group to manage the libvirt daemon without authentication */
polkit.addRule(function(action, subject) {
    if (action.id == "org.libvirt.unix.manage" &&
        subject.isInGroup("libvirt")) {
            return polkit.Result.YES;
    }
});
EOF

Reinicialização de Serviços:

Após as alterações de configuração, reinicie os serviços necessários:

1
2
sudo systemctl restart polkit
sudo systemctl restart libvirtd

Aplicação das Alterações de Grupo:

Para que as alterações de grupo tenham efeito, o usuário precisa fazer logout e login novamente, ou iniciar uma nova sessão:

1
2
3
4
5
# Para aplicar imediatamente (inicia nova sessão)
newgrp libvirt

# Verificar grupos do usuário atual
id

Verificação da Configuração:

Teste se o usuário pode executar comandos virsh sem sudo:

1
2
3
4
5
# Listar VMs (deve funcionar sem sudo)
virsh list --all

# Verificar conexão com libvirt
virsh uri

Exemplo de Saída Esperada:

1
2
3
4
5
6
# virsh uri
qemu:///system

# virsh list --all
 Id    Name                           State
----------------------------------------------------

Configuração de Acesso Remoto (Opcional):

Se você planeja gerenciar VMs remotamente, configure o acesso SSH para libvirt:

1
2
# Verificar se o usuário pode conectar via SSH
virsh -c qemu+ssh://username@localhost/system list --all

Troubleshooting de Permissões:

Se encontrar problemas de permissão, verifique:

1
2
3
4
5
6
7
8
# Verificar grupos do usuário
groups

# Verificar políticas PolicyKit
pkaction --action-id org.libvirt.unix.manage --verbose

# Verificar logs do libvirt
sudo journalctl -u libvirtd -f

Com a configuração base do sistema concluída, incluindo hostname, rede bridge, instalação de pacotes e configuração de permissões, o ambiente está preparado para a próxima fase: configuração de armazenamento. Esta base sólida garante que o KVM funcione adequadamente e que os usuários tenham as permissões necessárias para gerenciar máquinas virtuais de forma eficiente.


4. Configuração de Armazenamento

4.1 Planejamento de Storage

O planejamento adequado do armazenamento é fundamental para o sucesso de qualquer implementação de virtualização. Em ambientes KVM, a estratégia de storage impacta diretamente na performance, escalabilidade e facilidade de gerenciamento das máquinas virtuais. Esta seção aborda o planejamento e implementação de uma solução de armazenamento robusta utilizando LVM (Logical Volume Manager) para máxima flexibilidade.

Considerações de Design de Storage:

O design de storage para virtualização deve considerar diversos fatores que influenciam tanto a performance quanto a operacionalidade do ambiente. A separação lógica de diferentes tipos de dados (imagens de VMs, templates, ISOs) facilita o gerenciamento, backup e monitoramento. Além disso, o uso de LVM proporciona flexibilidade para redimensionamento dinâmico de volumes conforme a demanda evolui.

Cenário de Implementação:

Para este tutorial, consideramos um cenário com três discos de 300GB cada, totalizando 900GB de armazenamento bruto. Esta configuração é típica em servidores como o IBM x3550 M2, onde múltiplos discos podem ser configurados para diferentes propósitos. A estratégia adotada utiliza LVM para criar uma camada de abstração que permite gerenciamento flexível do espaço de armazenamento.

Estrutura de Armazenamento Proposta:

ComponenteTamanhoPropósitoLocalização
lv-images640GBImagens de VMs e dados dinâmicos/datastore/images
lv-templates32GBTemplates de sistemas operacionais/datastore/templates
lv-isos16GBArquivos ISO de instalação/datastore/isos
Espaço Livre~212GBExpansão futura e snapshotsVolume Group

Esta distribuição garante espaço adequado para operação normal, mantendo reserva significativa para crescimento futuro e operações que requerem espaço temporário, como snapshots e clonagem de VMs.

Verificação dos Discos Disponíveis:

Antes de iniciar a configuração, identifique os discos disponíveis no sistema:

1
2
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
fdisk -l | grep "Disk /dev/sd"

Exemplo de Saída Esperada:

1
2
3
Disk /dev/sdb: 300.0 GB, 300000000000 bytes, 585937500 sectors
Disk /dev/sdc: 300.0 GB, 300000000000 bytes, 585937500 sectors
Disk /dev/sdd: 300.0 GB, 300000000000 bytes, 585937500 sectors

4.2 Configuração LVM

O Logical Volume Manager (LVM) é uma tecnologia de gerenciamento de armazenamento que adiciona uma camada de abstração entre o sistema de arquivos e os dispositivos de armazenamento físico. Esta abstração oferece flexibilidade significativa para redimensionamento, migração e gerenciamento de volumes, características essenciais em ambientes de virtualização.

Vantagens do LVM para Virtualização:

O LVM oferece benefícios específicos para ambientes de virtualização que justificam sua adoção mesmo em configurações mais simples. A capacidade de redimensionar volumes dinamicamente permite ajustar o armazenamento conforme as necessidades das VMs evoluem. Além disso, recursos como snapshots facilitam operações de backup e teste, enquanto a possibilidade de mover volumes entre dispositivos físicos oferece flexibilidade para manutenção e upgrades de hardware.

Passo 1: Preparação dos Physical Volumes (PVs)

O primeiro passo na configuração LVM é preparar os discos físicos como Physical Volumes. Este processo inicializa os discos para uso com LVM, criando metadados necessários para o gerenciamento:

1
sudo pvcreate /dev/sdb /dev/sdc /dev/sdd

Verificação dos Physical Volumes:

1
2
sudo pvs
sudo pvdisplay

Exemplo de Saída:

1
2
3
4
  PV         VG   Fmt  Attr PSize   PFree  
  /dev/sdb        lvm2 ---  279.40g 279.40g
  /dev/sdc        lvm2 ---  279.40g 279.40g
  /dev/sdd        lvm2 ---  279.40g 279.40g

Passo 2: Criação do Volume Group (VG)

O Volume Group agrupa múltiplos Physical Volumes em um pool único de armazenamento. Esta agregação permite que Logical Volumes utilizem espaço de múltiplos discos físicos de forma transparente:

1
sudo vgcreate vg-datastore /dev/sdb /dev/sdc /dev/sdd

Verificação do Volume Group:

1
2
sudo vgs
sudo vgdisplay vg-datastore

Exemplo de Saída:

1
2
  VG           #PV #LV #SN Attr   VSize   VFree  
  vg-datastore   3   0   0 wz--n- 838.19g 838.19g

Passo 3: Criação dos Logical Volumes (LVs)

Com o Volume Group configurado, proceda com a criação dos Logical Volumes conforme o planejamento estabelecido. Cada volume será dedicado a um tipo específico de dados, facilitando gerenciamento e monitoramento:

1
2
3
4
5
6
7
8
# Volume para imagens de VMs (640GB)
sudo lvcreate -n lv-images -L 640G vg-datastore

# Volume para templates (32GB)
sudo lvcreate -n lv-templates -L 32G vg-datastore

# Volume para ISOs (16GB)
sudo lvcreate -n lv-isos -L 16G vg-datastore

Verificação dos Logical Volumes:

1
2
sudo lvs
sudo lvdisplay

Exemplo de Saída:

1
2
3
4
  LV           VG           Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv-images    vg-datastore -wi-a----- 640.00g                                                    
  lv-isos      vg-datastore -wi-a-----  16.00g                                                    
  lv-templates vg-datastore -wi-a-----  32.00g

Passo 4: Formatação com Sistema de Arquivos XFS

O XFS é um sistema de arquivos de alto desempenho especialmente adequado para cargas de trabalho de virtualização. Suas características incluem excelente performance para operações de I/O intensivo, suporte nativo a grandes volumes e recursos avançados de gerenciamento:

1
2
3
sudo mkfs.xfs /dev/vg-datastore/lv-images
sudo mkfs.xfs /dev/vg-datastore/lv-templates
sudo mkfs.xfs /dev/vg-datastore/lv-isos

Passo 5: Criação da Estrutura de Diretórios

Crie a estrutura de diretórios que servirá como ponto de montagem para os volumes LVM:

1
sudo mkdir -p /datastore/{images,templates,isos}

Passo 6: Montagem dos Volumes

Monte os volumes com opções otimizadas para performance em ambientes de virtualização:

1
2
3
4
5
6
# Montagem com opções de performance para imagens de VMs
sudo mount -o noatime,nodiratime,logbufs=8 /dev/vg-datastore/lv-images /datastore/images

# Montagem padrão para templates e ISOs
sudo mount /dev/vg-datastore/lv-templates /datastore/templates
sudo mount /dev/vg-datastore/lv-isos /datastore/isos

Explicação das Opções de Montagem:

  • noatime: Desabilita atualização de access time, reduzindo operações de escrita desnecessárias
  • nodiratime: Desabilita atualização de access time para diretórios
  • logbufs=8: Aumenta o número de buffers de log para melhor performance em operações intensivas

Passo 7: Configuração de Montagem Automática

Para garantir que os volumes sejam montados automaticamente na inicialização do sistema, adicione entradas ao arquivo /etc/fstab:

1
2
3
4
5
6
7
# Backup do fstab original
sudo cp /etc/fstab /etc/fstab.backup

# Adição das entradas de montagem
echo "/dev/vg-datastore/lv-images /datastore/images xfs noatime,nodiratime,logbufs=8 0 0" | sudo tee -a /etc/fstab
echo "/dev/vg-datastore/lv-templates /datastore/templates xfs defaults 0 0" | sudo tee -a /etc/fstab
echo "/dev/vg-datastore/lv-isos /datastore/isos xfs defaults 0 0" | sudo tee -a /etc/fstab

Verificação da Configuração de Montagem:

1
2
3
4
5
6
# Testar montagem automática
sudo umount /datastore/*
sudo mount -a

# Verificar se todos os volumes foram montados
df -h | grep datastore

4.3 Pools de Armazenamento Libvirt

O libvirt utiliza o conceito de pools de armazenamento para organizar e gerenciar diferentes tipos de storage de forma centralizada. Os pools fornecem uma abstração que permite ao libvirt gerenciar volumes de armazenamento independentemente da tecnologia subjacente, seja ela baseada em arquivos, LVM, iSCSI ou outras soluções.

Conceitos de Storage Pools:

Um storage pool no libvirt é uma quantidade de armazenamento reservada para uso por máquinas virtuais. Cada pool pode conter múltiplos volumes, que são as unidades individuais de armazenamento utilizadas pelas VMs. Esta organização hierárquica facilita o gerenciamento, permite aplicação de políticas específicas e simplifica operações como backup e monitoramento.

Configuração dos Pools Libvirt:

Com a estrutura LVM configurada e montada, proceda com a criação dos pools libvirt correspondentes:

Pool para Imagens de VMs:

1
2
3
sudo virsh pool-define-as images dir - - - - "/datastore/images"
sudo virsh pool-start images
sudo virsh pool-autostart images

Pool para Templates:

1
2
3
sudo virsh pool-define-as templates dir - - - - "/datastore/templates"
sudo virsh pool-start templates
sudo virsh pool-autostart templates

Pool para ISOs:

1
2
3
sudo virsh pool-define-as isos dir - - - - "/datastore/isos"
sudo virsh pool-start isos
sudo virsh pool-autostart isos

Verificação dos Pools:

1
virsh pool-list --all

Exemplo de Saída Esperada:

1
2
3
4
5
6
 Name        State    Autostart
---------------------------------
 default     active   yes
 images      active   yes
 isos        active   yes
 templates   active   yes

Informações Detalhadas dos Pools:

1
2
3
virsh pool-info images
virsh pool-info templates
virsh pool-info isos

4.4 Configuração de Permissões SELinux

O Security-Enhanced Linux (SELinux) é um sistema de controle de acesso obrigatório que adiciona uma camada adicional de segurança ao Oracle Linux. Para que o libvirt funcione adequadamente com os novos diretórios de armazenamento, é necessário configurar os contextos SELinux apropriados.

Instalação de Ferramentas SELinux:

Primeiro, certifique-se de que as ferramentas necessárias para gerenciamento de contextos SELinux estão instaladas:

1
sudo yum install -y policycoreutils-python

Configuração de Contextos SELinux:

Aplique os contextos SELinux apropriados para os diretórios de armazenamento:

1
2
3
4
5
6
7
8
9
# Configurar contexto para imagens e templates de VMs
sudo semanage fcontext -a -t virt_image_t "/datastore/images(/.*)?"
sudo semanage fcontext -a -t virt_image_t "/datastore/templates(/.*)?"

# Configurar contexto para ISOs
sudo semanage fcontext -a -t virt_content_t "/datastore/isos(/.*)?"

# Aplicar os contextos configurados
sudo restorecon -Rv /datastore

Verificação dos Contextos SELinux:

1
ls -laZ /datastore/{images,templates,isos}

Exemplo de Saída Esperada:

1
2
3
drwxr-xr-x. root libvirt unconfined_u:object_r:virt_image_t:s0 images
drwxr-xr-x. root libvirt unconfined_u:object_r:virt_image_t:s0 templates
drwxr-xr-x. root libvirt unconfined_u:object_r:virt_content_t:s0 isos

Configuração de Permissões de Arquivo:

Ajuste as permissões de arquivo para permitir acesso adequado ao libvirt:

1
2
3
4
5
6
7
8
# Configurar propriedade e grupo
sudo chown -R root:libvirt /datastore/images
sudo chown -R root:libvirt /datastore/templates
sudo chown -R root:libvirt /datastore/isos

# Configurar permissões
sudo chmod 775 /datastore/{images,templates}
sudo chmod 755 /datastore/isos

Verificação Final da Configuração:

Execute uma verificação completa para garantir que toda a configuração de armazenamento está funcionando adequadamente:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Verificar montagem dos volumes
df -h | grep datastore

# Verificar pools libvirt
virsh pool-list --all

# Verificar espaço disponível no Volume Group
sudo vgs vg-datastore

# Testar criação de volume de teste
virsh vol-create-as images test-volume.qcow2 1G --format qcow2
virsh vol-list images
virsh vol-delete test-volume.qcow2 images

Monitoramento de Armazenamento:

Configure monitoramento básico para acompanhar o uso do armazenamento:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Script simples para monitoramento (salvar como /usr/local/bin/storage-monitor.sh)
sudo tee /usr/local/bin/storage-monitor.sh > /dev/null << 'EOF'
#!/bin/bash
echo "=== Storage Status $(date) ==="
echo "Volume Group Status:"
vgs vg-datastore
echo ""
echo "Logical Volumes:"
lvs vg-datastore
echo ""
echo "Mount Points:"
df -h | grep datastore
echo ""
echo "Pool Status:"
virsh pool-list --all
EOF

sudo chmod +x /usr/local/bin/storage-monitor.sh

Com a configuração de armazenamento concluída, o ambiente KVM possui uma base sólida e flexível para hospedar máquinas virtuais. A estrutura LVM implementada oferece escalabilidade e facilidade de gerenciamento, enquanto os pools libvirt proporcionam uma interface padronizada para operações de armazenamento. Esta configuração está preparada para suportar desde ambientes de desenvolvimento até cargas de trabalho de produção.


5. Configuração Avançada e Acesso Remoto

5.1 Configuração de Acesso SSH

O gerenciamento remoto é essencial em ambientes de virtualização, permitindo administração eficiente sem necessidade de acesso físico ao servidor. A configuração adequada do acesso SSH garante tanto a funcionalidade quanto a segurança do ambiente KVM.

Geração de Chaves SSH na Estação de Trabalho:

Para estabelecer conexão segura e conveniente com o servidor KVM, configure autenticação baseada em chaves SSH. Este método oferece maior segurança que senhas tradicionais e facilita a automação de tarefas administrativas.

Na estação de trabalho que será utilizada para gerenciamento, execute:

1
ssh-keygen -t ed25519 -f ~/.ssh/kvm

Exemplo de Execução:

1
2
3
4
5
6
7
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/kvm
Your public key has been saved in /home/user/.ssh/kvm.pub
The key fingerprint is:
SHA256:Bq2Pjqjl3E45KWXTXOhRLLLy+fKq14o0wG9gndPuuG0 user@workstation

Transferência da Chave Pública:

Copie a chave pública para o servidor KVM:

1
ssh-copy-id -i ~/.ssh/kvm.pub usuario@192.168.0.250

Substitua usuario pelo nome do usuário configurado no servidor e 192.168.0.250 pelo IP do seu servidor KVM.

Configuração do Cliente SSH:

Para facilitar conexões futuras, configure o arquivo ~/.ssh/config na estação de trabalho:

1
2
3
4
5
6
7
cat >> ~/.ssh/config << 'EOF'
Host kvm-server
    HostName 192.168.0.250
    User usuario
    IdentityFile ~/.ssh/kvm
    Port 22
EOF

Teste de Conectividade:

1
ssh kvm-server

5.2 Configuração do Virt-Manager

O virt-manager é uma interface gráfica completa para gerenciamento de máquinas virtuais que oferece funcionalidades avançadas através de uma interface intuitiva. A configuração para acesso remoto permite gerenciar o servidor KVM a partir de qualquer estação de trabalho na rede.

Instalação do Virt-Manager na Estação de Trabalho:

Em sistemas baseados em Red Hat/Oracle Linux:

1
sudo yum install -y virt-manager

Em sistemas baseados em Debian/Ubuntu:

1
sudo apt install -y virt-manager

Configuração de Conexão Remota:

Teste a conectividade com libvirt via SSH:

1
virsh -c qemu+ssh://usuario@192.168.0.250/system list --all

Exemplo de Saída Esperada:

1
2
 Id    Name                           State
----------------------------------------------------

Inicialização do Virt-Manager:

Lance o virt-manager com conexão remota:

1
virt-manager --connect qemu+ssh://usuario@192.168.0.250/system

Configuração Persistente de Conexão:

Para adicionar a conexão permanentemente no virt-manager:

  1. Abra o virt-manager
  2. Clique em “File” → “Add Connection”
  3. Selecione “QEMU/KVM user session”
  4. Marque “Connect to remote host over SSH”
  5. Insira o hostname: 192.168.0.250
  6. Insira o username: usuario
  7. Clique em “Connect”

5.3 Verificação da Configuração

Antes de prosseguir com a criação de máquinas virtuais, execute uma verificação completa para garantir que todos os componentes estão funcionando adequadamente.

Verificação dos Serviços:

1
2
3
4
5
6
7
8
9
10
11
# Status do libvirtd
sudo systemctl status libvirtd

# Verificar módulos KVM carregados
lsmod | grep kvm

# Verificar pools de armazenamento
virsh pool-list --all

# Verificar redes virtuais
virsh net-list --all

Verificação de Conectividade Remota:

1
2
3
4
5
# Da estação de trabalho, verificar pools remotos
virsh -c qemu+ssh://usuario@192.168.0.250/system pool-list

# Verificar informações do host
virsh -c qemu+ssh://usuario@192.168.0.250/system nodeinfo

Exemplo de Saída do nodeinfo:

1
2
3
4
5
6
7
8
CPU model:           x86_64
CPU(s):              8
CPU frequency:       2400 MHz
CPU socket(s):       2
Core(s) per socket:  2
Thread(s) per core:  2
NUMA cell(s):        1
Memory size:         16777216 KiB

6. Criação e Gerenciamento de Máquinas Virtuais

6.1 Preparação de ISOs e Templates

A preparação adequada de ISOs de instalação e templates de sistemas operacionais é fundamental para a eficiência na criação de máquinas virtuais. Esta seção aborda o download, organização e otimização destes recursos.

Download de ISOs:

Para demonstração, utilizaremos uma ISO do Debian como exemplo:

1
sudo wget http://cdimage.debian.org/mirror/cdimage/archive/12.6.0/amd64/iso-cd/debian-12.6.0-amd64-netinst.iso -P /datastore/isos/

Verificação da ISO:

1
ls -lh /datastore/isos/

Gerenciamento de Templates:

Crie um script para gerenciamento automatizado de templates:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
sudo tee /usr/local/bin/update-template.sh > /dev/null << 'EOF'
#!/bin/bash
# Script para atualização de templates
# URLs de templates:
# Ubuntu: https://cloud-images.ubuntu.com
# Debian: https://cloud.debian.org/images/cloud
# Oracle Linux: https://yum.oracle.com/oracle-linux-templates.html

TEMPLATE="ubuntu-22.04"
POOL_PATH="/datastore/templates"

# Baixar última imagem cloud
wget -O $POOL_PATH/$TEMPLATE-new.qcow2 \
https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.img

# Otimizar imagem
qemu-img convert -O qcow2 -c $POOL_PATH/$TEMPLATE-new.qcow2 $POOL_PATH/$TEMPLATE-opt.qcow2

# Rotacionar versões
mv $POOL_PATH/$TEMPLATE-current.qcow2 $POOL_PATH/$TEMPLATE-old.qcow2 2>/dev/null
mv $POOL_PATH/$TEMPLATE-opt.qcow2 $POOL_PATH/$TEMPLATE-current.qcow2

# Atualizar permissões
chown libvirt:libvirt $POOL_PATH/$TEMPLATE-current.qcow2

# Limpar arquivo temporário
rm -f $POOL_PATH/$TEMPLATE-new.qcow2

echo "Template $TEMPLATE atualizado com sucesso"
EOF

sudo chmod +x /usr/local/bin/update-template.sh

6.2 Criação de VMs via Linha de Comando

O virt-install é uma ferramenta poderosa para criação automatizada de máquinas virtuais. Esta seção apresenta diferentes métodos de criação de VMs para diversos cenários de uso.

Verificação de Sistemas Operacionais Suportados:

Antes de criar uma VM, verifique os sistemas operacionais suportados:

1
osinfo-query os | grep debian

Exemplo de Saída:

1
2
3
 debian10             | Debian 10                                          | 10       | http://debian.org/debian/10             
 debian11             | Debian 11                                          | 11       | http://debian.org/debian/11             
 debian12             | Debian 12                                          | 12       | http://debian.org/debian/12

Criação de VM com Console Serial:

Para instalação via console (útil para acesso remoto):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo virt-install \
    --virt-type kvm \
    --name=debian12-console \
    --description="Debian Bookworm - Console" \
    --ram=2048 \
    --vcpus=2 \
    --cpu host-passthrough \
    --os-variant debian12 \
    --disk size=16,format=qcow2,bus=virtio,cache=none,pool=images \
    --location /datastore/isos/debian-12.6.0-amd64-netinst.iso \
    --network=bridge=br0,model=virtio \
    --graphics none \
    --console pty,target_type=serial \
    --extra-args 'console=tty0 console=ttyS0,115200n8'

Criação de VM com Interface Gráfica (VNC):

Para instalação com interface gráfica acessível via VNC:

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo virt-install \
    --virt-type kvm \
    --name debian12-vnc \
    --description "Debian Bookworm - VNC" \
    --cdrom /datastore/isos/debian-12.6.0-amd64-netinst.iso \
    --os-variant debian12 \
    --disk size=16,format=qcow2,bus=virtio,cache=none,pool=images \
    --memory 2048 \
    --vcpus 2 \
    --cpu host-passthrough \
    --network=bridge=br0,model=virtio \
    --graphics vnc,listen=0.0.0.0 \
    --noautoconsole

Criação de VM com SPICE:

Para melhor experiência gráfica com protocolo SPICE:

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo virt-install \
    --virt-type kvm \
    --name debian12-spice \
    --description "Debian Bookworm - SPICE" \
    --cdrom /datastore/isos/debian-12.6.0-amd64-netinst.iso \
    --os-variant debian12 \
    --disk size=16,format=qcow2,bus=virtio,cache=none,pool=images \
    --memory 2048 \
    --vcpus 2 \
    --cpu host-passthrough \
    --network=bridge=br0,model=virtio \
    --graphics spice,listen=0.0.0.0 \
    --noautoconsole

Script Automatizado para Criação de VMs:

Crie um script para padronizar a criação de VMs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
sudo tee /usr/local/bin/create-vm.sh > /dev/null << 'EOF'
#!/bin/bash

# Script para criação automatizada de VMs
# Uso: create-vm.sh <nome> <memoria_mb> <vcpus> <disco_gb> <iso_path>

if [ $# -ne 5 ]; then
    echo "Uso: $0 <nome> <memoria_mb> <vcpus> <disco_gb> <iso_path>"
    echo "Exemplo: $0 test-vm 2048 2 20 /datastore/isos/debian-12.6.0-amd64-netinst.iso"
    exit 1
fi

VM_NAME="$1"
MEMORY="$2"
VCPUS="$3"
DISK_SIZE="$4"
ISO_PATH="$5"

echo "Criando VM: $VM_NAME"
echo "Memória: ${MEMORY}MB"
echo "vCPUs: $VCPUS"
echo "Disco: ${DISK_SIZE}GB"
echo "ISO: $ISO_PATH"

virt-install \
    --name ${VM_NAME} \
    --ram ${MEMORY} \
    --vcpus ${VCPUS} \
    --disk size=${DISK_SIZE},format=qcow2,bus=virtio,cache=none,pool=images \
    --cdrom ${ISO_PATH} \
    --os-variant debian12 \
    --network bridge=br0,model=virtio \
    --graphics spice,listen=0.0.0.0 \
    --console pty,target_type=serial \
    --noautoconsole

echo "VM $VM_NAME criada com sucesso!"
echo "Para conectar via console: virsh console $VM_NAME"
echo "Para conectar via VNC/SPICE: use virt-manager ou virt-viewer"
EOF

sudo chmod +x /usr/local/bin/create-vm.sh

6.3 Operações Básicas de Gerenciamento

Esta seção cobre as operações fundamentais para gerenciamento do ciclo de vida das máquinas virtuais.

Listagem e Status de VMs:

1
2
3
4
5
6
7
8
# Listar todas as VMs
virsh list --all

# Obter informações detalhadas de uma VM
virsh dominfo nome-da-vm

# Verificar configuração XML de uma VM
virsh dumpxml nome-da-vm

Controle de Estado das VMs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Iniciar VM
virsh start nome-da-vm

# Desligamento gracioso
virsh shutdown nome-da-vm

# Desligamento forçado
virsh destroy nome-da-vm

# Reinicialização
virsh reboot nome-da-vm

# Suspender VM
virsh suspend nome-da-vm

# Retomar VM suspensa
virsh resume nome-da-vm

Configuração de Inicialização Automática:

1
2
3
4
5
6
7
8
# Habilitar autostart
virsh autostart nome-da-vm

# Desabilitar autostart
virsh autostart --disable nome-da-vm

# Verificar status de autostart
virsh dominfo nome-da-vm | grep Autostart

Gerenciamento de Recursos:

1
2
3
4
5
6
7
8
9
# Alterar quantidade de memória (VM desligada)
virsh setmaxmem nome-da-vm 4G --config
virsh setmem nome-da-vm 4G --config

# Alterar número de vCPUs (VM desligada)
virsh setvcpus nome-da-vm 4 --config

# Verificar uso de recursos
virsh domstats nome-da-vm

Acesso ao Console:

1
2
3
4
# Conectar ao console serial
virsh console nome-da-vm

# Para sair do console, use: Ctrl+]

6.4 Clonagem e Snapshots

O gerenciamento avançado de VMs inclui operações de clonagem para criação rápida de ambientes similares e snapshots para pontos de recuperação.

Clonagem de Máquinas Virtuais:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Desligar VM original
virsh shutdown vm-original

# Aguardar desligamento completo
virsh domstate vm-original

# Clonar VM
virt-clone \
    --original vm-original \
    --name vm-clone \
    --file /datastore/images/vm-clone.qcow2

# Iniciar clone
virsh start vm-clone

Gerenciamento de Snapshots:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Criar snapshot
virsh snapshot-create-as nome-da-vm \
    --name "snapshot-$(date +%Y%m%d-%H%M)" \
    --description "Ponto de recuperação antes de atualizações"

# Listar snapshots
virsh snapshot-list nome-da-vm

# Reverter para snapshot
virsh snapshot-revert nome-da-vm --snapshotname nome-do-snapshot

# Excluir snapshot
virsh snapshot-delete nome-da-vm --snapshotname nome-do-snapshot

Backup de VMs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Script de backup simples
sudo tee /usr/local/bin/backup-vm.sh > /dev/null << 'EOF'
#!/bin/bash

VM_NAME="$1"
BACKUP_DIR="/datastore/backups"

if [ -z "$VM_NAME" ]; then
    echo "Uso: $0 <nome-da-vm>"
    exit 1
fi

mkdir -p $BACKUP_DIR

# Criar snapshot para backup consistente
virsh snapshot-create-as $VM_NAME backup-temp --disk-only --atomic

# Copiar arquivo de disco
cp /datastore/images/${VM_NAME}.qcow2 $BACKUP_DIR/${VM_NAME}-$(date +%Y%m%d).qcow2

# Remover snapshot temporário
virsh blockcommit $VM_NAME vda --active --verbose --pivot

echo "Backup de $VM_NAME concluído em $BACKUP_DIR"
EOF

sudo chmod +x /usr/local/bin/backup-vm.sh

7. Monitoramento e Manutenção

7.1 Monitoramento de Recursos

O monitoramento efetivo é essencial para manter a performance e disponibilidade do ambiente de virtualização. Esta seção apresenta ferramentas e técnicas para monitoramento proativo.

Monitoramento do Host:

1
2
3
4
5
6
7
8
9
10
11
# Informações gerais do host
virsh nodeinfo

# Estatísticas de CPU do host
virsh nodecpustats

# Estatísticas de memória do host
virsh nodememstats

# Informações de storage
virsh pool-list --details

Monitoramento de VMs Individuais:

1
2
3
4
5
6
7
8
9
10
11
# Estatísticas de CPU de uma VM
virsh cpu-stats nome-da-vm

# Estatísticas de memória de uma VM
virsh dommemstat nome-da-vm

# Estatísticas de I/O de disco
virsh domblkstat nome-da-vm vda

# Estatísticas de rede
virsh domifstat nome-da-vm vnet0

Monitoramento em Tempo Real:

1
2
3
4
5
# Instalar virt-top para monitoramento em tempo real
sudo yum install -y virt-top

# Executar virt-top
virt-top

Script de Monitoramento Personalizado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
sudo tee /usr/local/bin/kvm-monitor.sh > /dev/null << 'EOF'
#!/bin/bash

echo "=== KVM Host Monitor - $(date) ==="
echo ""

echo "Host Information:"
virsh nodeinfo
echo ""

echo "Running VMs:"
virsh list
echo ""

echo "Storage Pools:"
virsh pool-list --details
echo ""

echo "Host CPU Usage:"
top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1
echo ""

echo "Host Memory Usage:"
free -h
echo ""

echo "Storage Usage:"
df -h | grep datastore
echo ""

echo "LVM Status:"
vgs vg-datastore
lvs vg-datastore
EOF

sudo chmod +x /usr/local/bin/kvm-monitor.sh

7.2 Backup e Recuperação

Uma estratégia robusta de backup é fundamental para proteger dados e garantir continuidade operacional.

Estratégia de Backup:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Criar estrutura de backup
sudo mkdir -p /datastore/backups/{daily,weekly,monthly}

# Script de backup automatizado
sudo tee /usr/local/bin/backup-strategy.sh > /dev/null << 'EOF'
#!/bin/bash

BACKUP_BASE="/datastore/backups"
DATE=$(date +%Y%m%d)
DAY_OF_WEEK=$(date +%u)
DAY_OF_MONTH=$(date +%d)

# Função para backup de VM
backup_vm() {
    local vm_name="$1"
    local backup_type="$2"
    local backup_dir="$BACKUP_BASE/$backup_type"
    
    echo "Iniciando backup $backup_type de $vm_name"
    
    # Verificar se VM está rodando
    if virsh domstate $vm_name | grep -q "running"; then
        # Criar snapshot para backup consistente
        virsh snapshot-create-as $vm_name backup-temp-$DATE --disk-only --atomic
        
        # Copiar disco
        cp /datastore/images/${vm_name}.qcow2 $backup_dir/${vm_name}-${DATE}.qcow2
        
        # Consolidar snapshot
        virsh blockcommit $vm_name vda --active --verbose --pivot
    else
        # VM parada, backup direto
        cp /datastore/images/${vm_name}.qcow2 $backup_dir/${vm_name}-${DATE}.qcow2
    fi
    
    # Backup da configuração XML
    virsh dumpxml $vm_name > $backup_dir/${vm_name}-${DATE}.xml
    
    echo "Backup de $vm_name concluído"
}

# Backup diário (manter 7 dias)
if [ ! -z "$(virsh list --all --name)" ]; then
    for vm in $(virsh list --all --name); do
        [ ! -z "$vm" ] && backup_vm "$vm" "daily"
    done
fi

# Backup semanal (domingo)
if [ "$DAY_OF_WEEK" -eq 7 ]; then
    for vm in $(virsh list --all --name); do
        [ ! -z "$vm" ] && backup_vm "$vm" "weekly"
    done
fi

# Backup mensal (dia 1)
if [ "$DAY_OF_MONTH" -eq 01 ]; then
    for vm in $(virsh list --all --name); do
        [ ! -z "$vm" ] && backup_vm "$vm" "monthly"
    done
fi

# Limpeza de backups antigos
find $BACKUP_BASE/daily -name "*.qcow2" -mtime +7 -delete
find $BACKUP_BASE/weekly -name "*.qcow2" -mtime +30 -delete
find $BACKUP_BASE/monthly -name "*.qcow2" -mtime +365 -delete

echo "Estratégia de backup concluída"
EOF

sudo chmod +x /usr/local/bin/backup-strategy.sh

Configuração de Backup Automático:

1
2
# Adicionar ao crontab para execução diária às 2h
echo "0 2 * * * /usr/local/bin/backup-strategy.sh >> /var/log/kvm-backup.log 2>&1" | sudo crontab -

7.3 Troubleshooting

Esta seção apresenta soluções para problemas comuns em ambientes KVM.

Problemas de Performance:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Verificar I/O wait
iostat -x 1

# Verificar uso de CPU por VM
for vm in $(virsh list --name); do
    echo "VM: $vm"
    virsh cpu-stats $vm
    echo ""
done

# Verificar fragmentação de disco
for vm in $(virsh list --name); do
    echo "VM: $vm"
    qemu-img info /datastore/images/${vm}.qcow2
    echo ""
done

Problemas de Rede:

1
2
3
4
5
6
7
8
# Verificar bridge
brctl show

# Verificar interfaces de VMs
virsh domiflist nome-da-vm

# Testar conectividade de VM
virsh domifaddr nome-da-vm

Problemas de Storage:

1
2
3
4
5
6
7
8
9
10
# Verificar espaço em pools
virsh pool-list --details

# Verificar integridade de imagens
qemu-img check /datastore/images/nome-da-vm.qcow2

# Verificar status LVM
vgs
lvs
pvs

Log Analysis:

1
2
3
4
5
6
7
8
# Logs do libvirt
sudo journalctl -u libvirtd -f

# Logs de uma VM específica
sudo journalctl -t qemu-system-x86_64

# Logs do sistema
sudo tail -f /var/log/messages

8. Apêndices

8.1 Comandos de Diagnóstico de Hardware

Esta seção consolida comandos úteis para diagnóstico e monitoramento de hardware, separados da configuração principal para facilitar consulta.

Verificação de Dispositivos de Armazenamento:

1
2
3
4
5
6
7
8
# Listar todos os dispositivos de bloco
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE

# Informações detalhadas dos discos
sudo fdisk -l

# Verificar modelo e especificações dos discos
sudo lshw -class disk -class storage

Monitoramento de Performance de Discos:

1
2
3
4
5
6
7
8
9
10
11
# Verificar velocidade de leitura
sudo hdparm -tT /dev/sdX

# Informações detalhadas do disco
sudo hdparm -I /dev/sdX | grep -i "speed\|model"

# Monitoramento de I/O em tempo real
iostat -d 1

# Top de processos por I/O
iotop

Verificação de Saúde SMART:

1
2
3
4
5
6
7
8
9
10
11
# Instalar smartmontools se necessário
sudo yum install -y smartmontools

# Verificar status SMART
sudo smartctl -a /dev/sdX

# Teste rápido SMART
sudo smartctl -t short /dev/sdX

# Verificar temperatura
sudo smartctl -A /dev/sdX | grep Temperature

Monitoramento de Discos NVMe:

1
2
3
4
5
6
7
8
# Listar dispositivos NVMe
sudo nvme list

# Informações SMART para NVMe
sudo nvme smart-log /dev/nvme0

# Temperatura de NVMe
sudo nvme smart-log /dev/nvme0 | grep temperature

Verificação de CPU e Memória:

1
2
3
4
5
6
7
8
9
10
11
12
# Informações detalhadas da CPU
lscpu

# Verificar flags de virtualização
grep -E "vmx|svm" /proc/cpuinfo

# Informações de memória
sudo dmidecode -t memory

# Verificar uso de memória
free -h
cat /proc/meminfo

8.2 Scripts Úteis

Script de Verificação de Sistema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
sudo tee /usr/local/bin/kvm-health-check.sh > /dev/null << 'EOF'
#!/bin/bash

echo "=== KVM Health Check - $(date) ==="
echo ""

# Verificar serviços
echo "Serviços:"
systemctl is-active libvirtd
systemctl is-active NetworkManager
echo ""

# Verificar módulos KVM
echo "Módulos KVM:"
lsmod | grep kvm
echo ""

# Verificar pools
echo "Storage Pools:"
virsh pool-list --all
echo ""

# Verificar redes
echo "Redes Virtuais:"
virsh net-list --all
echo ""

# Verificar VMs
echo "Máquinas Virtuais:"
virsh list --all
echo ""

# Verificar recursos
echo "Recursos do Host:"
echo "CPU: $(nproc) cores"
echo "Memória: $(free -h | awk '/^Mem:/ {print $2}')"
echo "Storage: $(df -h /datastore | awk 'NR==2 {print $4}') disponível"
echo ""

# Verificar conectividade
echo "Conectividade:"
ping -c 1 8.8.8.8 > /dev/null && echo "Internet: OK" || echo "Internet: FALHA"
echo ""

echo "Health check concluído"
EOF

sudo chmod +x /usr/local/bin/kvm-health-check.sh

Script de Limpeza:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
sudo tee /usr/local/bin/kvm-cleanup.sh > /dev/null << 'EOF'
#!/bin/bash

echo "=== KVM Cleanup - $(date) ==="

# Limpar snapshots antigos
echo "Limpando snapshots antigos..."
for vm in $(virsh list --all --name); do
    if [ ! -z "$vm" ]; then
        snapshots=$(virsh snapshot-list $vm --name 2>/dev/null)
        if [ ! -z "$snapshots" ]; then
            echo "VM: $vm tem snapshots"
            for snap in $snapshots; do
                snap_date=$(virsh snapshot-info $vm $snap | grep "Creation Time" | awk '{print $3}')
                # Lógica para remover snapshots antigos pode ser adicionada aqui
            done
        fi
    fi
done

# Limpar logs antigos
echo "Limpando logs antigos..."
find /var/log -name "*.log" -mtime +30 -delete 2>/dev/null

# Limpar cache de pacotes
echo "Limpando cache de pacotes..."
yum clean all

echo "Limpeza concluída"
EOF

sudo chmod +x /usr/local/bin/kvm-cleanup.sh

8.3 Referências e Recursos Adicionais

Documentação Oficial:

Recursos da Comunidade:

Ferramentas Complementares:

  • Cockpit - Interface web para gerenciamento de sistemas
  • oVirt - Plataforma de gerenciamento de virtualização
  • Proxmox VE - Plataforma de virtualização baseada em KVM

Considerações de Segurança:

  • Mantenha o sistema sempre atualizado com patches de segurança
  • Configure firewall adequadamente para limitar acesso aos serviços
  • Utilize autenticação baseada em chaves SSH
  • Implemente monitoramento de logs para detectar atividades suspeitas
  • Configure backup regular de configurações e dados críticos

Conclusão

Este tutorial reorganizado fornece uma base sólida para implementação e gerenciamento de KVM no Oracle Linux 7, especialmente em hardware legado como o IBM x3550 M2. A estrutura modular e as explicações detalhadas permitem tanto aprendizado sequencial quanto uso como material de referência.

A configuração apresentada oferece um ambiente de virtualização robusto, escalável e bem organizado, adequado para diversos cenários de uso, desde ambientes de desenvolvimento até cargas de trabalho de produção.


This post is licensed under CC BY 4.0 by the author.