
Il debug dell'avvio del sistema operativo sui server senza KVM è un compito complesso. Creiamo un KVM-over-IP attraverso l'immagine di ripristino e una macchina virtuale.
In caso di problemi con il sistema operativo , l'amministratore carica un'immagine di ripristino e svolge i lavori necessari. Questo metodo funziona bene quando la causa del guasto è 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 il processo di avvio 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 possono essere situazioni in cui tutte le tecnologie indicate non sono disponibili. Tuttavia, non è la fine. Se il server può essere riavviato da remoto con un'immagine di ripristino basata su un sistema operativo della famiglia Linux, è possibile organizzare rapidamente KVM-over-IP.
L'immagine di ripristino è un sistema operativo completo che risiede nella memoria volatile. In questo modo, possiamo eseguire qualsiasi software, comprese le macchine virtuali (VM). Pertanto, è possibile avviare una VM in cui 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 di blocco di tipo /dev/sdX, che possono essere trattati come normali file.
Alcuni hypervisor, come QEMU e VirtualBox, permettono di memorizzare i dati della VM in forma 'grezza', cioè solo i dati di memorizzazione senza i metadati dell'hypervisor. In questo modo, è possibile avviare la VM utilizzando i dischi fisici del server.
Questo approccio richiede risorse per avviare l'immagine di ripristino e la VM al suo interno. Tuttavia, con quattro o più gigabyte di memoria RAM, non si trattiene alcun problema.
Preparazione dell'ambiente
Per la macchina virtuale, puoi utilizzare un programma leggero e semplice , che di solito non fa parte dell'immagine di ripristino, quindi deve essere installato separatamente. L'immagine di ripristino che offriamo ai clienti è basata su , che utilizza il gestore di pacchetti pacman.
Per prima cosa bisogna assicurarsi che l'immagine di ripristino utilizzi le versioni più recenti 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à il seguente:
pacman -S qemu
Controlliamo 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 il lavoro.
Avvio della macchina virtuale
Prima di tutto, è 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, e 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 attraverso l'hypervisor utilizzando NAT (Network Address Translation);
- -enable-kvm — attiviamo la virtualizzazione completa KVM (Kernel Virtual Machine);
- -cpu host — diciamo alla CPU virtuale di ottenere tutte le funzionalità della CPU del server;
- -M pc — tipo di hardware PC;
- -smp 2 — la CPU virtuale deve essere dual-core;
- -vga std — scegliamo una scheda video standard che non supporta alte risoluzioni dello schermo;
- -drive file=/dev/sda,format=raw,index=0,media=disk
- file=/dev/sdX — percorso del dispositivo di blocco che rappresenta il disco del server;
- format=raw — indichiamo che nel file specificato tutti i dati sono memorizzati in forma 'grezza', 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 disco;
- -vnc :0, password — avviamo il server VNC predefinito su 0.0.0.0:5900, utilizzando la password per l'autenticazione;
- -monitor stdio — la comunicazione tra l'amministratore e QEMU avverrà attraverso i flussi standard di input/output.
Se tutto è in ordine, si avvierà il monitor QEMU:
Monitor QEMU 4.0.0 - digita 'help' per ulteriori informazioni
(qemu)
Abbiamo indicato che l'autenticazione avviene tramite password, ma non abbiamo specificato la password stessa. È possibile farlo inviando il comando change vnc password nel monitor QEMU. Nota importante: la password non può superare gli otto caratteri.
(qemu) modifica password vnc
Password: ******
Dopo di ciò, possiamo connetterci con qualsiasi client VNC, ad esempio Remmina, all'indirizzo IP del nostro server utilizzando la password che abbiamo specificato.


Ora possiamo non solo vedere eventuali errori nella fase di avvio, ma anche affrontarli.
Al termine del lavoro, è necessario spegnere la macchina virtuale. Questo può essere fatto sia dall'interno del sistema operativo emettendo il segnale di spegnimento, sia dando il comando system_powerdown nel monitor QEMU. Questo sarà equivalente alla pressione del pulsante di spegnimento: il sistema operativo all'interno della macchina virtuale si chiuderà correttamente.
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 è la quantità di memoria RAM: l'immagine ISO potrebbe non sempre essere memorizzata nella memoria RAM. Assegniamo quattro gigabyte di RAM per l'archiviazione dell'immagine in /mnt:
mount -t tmpfs -o size=4G tmpfs /mnt
Scarichiamo 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 è possibile 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
Flag -boot d imposta l'avvio dal lettore CD. Colleghiamoci con un client VNC e vediamo il bootloader di FreeBSD.

Poiché per accedere a Internet è stato utilizzato l'acquisizione dell'indirizzo tramite DHCP, 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 per organizzare l'accesso remoto alla console del server consuma alcune risorse del server, tuttavia non presenta particolari requisiti hardware e può quindi essere eseguito praticamente in qualsiasi condizione. L'uso di tale soluzione consente di semplificare notevolmente la diagnosi dei difetti software e il ripristino del funzionamento del server remoto.
Fonte: habr.com
