
A resolução de problemas durante a inicialização do sistema operacional em servidores sem KVM é uma tarefa desafiadora. Criamos um KVM-over-IP através de uma imagem de recuperação e uma máquina virtual.
No caso de problemas com o sistema operacional , o administrador carrega a imagem de recuperação e realiza os trabalhos necessários. Esse método funciona bem quando a causa da falha é conhecida e a imagem de recuperação e o sistema operacional instalado no servidor pertencem à mesma família. Se a causa da falha ainda não for conhecida, é necessário monitorar o processo de inicialização do sistema operacional.
KVM remoto
O acesso ao console do servidor pode ser feito por meio de ferramentas integradas, como IPMI ou Intel® vPro™, ou através de dispositivos externos chamados IP-KVM. Existem situações em que todas essas tecnologias estão indisponíveis. Contudo, isso não é o fim. Se o servidor puder ser reiniciado remotamente em uma imagem de recuperação baseada em um sistema operacional da família Linux, é possível rapidamente organizar um KVM-over-IP.
A imagem de recuperação é um sistema operacional completo que é carregado na memória RAM. Dessa forma, podemos executar qualquer software, incluindo máquinas virtuais (VMs). Isso significa que podemos iniciar uma VM, dentro da qual o sistema operacional do servidor funcionará. O acesso ao console da VM pode ser organizado, por exemplo, através do VNC.
Para iniciar o sistema operacional do servidor dentro da VM, é necessário especificar os discos do servidor como discos da VM. Nos sistemas operacionais da família Linux, os discos físicos são representados como dispositivos de bloco do tipo /dev/sdX, que podem ser manipulados como arquivos normais.
Alguns hipervisores, como QEMU e VirtualBox, permitem armazenar os dados da VM em formato 'cru', ou seja, apenas os dados do armazenamento sem os metadados do hipervisor. Assim, a VM pode ser iniciada utilizando os discos físicos do servidor.
Esse método requer recursos para inicializar a imagem de recuperação e a VM dentro dela. No entanto, com quatro gigabytes ou mais de memória RAM, isso não será um problema.
Preparação do ambiente
Uma programação leve e simples pode ser usada como máquina virtual. , que geralmente não faz parte da imagem de recuperação, portanto, deve ser instalada separadamente. A imagem de recuperação que oferecemos aos clientes é baseada em , que utiliza o gerenciador de pacotes pacman.
Primeiro, é necessário garantir que a imagem de recuperação utilize as versões mais recentes do software. Você pode verificar e atualizar todos os componentes do SO com o seguinte comando:
pacman -Suy
Após a atualização, é necessário instalar o QEMU. O comando para instalação via pacman será assim:
pacman -S qemu
Vamos verificar se o qemu foi instalado corretamente:
root@sel-rescue ~ # qemu-system-x86_64 --version
Versão do emulador QEMU 4.0.0
Copyright (c) 2003-2019 Fabrice Bellard e os desenvolvedores do projeto QEMU
Se tudo estiver certo, a imagem de recuperação estará pronta para uso.
Iniciando a máquina virtual
Primeiro, é necessário determinar a quantidade de recursos alocados para a MV e descobrir os caminhos para os discos físicos. No nosso caso, alocaremos dois núcleos e dois gigabytes de memória RAM para a máquina virtual, e os discos estão localizados no caminho /dev/sda e /dev/sdb. Vamos iniciar a MV:
qemu-system-x86_64
-m 2048M
-net nic -net user
-enable-kvm
-cpu host,nx
-M pc
-smp 2
-vga std
-drive file=\/dev\/sda,format=raw,index=0,media=disk
-drive file=\/dev\/sdb,format=raw,index=1,media=disk
-vnc :0,password
-monitor stdio
Um pouco mais sobre o que cada um dos parâmetros significa:
- -m 2048M — alocamos 2 GB de RAM para a MV;
- -net nic -net user — adicionamos uma conexão simples à rede através do hipervisor usando NAT (Network Address Translation);
- -enable-kvm — ativamos a virtualização completa KVM (Kernel Virtual Machine);
- -cpu host — dizemos ao processador virtual para obter toda a funcionalidade do processador do servidor;
- -M pc — tipo de equipamento PC;
- -smp 2 — o processador virtual deve ser de dois núcleos;
- -vga std — escolhemos uma placa gráfica padrão que não suporta altas resoluções de tela;
- -drive file=\/dev\/sda,format=raw,index=0,media=disk
- file=\/dev\/sdX — caminho para o dispositivo de bloco que representa o disco do servidor;
- format=raw — indicamos que no arquivo especificado todos os dados estão em formato 'raw', ou seja, como no disco;
- index=0 — número do disco, deve aumentar em uma unidade para cada disco subsequente;
- media=disk — a máquina virtual deve reconhecer esse armazenamento como um disco;
- -vnc :0, password — iniciamos o servidor VNC por padrão em 0.0.0.0:5900, usando uma senha como autorização;
- -monitor stdio — a comunicação do administrador com o qemu ocorrerá através de streams padrão de entrada/saída.
Se tudo estiver em ordem, o monitor QEMU será iniciado:
Monitor QEMU 4.0.0 - digite 'help' para mais informações
(qemu)
Nós indicamos que a autorização ocorre por senha, mas não especificamos a própria senha. Isso pode ser feito enviando o comando change vnc password no monitor QEMU. Nota importante: a senha não pode ter mais de oito caracteres.
(qemu) alterar a senha do vnc
Senha: ******
Após isso, podemos nos conectar com qualquer cliente VNC, como o Remmina, pelo endereço IP do nosso servidor com a senha que especificamos.


