Istruzioni dettagliate sulla copia di macchine virtuali utilizzando blocksync.py
Queste istruzioni si applicano a una VM che utilizza un disco fornito da LVM e presuppone che Python si trovi su ciascuno degli host
Scarica lo script blocksync.py da https://gist.github.com/rcoup/1338263 e inserisci l'host di origine e di destinazione nella cartella / home / utente.
Precursore
- Dovrai avere accesso "ssh" a entrambe le macchine (sorgente e destinazione) per il tuo utente.
Dovrai anche avere l'accesso 'sudo' a 'root' su entrambe le macchine.
In alternativa, puoi fare tutto come root, ma solo se la tua chiave ssh ti dà l'accesso root almeno al computer di destinazione. ** In questo caso, rimuovere il nome utente dalle righe di comando.
Impostazioni di esempio
- La macchina virtuale si trova sull'host dom0 noto come chewie
- La destinazione desiderata sull'host dom0 noto come darth e qui aveva un IP interno 10.10.10.38 (per il nostro esempio)
- Nel nostro caso reale utilizziamo centos 7 come sistema operativo dom0 su entrambe le macchine
- La macchina VIRTUALE in questo caso che stiamo spostando si chiama LARRY
- L'utente che esegue l'azione è USER (che sarà il tuo nome)
- DOM0 indica il server fisico effettivo
Procedura
Passaggi iniziali sull'host di origine
- Accedere all'host dom0 che attualmente ha la macchina (l'host "sorgente"), ad esempio:
ssh user@chewie.domainname.com.au
- Rimani come tuo utente, quindi non diventare utente sudo * Elenca le macchine con
sudo virsh: tutti
- Scarica la definizione della macchina usando, ad esempio:
sudo virsh dumpxml larry> larry.xml
Copia la definizione di dump nella nuova macchina (l'host "target"), ad esempio:
scp -p larry.xml 10.10.10.38:larry.xml
è possibile modificare l'ip interno con il nome del server dom0 di destinazione ** Nota: è consigliabile utilizzare l'indirizzo IP per la destinazione, ad es .: scp -p larry.xml user@10.10.10.38: larry.xml
Se non è possibile copiare a causa di chiavi il gatto larry.xml e copiarlo Quindi è possibile ssh in un'altra macchina e creare file e incollarlo.
Trova la dimensione e il nome del disco della VM usando
sudo lvs --units B
.
** Il comando sopra dovrebbe mostrare la dimensione esattamente in byte. ** Il nome del disco della macchina si trova nella prima colonna dell'elenco, il suo gruppo di volumi nella seconda e la dimensione nell'ultima. ** Determina il nome del dispositivo come / dev // ** Verifica con un comando 'll' Ad esempio, in questo output: vm_larry vg1 -wi-ao ---- 69793218560B
LV VG Attr LSize Pool Dati origine% Meta% Sposta registro Cpy% Sincronizzazione Converti
lv_root vg1 -wi-ao ---- 53687091200B
lv_swap vg1 -wi-ao ---- 17179869184B
vm_vsrv1 vg1 -wi-ao ---- 193273528320B
vm_vsrv10 vg1 -wi-ao ---- 64424509440B
vm_vsrv11 vg1 -wi-ao ---- 161061273600B
vm_vsrv12 vg1 -wi-ao ---- 204010946560B
vm_vsrv2 vg1 -wi-ao ---- 140110725120B
vm_vsrv3 vg1 -wi-ao ---- 128849018880B
vm_larry vg1 -wi-ao ---- 69793218560B
vm_vsrv5 vg1 -wi-ao ---- 257698037760B
vm_vsrv6 vg1 -wi-ao ---- 64424509440B
vm_vsrv7 vg1 -wi-ao ---- 161061273600B
vm_vsrv8 vg1 -wi-ao ---- 64424509440B
vm_vsrv9 vg1 -wi-ao ---- 214748364800B
Passaggi iniziali sull'host di destinazione
- Accedi all'host di destinazione, ad es
ssh user@darth.domainname.com.au
- Resta come il tuo utente. cioè non diventare root.
Creare un file di definizione del volume, ad esempio:
vi larry.domainname.com.au-vol.xml
o nano larry.domainname.com.au-vol.xml
con le seguenti righe: NOTA: sarà necessario prendere la dimensione in byte dalla VM originale e inserirla nello script seguente. Il comando sulla macchina di origine per dimensione era sudo lvs --units B
<volume type='block'>
<name>larry.domainname.com.au</name>
<capacity unit='bytes'>69793218560</capacity>
<allocation unit='bytes'>69793218560</allocation>
<target>
<path>/dev/centos/larry.domainname.com.au</path>
<permissions>
<mode>0600</mode>
<owner>0</owner>
<group>6</group>
<label>system_u:object_r:fixed_disk_device_t:s0</label>
</permissions>
</target>
</volume>
Nota: questa definizione è per un disco di 69793218560 byte per larry VM, modificare se necessario per la VM effettiva.
Nota: il nome e l'ultima parte del percorso devono corrispondere e verranno utilizzati come nome del nuovo disco.
Crea il nuovo disco dalla definizione, usando
sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml
dirà Vol larry.domainname.com.au creato da larry.domainname.com.au-vol.xml
Rendi accessibile il file del dispositivo disco:
sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au
sudo chmod g + rw /dev/mapper/centos-larry.domainname.com.au
Modifica la definizione xml copiata, ad esempio:
vi larry.xml
Trova la definizione del disco nel file (cerca "source dev =") e sostituisci il dispositivo con quello appena creato (puoi ls / dev / centos / per vedere vm), ad esempio: / dev / drbd4 -> / dev / CentOS / larry.domainname.com.au
Questo cambio di ponte è stato unico per la nostra situazione.
** Trova eventuali riferimenti a "br1" nelle stanze dell'interfaccia e modificalo in "br0" ad es. Stai cambiando il bridge sorgente in modo che la linea sia così
Passaggi finali sull'host di origine
Accedi all'host di origine, ad es
ssh user@chewie.domainname.com.au
La migliore pratica sarebbe quella di spegnere la VM sull'host di origine prima di eseguire la sincronizzazione finale, ma non è necessario. (arresto virsh NameOfMachine)
Se non si trova già sull'host di origine, scaricare lo script blocksync.py da https://gist.github.com/rcoup/1338263
Se il tuo nome utente è utente (ad esempio), copia lo script blocksync.py in entrambe le macchine in / home / user e chown user: user e chmod 755 lo script.
- Se non si trova già sull'host di destinazione, copiarlo lì, ad esempio:
scp -p blocksync.py user@10.10.10.38: blocksync.py
- Usalo per copiare il disco di origine sul disco di destinazione, ad es
Comando che esegue la copia
sudo -E python blocksync.py / dev / vg1 / vm_larry user@10.10.10.38 /dev/mapper/centos-larry.domainname.com.au -b 4194304
Nota: il primo nome del dispositivo è per l'host di origine, come determinato dal comando 'lvs'; questo proviene da un host [[chewie]] di origine.
Nota: questo distruggerà il contenuto del disco di destinazione, assicurati che /dev/mapper/centos-larry.domainname.com.au sia corretto!
Nota: la sincronizzazione richiederà molto tempo: circa 100 secondi per gigabyte, ovvero 90 minuti per un disco da 60 gigabyte.
Tuttavia, è possibile eseguire una sincronizzazione mentre la VM è in uso; le sincronizzazioni successive possono essere fino al 25 percento più veloci
Lo script stamperà i parametri che sta utilizzando (potrebbe esserci un messaggio su un modulo obsoleto, va bene). Successivamente, mostra il comando ssh che sta usando ed esegue (vedrai il messaggio del personale autorizzato solo quando lo fa). Durante la sincronizzazione, visualizzerà un totale parziale di blocchi copiati e la sua velocità media. Infine, stampa un messaggio di completamento con il numero di secondi necessari.
Cose da sapere
È possibile annullare la sincronizzazione con CTRL C e riavviarlo in seguito eseguendo nuovamente il comando
Passaggi finali sull'host di destinazione
- Accedi all'host di destinazione, ad es
ssh user@darth.domainname.com.au
- Creare la macchina virtuale, ad esempio:
virsh definisce larry.xml
- Avviare la macchina appena definita, ad esempio:
sudo virsh avvia larry
- Contrassegnalo per l'avvio all'avvio dell'host, ad esempio:
sudo virsh avvio automatico larry
Nota: potrebbe essere necessario modificare i dettagli della VM in base al nuovo ambiente.