REGISTRATI LOGIN

Backup delle VM Hyper-V senza spegnerle

Dal client lionbackup 0.2.0 basta indicare sotto hyperv: i nomi delle tue VM. Il client trova da solo tutti i file, ottiene uno stato coerente tramite il writer di Hyper-V e lo salva cifrato nel cloud. Non devi spegnere le VM.

Pubblicato il 13 novembre 2026 · dal client lionbackup 0.2.0

Gestione di Hyper-V su Windows Server 2025 con la VM FILESRV01 in esecuzione e la sua catena di checkpoint (interfaccia in tedesco)
Gestione di Hyper-V su Windows Server 2025: la VM di test FILESRV01 con la sua catena di checkpoint (interfaccia in tedesco).

Una VM è più di un .vhdx

Una VM Hyper-V è fatta di file in più posti: la configurazione (.vmcx, .vmrs, .vmgs) sotto “Virtual Machines”, i dischi virtuali da qualche parte sull'host e, per ogni checkpoint, un disco differenziale (.avhdx) che senza il disco padre non serve a nulla. Se mantieni questi percorsi a mano sotto files:, al checkpoint successivo dimentichi il nuovo .avhdx e la VM ripristinata non si avvia più.

A questo si aggiunge il blocco: una VM in esecuzione tiene i suoi dischi aperti in modo esclusivo. Finora il client li leggeva da una copia shadow senza writer VSS. Funzionava, ma con la sola coerenza da crash, come se qualcuno avesse staccato la corrente alla VM.

La configurazione: basta il nome

Il resto della configurazione resta invariato. La novità è la sezione hyperv::

lionbackup:
  environment: prod
  storagezone: "TUA-STORAGE-ZONE"
  project: "TUO-PROJECT-UUID"
  token: "TUO-WRITE-TOKEN"
  hyperv:
    vms:
      - FILESRV01
      - DC01
  encryption_keyfile: C:\lionbackup\key\lionbackup.pub
  tmp_directory: D:\lionbackup\tmp
  log_directory: C:\lionbackup\log
  compression_method: ZSTD
  compression_level: 6
  resume: true
  require_https: true

I nomi sono quelli mostrati da Get-VM. Con "*" al posto di un elenco, il client salva tutte le VM dell'host. Accanto può restare files:, ad esempio per le condivisioni sull'host, oppure mancare del tutto.

Metti tmp_directory su un volume con spazio sufficiente: il client vi scrive prima ogni VM, compressa e cifrata, e poi la carica.

PowerShell mostra la configurazione hyperv-host.yaml: progetto, zona de01-1, ambiente dev, sezione hyperv: con FILESRV01, token tramite --token-stdin
La configurazione del test: un progetto nel nostro ambiente dev, zona de01-1, sezione hyperv: con FILESRV01. Il token non è nel file, arriva tramite --token-stdin.

Cosa succede a ogni esecuzione

  1. Chiedere a Hyper-V. Per ogni VM il client recupera l'elenco aggiornato dei suoi file: configurazione, checkpoint e ogni disco con la sua catena .avhdx. Un nuovo checkpoint entra da solo nell'esecuzione successiva.
  2. Copia shadow con il writer di Hyper-V. Con DiskShadow, uno strumento incluso in Windows Server, il client crea una copia shadow a cui partecipa il writer di Hyper-V. Tutti gli altri writer VSS li esclude. Hyper-V fissa ogni VM in un punto coerente per quell'istante.
  3. Leggere, comprimere, cifrare. I dati vengono letti dalla copia shadow, esattamente i file indicati dal writer di Hyper-V. Tra questi c'è un checkpoint che Hyper-V crea solo per la durata del backup. Ogni VM diventa un backup a sé, compresso e cifrato end-to-end sull'host prima che un solo byte lasci la macchina.
  4. Caricare, poi concludere. Solo quando l'upload è riuscito il client segnala il backup come completato, e Hyper-V lo registra. Se l'esecuzione fallisce, segnala invece l'interruzione.

Online o offline

