
La risoluzione dei problemi durante il caricamento del sistema operativo su server senza KVM è un compito complesso. Creiamo un KVM-over-IP tramite un'immagine di ripristino e una macchina virtuale.
In caso di problemi con il sistema operativo , l'amministratore carica l'immagine di ripristino e svolge le necessarie operazioni. Questo metodo funziona bene quando la causa del malfunzionamento è nota e l'immagine di ripristino e il sistema operativo installato sul server appartengono alla stessa famiglia. Se la causa del guasto non è ancora nota, è necessario osservare l'andamento del caricamento del sistema operativo.
KVM remoto
L'accesso alla console del server può essere effettuato tramite strumenti integrati, come IPMI o Intel® vPro™, oppure tramite dispositivi esterni noti come IP-KVM. Ci sono situazioni in cui tutte queste tecnologie non sono disponibili. Tuttavia, non è la fine. Se il server può essere riavviato da remoto in un'immagine di ripristino basata su un sistema operativo della famiglia Linux, è possibile organizzare rapidamente un KVM-over-IP.
L'immagine di ripristino è un sistema operativo completo che viene caricato nella memoria RAM. In questo modo, possiamo eseguire qualsiasi software, comprese le macchine virtuali (VM). Ciò significa che è possibile avviare una VM, all'interno della quale funzionerà il sistema operativo del server. L'accesso alla console della VM può essere organizzato, ad esempio, tramite VNC.
Per avviare il sistema operativo del server all'interno della VM, è necessario specificare i dischi del server come dischi della VM. Nei sistemi operativi della famiglia Linux, i dischi fisici sono rappresentati come dispositivi a blocchi di tipo /dev/sdX, con i quali è possibile lavorare come con normali file.
Alcuni hypervisor, come QEMU e VirtualBox, consentono di memorizzare i dati delle VM in forma "raw", cioè solo i dati di archiviazione senza metadati dell’hypervisor. In questo modo, la VM può essere avviata utilizzando i dischi fisici del server.
Questo metodo richiede risorse per avviare l'immagine di ripristino e la VM al suo interno. Tuttavia, con quattro gigabyte o più di RAM, questo non sarà un problema.
Preparazione dell'ambiente
Come macchina virtuale è possibile utilizzare un programma leggero e semplice , che spesso non fa parte dell'immagine di ripristino, quindi deve essere installato separatamente. L'immagine di ripristino che offriamo ai clienti si basa su , in cui viene utilizzato il gestore pacchetti pacman.
Per prima cosa, è necessario assicurarsi che l'immagine di ripristino utilizzi le ultime versioni del software. È possibile controllare e aggiornare tutti i componenti del sistema operativo con il seguente comando:
pacman -Suy
Dopo l'aggiornamento, è necessario installare QEMU. Il comando per l'installazione tramite pacman sarà:
pacman -S qemu
Verifichiamo che qemu sia stato installato correttamente:
root@sel-rescue ~ # qemu-system-x86_64 --version
Versione dell'emulatore QEMU 4.0.0
Copyright (c) 2003-2019 Fabrice Bellard e gli sviluppatori del progetto QEMU
Se tutto è a posto, l'immagine di ripristino è pronta per l'uso.
Avvio della macchina virtuale
Per prima cosa, è necessario decidere la quantità di risorse da assegnare alla VM e determinare i percorsi dei dischi fisici. Nel nostro caso, assegneremo due core e due gigabyte di memoria RAM alla macchina virtuale, mentre i dischi si trovano nel percorso /dev/sda e /dev/sdb. Avviamo la 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
Un po' più in dettaglio su cosa significa ciascuno dei parametri:
- -m 2048M — assegniamo 2 GB di RAM alla VM;
- -net nic -net user — aggiungiamo una semplice connessione di rete tramite hypervisor utilizzando NAT (Network Address Translation);
- -enable-kvm — attiviamo la virtualizzazione completa KVM (Kernel Virtual Machine);
- -cpu host — diciamo al processore virtuale di ottenere tutte le funzionalità del processore del server;
- -M pc — tipo di hardware PC;
- -smp 2 — il processore virtuale deve essere dual-core;
- -vga std — scegliamo una scheda video standard che non supporta alte risoluzioni;
- -drive file=/dev/sda,format=raw,index=0,media=disk
- file=\/dev\/sdX — percorso verso il dispositivo a blocchi che rappresenta il disco del server;
- format=raw — indichiamo che nel file specificato i dati sono in formato "raw", cioè come su disco;
- index=0 — numero del disco, deve aumentare di uno per ogni disco successivo;
- media=disk — la macchina virtuale deve riconoscere questo storage come un disco;
- -vnc :0, password — avviamo il server VNC di default su 0.0.0.0:5900, utilizzando la password come autorizzazione;
- -monitor stdio — la comunicazione dell'amministratore con qemu avverrà attraverso i flussi standard di input-output.
Se tutto è a posto, si avvierà il monitor di QEMU:
Monitor QEMU 4.0.0 - digita 'help' per maggiori informazioni
(qemu)
Abbiamo specificato che l'autenticazione avviene tramite password, ma non abbiamo specificato la password stessa. È possibile farlo inviando il comando change vnc password al monitor di QEMU. Nota importante: la password non può essere più lunga di otto caratteri.
(qemu) cambia la password vnc
Password: ******
Dopo di ciò, possiamo collegarci con qualsiasi client VNC, ad esempio Remmina, all'indirizzo IP del nostro server usando la password che abbiamo specificato.


Ora non solo vediamo possibili errori durante il caricamento, ma possiamo anche affrontarli.
Alla fine del lavoro, è necessario spegnere la macchina virtuale. Questo può essere fatto sia all'interno del sistema operativo inviando un segnale per lo spegnimento, sia dando il comando system_powerdown nel monitor QEMU. Questo sarà equivalente a premere una volta il pulsante di spegnimento: il sistema operativo all'interno della macchina virtuale si chiuderà in modo controllato.
Installazione del sistema operativo
La macchina virtuale ha accesso completo ai dischi del server e può quindi essere utilizzata per installare manualmente il sistema operativo. L'unico limite riguarda la quantità di memoria RAM: non sempre l'immagine ISO può essere memorizzata nella RAM. Riserviamo quattro gigabyte di memoria RAM per l'immagine con /mnt:
mount -t tmpfs -o size=4G tmpfs /mnt
Carichiamo anche l'immagine di installazione del sistema operativo 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
Ora possiamo avviare la 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
Bandiera -boot d imposta l'avvio dal lettore CD. Ci colleghiamo con il client VNC e vediamo il boot loader di FreeBSD.

Poiché per accedere a Internet è stato utilizzato il DHCP per ottenere un indirizzo, potrebbe essere necessario avviarsi nel sistema appena installato e correggere le impostazioni di rete. In alcuni casi, potrebbe essere necessaria l'installazione dei driver per l'adattatore di rete, poiché la scheda di rete installata sul server e quella emulata nella VM sono diverse.
Conclusione
Questo metodo di organizzazione dell'accesso remoto alla console del server consuma parte delle risorse del server, tuttavia non presenta requisiti particolari per l'hardware del server, quindi può essere realizzato in condizioni praticamente qualsiasi. L'uso di questa soluzione consente di semplificare notevolmente la diagnosi di malfunzionamenti software e il ripristino della funzionalità del server remoto.
Fonte: habr.com