Agora, não só conseguimos ver possíveis erros na fase de inicialização, mas também podemos combatê-los.
Após o término dos trabalhos, é necessário desligar a máquina virtual. Isso pode ser feito tanto dentro do SO, enviando um sinal para desligar, quanto dando o comando system_powerdown no monitor QEMU. Isso será equivalente a pressionar o botão de desligar uma vez: o sistema operacional dentro da máquina virtual será encerrado de forma adequada.
Instalação do sistema operacional
A máquina virtual tem acesso total aos discos do servidor e, portanto, pode ser usada para instalar o sistema operacional manualmente. A única limitação é em relação à quantidade de memória RAM: nem sempre a imagem ISO pode ser armazenada na memória RAM. Vamos alocar quatro gigabytes de RAM para armazenar a imagem em /mnt:
mount -t tmpfs -o size=4G tmpfs /mnt
Além disso, vamos baixar a imagem de instalação do sistema operacional FreeBSD 12.0:
wget -P /mnt ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-bootonly.iso
Agora podemos iniciar a VM:
qemu-system-x86_64
-m 2048M
-net nic -net user
-enable-kvm
-cpu host,nx
-M pc
-smp 2
-vga std
-drive file=\/dev\/sda,format=raw,index=0,media=disk
-drive file=\/dev\/sdb,format=raw,index=1,media=disk
-vnc :0,password
-monitor stdio
-cdrom /mnt/FreeBSD-12.0-RELEASE-amd64-bootonly.iso
-boot d
A bandeira -boot d define o carregamento a partir do CD-ROM. Nos conectamos ao cliente VNC e vemos o carregador do FreeBSD.

Como foi utilizado DHCP para obter o endereço de internet, pode ser necessário inicializar o sistema recém-instalado e corrigir as configurações de rede após a configuração. Em alguns casos, pode ser necessário instalar drivers do adaptador de rede, uma vez que a placa de rede instalada no servidor e emulada na VM são diferentes.
Conclusão
Esse método de organização de acesso remoto ao console do servidor consome parte dos recursos do servidor, entretanto, não apresenta requisitos especiais para o hardware do servidor, podendo ser realizado em praticamente qualquer condição. Usar essa solução facilita significativamente o diagnóstico de falhas de software e a recuperação da funcionalidade do servidor remoto.
Fonte: habr.com
