Virtualizzazione

Concetti base, hypervisor e macchine virtuali (VM)

Capire davvero cosa succede “sotto al cofano”: host/guest, Type 1 vs Type 2, risorse virtuali, rete virtuale, storage e snapshot. Con esempi concreti su Microsoft Hyper-V e Linux KVM/libvirt.
Che cos’è la virtualizzazione (in pratica)

La virtualizzazione è una tecnica che permette di eseguire più sistemi operativi (detti guest) sullo stesso hardware fisico (detto host), isolandoli tra loro e distribuendo le risorse (CPU, RAM, disco, rete) in modo controllato. Il software che crea e gestisce queste “macchine” si chiama hypervisor.

  • Host: la macchina fisica (o il sistema che controlla l’hardware).
  • VM (Virtual Machine): un computer “virtuale” con vCPU, vRAM, vDischi, vNIC.
  • Guest OS: il sistema operativo dentro la VM (Linux, Windows, BSD, ecc.).
Una VM non è un “programma qualsiasi”: è un ambiente che emula un PC completo (o quasi) e quindi richiede risorse dedicate. L’obiettivo è ottenere isolamento, gestione e flessibilità senza moltiplicare l’hardware fisico.
Requisito fondamentale: CPU con estensioni di virtualizzazione (Intel VT-x / AMD-V) abilitate in BIOS/UEFI. Senza, molte soluzioni moderne non funzionano o funzionano molto peggio.
La virtualizzazione migliora l’isolamento, ma non è “magia”: un host non aggiornato o configurato male può diventare il punto unico di fallimento (e di compromissione) di tutte le VM.
Hypervisor: Type 1 e Type 2 (differenza che conta davvero)

Gli hypervisor si dividono spesso in due famiglie. La distinzione è utile perché spiega prestazioni, stabilità e contesto d’uso.

Type 1 (bare-metal)
  • Gira “a contatto” con l’hardware: è la base della piattaforma.
  • Tipico di server e datacenter: prestazioni e isolamento migliori.
  • Esempi: Microsoft Hyper-V, VMware ESXi, Xen.
Type 2 (hosted)
  • È un’applicazione sopra un OS “normale” (Windows/macOS/Linux desktop).
  • Comodo per studio e test (laboratorio, sviluppo, demo).
  • Esempi: VirtualBox, VMware Workstation/Fusion, Parallels.
Nota: alcune piattaforme moderne (es. Hyper-V su Windows) hanno un modello architetturale “ibrido” dal punto di vista percepito dall’utente. In ambito server/enterprise, però, Hyper-V è classificato come hypervisor di tipo 1.
Dentro una VM: CPU, RAM, disco e rete “virtuali”

Una macchina virtuale è definita da un insieme di risorse e dispositivi virtuali. L’hypervisor traduce le richieste del guest in operazioni reali sull’hardware dell’host, applicando regole di scheduling, quote e isolamento.

  • vCPU: core logici assegnati alla VM (in realtà “tempo CPU” schedulato sull’host).
  • vRAM: memoria assegnata; può essere statica o dinamica (dipende dalla piattaforma).
  • vDisk: disco virtuale (file) oppure volume/LUN; esempi: VHD/VHDX, qcow2, raw.
  • vNIC: scheda di rete virtuale collegata a un virtual switch (vSwitch).
  • Driver “synthetic”: dispositivi virtuali ottimizzati (meno emulazione, più performance).
Regola pratica: prestazioni migliori quando il guest usa driver e dispositivi “paravirtualizzati” (synthetic) invece di dispositivi emulati “legacy”.
Snapshot, checkpoint e template (cosa sono e quando usarli)

Gli snapshot (in Hyper-V spesso chiamati checkpoint) salvano lo stato di una VM per poter tornare indietro. Sono utili in laboratorio e test, ma vanno usati con criterio in produzione.

  • Snapshot/Checkpoint: punto di ripristino (disco e/o memoria) prima di una modifica rischiosa.
  • Overlay / Copy-On-Write: il disco base resta invariato e si salvano solo le differenze.
  • Template: VM “modello” (o immagine base) da clonare rapidamente per creare molte VM simili.
