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.
Gli hypervisor si dividono spesso in due famiglie. La distinzione è utile perché spiega prestazioni, stabilità e contesto d’uso.
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.
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.
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).
Prima di installare Hyper-V, verifica che la macchina supporti correttamente la virtualizzazione hardware e che sia abilitata in BIOS/UEFI.
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
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.
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
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.
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.