Il modo in cui Hyper-V fissa la VM dipende dal sistema guest. Se nel guest è attivo il servizio di integrazione per il backup tramite copia shadow del volume, si tratta di un backup online: la VM continua a funzionare e le applicazioni nel guest, ad esempio SQL Server o Active Directory, diventano coerenti tramite il loro VSS. Senza questo servizio Hyper-V esegue il backup offline: la VM viene messa per un attimo in stato salvato. In nessuno dei due casi va spenta. Il log indica quale caso si è verificato.

DiskShadow conosce solo backup VSS completi. Le applicazioni nel guest trattano quindi un backup online riuscito come qualsiasi backup completo a livello di host.

Se il client si interrompe bruscamente, ad esempio perché qualcuno termina l'attività, DiskShadow se ne accorge in pochi secondi, segnala l'interruzione ed elimina le copie shadow. La VM esce subito dallo stato di backup in corso.

Per provare, avvia un'esecuzione a mano in PowerShell come amministratore:

C:\lionbackup\bin\lionbackup-client.exe --config C:\lionbackup\conf\hyperv.yaml --progress-bar

Il token non deve per forza stare nella configurazione. Con --token-stdin il client lo legge dallo standard input, ad esempio da un file che solo gli amministratori possono leggere. Così non compare né nella configurazione né nella riga di comando, ed è così che è andato il nostro test. Il caso normale resta token: nella configurazione.

Get-Content C:\lionbackup\secret\write-token.txt | C:\lionbackup\bin\lionbackup-client.exe --config C:\lionbackup\conf\hyperv.yaml --token-stdin
PowerShell: client lionbackup con --token-stdin, copia shadow con i writer VSS, VM FILESRV01 salvata offline, upload di 20,2 MB, durata totale 57,7 secondi, END BACKUP segnalato
Un'esecuzione reale su Windows Server 2025 verso il nostro ambiente dev: copia shadow con i writer VSS, FILESRV01 salvata offline, 470 MB compressi a 20,2 MB e caricati. Solo dopo il client segnala il backup come completato.

Ogni notte, anche senza nessuno connesso

In produzione l'esecuzione va nell'Utilità di pianificazione. Servono diritti di amministratore, perché solo un amministratore può creare copie shadow. Con l'account SYSTEM e i privilegi più elevati l'attività parte anche quando nessuno ha effettuato l'accesso:

Register-ScheduledTask -TaskName "lionbackup Hyper-V" -Action (New-ScheduledTaskAction -Execute 'C:\lionbackup\bin\lionbackup-client.exe' -Argument '--config C:\lionbackup\conf\hyperv.yaml') -Trigger (New-ScheduledTaskTrigger -Daily -At 22:00) -User 'SYSTEM' -RunLevel Highest

Ripristino: restore e Import-VM

Il backup di una VM si ripristina come qualsiasi altro, con un token di lettura e la tua chiave privata. Un test completo con perdita totale simulata è in Ripristinare una VM Hyper-V dal cloud. In breve:

C:\lionbackup\bin\lionbackup-client.exe --config C:\lionbackup\conf\restore.yaml --list
C:\lionbackup\bin\lionbackup-client.exe --config C:\lionbackup\conf\restore.yaml --restore TUO-FILE-ID --identity E:\lionbackup.key --target D:\Restore

In D:\Restore\FILESRV01 trovi poi “Virtual Machines”, “Virtual Hard Disks” e “Snapshots”, organizzati come un'esportazione di Hyper-V. Compare-VM verifica prima se Hyper-V può acquisire la VM così com'è; l'elenco delle incompatibilità dovrebbe essere vuoto. Import-VM la crea poi come copia con un nuovo ID, così una VM originale ancora presente resta intatta. Infine rimuovi il checkpoint che Hyper-V ha creato solo per il backup:

$target = 'D:\Restore\FILESRV01'
$cfg  = Get-ChildItem "$target\Virtual Machines\*.vmcx" | Select-Object -First 1
$report = Compare-VM -Path $cfg.FullName -Copy -GenerateNewId `
  -VhdSourcePath "$target\Virtual Hard Disks" `
  -VirtualMachinePath 'D:\Hyper-V\FILESRV01-restore' `
  -VhdDestinationPath 'D:\Hyper-V\FILESRV01-restore\Virtual Hard Disks' `
  -SnapshotFilePath 'D:\Hyper-V\FILESRV01-restore'