In produzione, troppi snapshot possono aumentare latenza I/O e complessità di gestione. Nelle esercitazioni, invece, sono perfetti per sperimentare e “tornare indietro” in pochi secondi.
Esempio reale: Microsoft Hyper-V (architettura e concetti chiave)

In Hyper-V l’isolamento avviene tramite partition: una root partition (con Windows e lo stack di gestione) e una o più child partitions che ospitano i guest. La comunicazione I/O ad alte prestazioni usa il VMBus e il modello VSP/VSC (provider nella root, client nel guest).

  • Root partition: gestisce dispositivi fisici e crea/gestisce le VM.
  • Child partition: ogni VM è una partizione “figlia” isolata.
  • VMBus: canale ad alte prestazioni tra root e guest per dispositivi synthetic.
In laboratorio: Hyper-V è ottimo per creare rapidamente VM Windows/Linux e simulare scenari server (Active Directory, DNS, DHCP, firewall, routing, ecc.).
Requisiti e consigli pratici per Hyper-V

Prima di installare Hyper-V, verifica che la macchina supporti correttamente la virtualizzazione hardware e che sia abilitata in BIOS/UEFI.

  • CPU 64 bit con VT-x/AMD-V e (per il ruolo hypervisor) SLAT.
  • RAM: non serve “tantissima” per partire, ma più VM = più RAM necessaria.
  • Storage: SSD consigliato, soprattutto se usi molte VM o snapshot.
Suggerimento didattico: far notare agli studenti la differenza tra assegnare “troppe vCPU” e assegnare il giusto, e come cambia la reattività complessiva dell’host.
Hyper-V: creare una VM (PowerShell) + rete con vSwitch

Esempio completo: crea uno switch esterno, poi una VM con disco VHDX e avvio da ISO. Nomi e percorsi sono modificabili in base al laboratorio.

# 1) Crea un vSwitch esterno (collegato alla scheda di rete fisica)
Get-NetAdapter
New-VMSwitch -Name "vSwitch-Esterno" -NetAdapterName "Ethernet" -AllowManagementOS $true

# 2) Crea una VM Generation 2
New-VM -Name "SRV-LAB01" -Generation 2 -MemoryStartupBytes 2GB -SwitchName "vSwitch-Esterno"

# 3) Crea/aggancia un disco VHDX da 60 GB
New-VHD -Path "D:\VM\SRV-LAB01\disk0.vhdx" -SizeBytes 60GB -Dynamic
Add-VMHardDiskDrive -VMName "SRV-LAB01" -Path "D:\VM\SRV-LAB01\disk0.vhdx"

# 4) Monta l'ISO (installazione OS)
Set-VMDvdDrive -VMName "SRV-LAB01" -Path "D:\ISO\Windows_Server.iso"

# 5) Configura vCPU e avvia
Set-VMProcessor -VMName "SRV-LAB01" -Count 2
Start-VM -Name "SRV-LAB01"
Esempio di verifica (output tipico):
Name          SwitchType NetAdapterInterfaceDescription
----          ---------- ------------------------------
vSwitch-Esterno External  Intel(R) Ethernet Connection ...

Get-VM SRV-LAB01
Name      State CPUUsage(%) MemoryAssigned(M)
----      ----- ----------   ----------------
SRV-LAB01 Running  2         2048
Se la VM non “vede” rete o va lenta, controlla: driver guest, tipo di switch (esterno/interno), risorse assegnate e che non ci sia oversubscription eccessiva di RAM/CPU sull’host.
Esempio reale: Linux KVM + QEMU + libvirt (stack tipico)

Nel mondo Linux, KVM è un modulo del kernel che consente al kernel di comportarsi da hypervisor sfruttando VT-x/AMD-V. Spesso KVM lavora insieme a QEMU (emulazione/IO), libvirt (API/daemon di gestione) e strumenti come virt-manager o virsh.

  • KVM: virtualizzazione hardware nel kernel (core hypervisor).
  • QEMU: gestisce dispositivi, immagini disco, emulazioni e molte funzioni IO.
  • libvirt: gestione centralizzata (creazione VM, reti virtuali, storage pool).
