Contesto #
virt-clone è uno strumento della suite virt-install che crea copie di VM gestite da libvirt, duplicando configurazione e dischi con opzioni granulari.
È utile quando vuoi preparare ambienti di test, template derivati o VM “gemelle” senza riscrivere la definizione XML a mano.
Prerequisiti #
- Host Linux con
libvirtfunzionante - Pacchetto
virt-installinstallato (includevirt-clone) - VM sorgente già definita
- Spazio disco sufficiente per i volumi clonati
Verifica rapida:
virt-clone --version
virsh list --allDifferenza tra utente normale e sudo #
Con virt-clone la differenza non è solo sui permessi, ma anche sul contesto libvirt raggiunto:
- utente normale: può vedere/clonare VM della propria sessione (
qemu:///session) se presenti - con
sudo: opera di norma su VM di sistema (qemu:///system), incluse quelle in/var/lib/libvirt/images
Confronto pratico:
virsh uri
sudo virsh uri
virsh list --all
sudo virsh list --allEsempio esplicito su daemon di sistema senza dipendere da sudo:
virt-clone --connect qemu:///system --original <vm_sorgente> --name <vm_clone>Se lanci il comando da utente non abilitato a qemu:///system, l’errore tipico è legato ai permessi su socket libvirt o sui path disco di destinazione.
1. Sintassi minima #
Clonazione base da VM sorgente a nuovo nome:
virt-clone --original <vm_sorgente> --name <vm_clone> --auto-cloneEsempio:
virt-clone --original debian-base --name debian-lab01 --auto-cloneCon --auto-clone, virt-clone genera automaticamente i path dei nuovi dischi partendo da quelli della VM sorgente.
2. Variante manuale: selezione e destinazione dischi con –file #
Se vuoi controllo completo sui nuovi volumi, specifica i path manualmente con --file:
virt-clone \
--original <vm_sorgente> \
--name <vm_clone> \
--file /var/lib/libvirt/images/<vm_clone>.qcow2VM con più dischi:
virt-clone \
--original app-prod \
--name app-stage \
--file /var/lib/libvirt/images/app-stage-root.qcow2 \
--file /var/lib/libvirt/images/app-stage-data.qcow23. Rete e MAC automatici #
In genere virt-clone rigenera automaticamente i MAC address per evitare conflitti L2.
Puoi verificare subito dopo il clone:
virsh domiflist <vm_clone>Se operi in ambienti con policy rigide (DHCP reservation, ACL), valida sempre la nuova identità di rete prima dell’avvio.
4. Variante utile: clone senza avvio immediato #
Dopo la clonazione la VM è definita ma non avviata. Questo consente di fare hardening o tuning prima del primo boot:
virsh dumpxml <vm_clone> > <vm_clone>.xml
virsh edit <vm_clone>Controlli tipici pre-avvio:
- CPU/RAM adeguate al nuovo ruolo
- path disco e permessi corretti
- rete collegata al bridge/network desiderato
5. Verifica post-clone #
Controlla che sorgente e clone siano entrambe presenti:
virsh list --allConfronta informazioni principali:
virsh dominfo <vm_sorgente>
virsh dominfo <vm_clone>Avvia la VM clonata:
virsh start <vm_clone>Verifica stato runtime:
virsh domstate <vm_clone>6. Errori comuni #
Nome già esistente
Se il nome target è già definito, scegli un nuovo --name o rimuovi la definizione non necessaria.
Path disco già occupato
Usa path univoci in --file per evitare overwrite o collisioni.
Spazio insufficiente
La clonazione fallisce durante la copia: controlla spazio disponibile su storage pool e filesystem host.
Permessi/SELinux
Se i dischi sono in path non standard, allinea ownership, context e policy prima dell’avvio.
Note operative #
- Esegui sempre il clone a VM sorgente spenta quando cerchi consistenza massima dei dati.
- Per provisioning massivo valuta template cloud-init e immagini golden, invece di cloni manuali ripetuti.
- Dopo il primo boot aggiorna hostname, SSH host keys e identificativi applicativi della VM clonata.