$report.Incompatibilities | Format-List Message   # dovrebbe essere vuoto
$vm = Import-VM -CompatibilityReport $report
# Rimuovere il checkpoint creato da Hyper-V solo per il backup:
Get-VMSnapshot -VM $vm -SnapshotType Recovery | Remove-VMSnapshot
Rename-VM -VM $vm -NewName 'FILESRV01-ripristinato'   # optional

I dischi della VM importata puntano poi alla copia in D:\Hyper-V\FILESRV01-restore, non agli originali.

PowerShell: Compare-VM senza incompatibilità, Import-VM, rimozione del checkpoint di backup, entrambe le VM in funzione normale
Compare-VM segnala 0 incompatibilità, Import-VM crea la copia. Dopo, originale e copia funzionano normalmente.

Requisiti e limiti

PuntoCosa vale
HostWindows Server 2025 o 2022 con il ruolo Hyper-V; abbiamo testato su 2025.
DirittiIl client gira come amministratore, ad esempio come attività pianificata con l'account SYSTEM. La copia shadow (use_vss) resta attiva.
Senza DiskShadow o con errore del writerDiskShadow è uno strumento di Windows Server. Senza di esso, o se il writer fallisce, il client salva le VM solo con coerenza da crash e avvisa. Con on_writer_error: abort invece si interrompe.
Dove si trovano le VMVolumi locali di un host autonomo. Cluster Shared Volumes, condivisioni SMB, dischi pass-through e VHD Set vengono rifiutati con un messaggio, invece di essere saltati in silenzio.
AmbitoOgni esecuzione è un backup completo dell'intera VM. Il limite predefinito è di 100 GB per backup e si può aumentare su richiesta.

Cosa abbiamo testato

Su Windows Server 2025 con Hyper-V: una VM in esecuzione con una catena di checkpoint, un vero upload nel nostro ambiente dev, il backup come attività pianificata con l'account SYSTEM, l'interruzione brusca del client e un ripristino completo dal cloud con dati completi. Come è andato lo mostra l'articolo Ripristinare una VM Hyper-V dal cloud. L'ambiente dev è il nostro ambiente di test, i tuoi backup girano in prod. La VM di test non aveva un sistema operativo guest, quindi Hyper-V l'ha salvata offline.

Non abbiamo ancora verificato di persona un backup online con un vero guest. Anche Windows Server 2022 include DiskShadow e il writer di Hyper-V; i nostri test lì seguiranno.

Casi particolari: comandi prima e dopo il backup

Per i casi che hyperv: non copre, dal client 0.2.0 puoi far eseguire anche comandi tuoi. Un esempio è una VM che per il backup preferisci spegnere in modo pulito: pre_backup la spegne, post_snapshot la riavvia appena la copia shadow esiste, e il client legge poi dall'istantanea.

lionbackup:
  files:
    - D:\Hyper-V\LEGACY01
  hooks:
    pre_backup:
      - 'powershell -NoProfile -Command "Stop-VM -Name LEGACY01"'
    post_snapshot:
      - 'powershell -NoProfile -Command "Start-VM -Name LEGACY01"'
    timeout_sec: 3600

Metti i comandi tra apici singoli e raddoppia un ' al loro interno. Altrimenti due punti seguiti da uno spazio o un # nel comando rompono lo YAML. --validate mostra questi errori con il numero di riga.

Allo stesso modo puoi esportare prima una VM con Export-VM e salvare l'esportazione sotto files:.

Chi può modificare la configurazione può eseguire comandi. I comandi girano con i diritti del client, su un host Hyper-V quindi come amministratore. Salva perciò la configurazione in modo che solo gli amministratori possano modificarla.

Disponibilità

La sezione hyperv: e i comandi prima e dopo il backup arrivano con il client lionbackup 0.2.0. Il client è disponibile nei download, il codice sorgente è pubblico nel nostro repository. Come lionbackup protegge i tuoi dati lo trovi nella pagina Sicurezza.

Possiamo supportarti?

Configuriamo volentieri insieme a te il backup del tuo host Hyper-V: gratis, in videochiamata.

Fissa un appuntamento gratuito