Formati disco: raw (semplice e veloce) e qcow2 (copy-on-write, snapshot/overlay, thin provisioning).
Linux: installare KVM/libvirt e creare una VM (virt-install)

Esempio per una distro Debian/Ubuntu: installazione pacchetti, verifica, poi creazione VM Linux con disco qcow2 e rete NAT di libvirt.

# 1) Installa lo stack base (Debian/Ubuntu)
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst bridge-utils

# 2) Abilita e avvia libvirtd
sudo systemctl enable --now libvirtd

# 3) Verifica che KVM sia disponibile
lsmod | grep kvm
virsh list --all

# 4) Crea una VM (esempio Ubuntu Server)
sudo virt-install \
  --name srv-lab01 \
  --memory 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/srv-lab01.qcow2,size=30,bus=virtio \
  --os-variant ubuntu22.04 \
  --cdrom /iso/ubuntu-server.iso \
  --network network=default,model=virtio \
  --graphics none \
  --console pty,target_type=serial
Esempio di verifica (output tipico):
$ lsmod | grep kvm
kvm_intel             372736  0
kvm                  1032192  1 kvm_intel

$ virsh list --all
 Id   Name        State
----------------------------
 1    srv-lab01    running
Per una gestione “visuale” in laboratorio puoi installare anche virt-manager. Per reti avanzate (bridge verso LAN reale) si usano bridge Linux o Open vSwitch, con attenzione a IP e DHCP.
Rete virtuale: scenari tipici (e cosa spiegare agli studenti)

Una parte fondamentale della virtualizzazione è la rete: collegare le VM tra loro, all’host e a Internet. I concetti sono simili su Hyper-V e su KVM/libvirt, anche se cambiano nomi e strumenti.

Modalità “esterna” (bridged)
  • Le VM sono nella LAN reale: prendono IP dalla rete (DHCP o statico).
  • Perfetta per simulare server reali visibili da altri PC di laboratorio.
  • Richiede attenzione a firewall, DHCP e conflitti IP.
Modalità NAT (tipica default)
  • Le VM escono su Internet tramite NAT dell’host/hypervisor.
  • Comoda: riduce esposizione e semplifica l’accesso a Internet.
  • Per accesso dall’esterno servono port-forwarding o regole dedicate.
Errore tipico in laboratorio: “la VM non pinga nulla” perché è su rete NAT senza DNS corretti, oppure è su bridged ma il DHCP della LAN non raggiunge la VM (o la porta è bloccata).
Prestazioni e best practice (quelle che fanno la differenza)

La virtualizzazione è efficiente, ma non gratuita: la qualità dipende da configurazione e hardware. Queste regole pratiche evitano il 90% dei problemi in laboratorio e in ambienti reali.

  • Non esagerare con le vCPU: 2 vCPU spesso bastano per server didattici; troppe vCPU peggiorano lo scheduling.
  • RAM: evita overcommit aggressivo; se l’host va in swapping, tutte le VM “collassano”.
  • Disco: SSD consigliato; dischi dinamici e snapshot aumentano frammentazione logica e latenza.
  • Rete: usa modelli virtio/synthetic dove possibile; evita NIC “legacy” se non necessarie.
  • Backup: snapshot non è backup; serve una copia esterna dei dati (e test di ripristino).
Ottimo esercizio: far misurare agli studenti tempi di boot, uso CPU/RAM e velocità disco tra VM con disco qcow2 vs raw (o VHDX dinamico vs fisso), e discutere pro/contro.
Riepilogo rapido (da ripetere a voce)
  • Virtualizzazione = più sistemi guest isolati sullo stesso host, gestiti da un hypervisor.
  • Type 1 (server) vs Type 2 (desktop): cambia il contesto d’uso e spesso anche l’efficienza.
  • Una VM è fatta di vCPU, vRAM, vDischi e vNIC collegate a un vSwitch (bridged/NAT/privato).
  • Snapshot/checkpoint sono ottimi per test, ma non sostituiscono un backup e vanno gestiti con criterio.
  • Esempi concreti: Hyper-V (root/child partition, VMBus) e Linux KVM+QEMU+libvirt (virt-install/virsh).