venerdì 13 marzo 2009

VMWare ESXi: Come clonare una virtual machine

La virtualizzazione è ormai alla portata di tutti sia dal punto di vista della semplicità delle operazioni richieste sia per il costo molto ridotto. In considerazione del successo che sta avendo il post che ho scritto qualche mese fa (VMware Server 2.0 Firefox 3.0.1 e vi web access) mi sembra utile condividere qualche informazione a proposito di alcune operazioni non documentate.

Tutti i vendor ormai propongono soluzioni di virtualizzazione e paravirtualizzazione gratuite, tra questi è presente ovviamente anche VMWare (che ha la percentuale maggiore di clienti) con il suo ESXi; per le differenze tra il gratuito ESXi ed il costoso Infrastructure (nuovo nome per ESX server) vi rimando a questa pubblicazione ufficiale: VMWare ESX and ESXi comparison.

ESXi è un ottimo prodotto ma ha un alcuni limiti che possono risultare bloccanti, tra questi quello più scocciante è non potere clonare le virtual machine. Altri prodotti VMWare lo permettono in maniera nativa (e molto semplice), in questo caso invece l'unica soluzione sembrerebbe essere quella di utilizzare il VMWare converter (gratuito). L'inconveniente più scocciante nell'utilizzare il converter è l'esponenziale aumento dei tempi necessari per l'operazione di cloning (o più precisamente in questo caso: conversione).

Per ovviare a questo limite è però possibile utilizzare un metodo non documentato! Mi riferisco al Tech Support Mode che VMWare ha descritto solo in questo articolo nella loro knowledge base: Tech support mode for emergency support.

E' sufficiente recarsi davanti al proprio server premere ALT+F1 e digitare (i caratteri non si vedranno sul video): unsupported; a questo punto vi si presenterà la richiesta della password e dopo averla inserita accederete ad una shell.

Oltre a non essere documentato questo metodo è anche non supportato (come chiaramente segnalato da un messaggio di colore rosso) quindi fate molta attenzione alle operazioni che eseguite.

Per prima cosa abilitate la possibilità di accedere in ssh al vostro server: editate il file xinetd.conf (vi /etc/inetd.conf) togliendo il commento (#) nel rigo relativo (ssh) e riavviate i servizi (/sbin/services.sh restart).

A questo punto per clonare una virtual machine sarà sufficiente:

- spegnere la virtual machine che si vuole clonare;
- creare la cartella sul vostro datastore utilizzando il datastore browser - Connettetevi al server ESXi utilizzando VMWare infrastructure client e fate doppio click sul vostro datastore da Configuration - Storage (ES: vm02);
- copiare il file con estensione vmdk (Es: vm01.vmdk) dalla cartella della virtual machine da clonare alla cartella appena creata (vm02) - Fate click con il tasto destro del mouse sul nome del file e selezionate copia e proseguite con l'ovvio incolla nella directory appena creata (la procedura può richiedere del tempo in funzione delle dimensioni dei dischi della macchina virtuale);

Adesso sarà necessario connettersi in ssh al server ed eseguire alcuni comandi per terminare l'operazione di clone:

- spostarsi nella directory della nuova virtual machine: cd /vmfs/volumes/nomedelvostrodatastore/vm02;
- rinominare il file che avete copiato avendo cura di utilizzare lo stesso nome della directory che avete creato in precedenza: mv vm01.vmdk vm02.vmdk;
- rinominare l'altro file che trovate nella cartella della virtual machine: mv vm01-flat.vmdk vm02-flat.vmdk;
- editare il file vm02.vmdk e modificare opportunamente il riferimento al file nel rigo successivo ad Extent description: vi vm02.vmdk;

Per terminare l'operazione, utilizzando il VMWare infrastructure client, creare una nuova virtual machine e scegliere la configurazione custom. Al momento della configurazione del virtual disk selezionare: use an existing virtual disk e scegliere nel vostro datastore il file con estensione vmdk che avete appena rinominato.

Adesso sarà possibile avviare la nuova virtual machine clonata (naturalmente dovrete avere l'accortezza di modificare hostname, ip etc..).

Ricordate di ripristinare il commento nel file /etc/xinetd.conf per inibire nuovamente l'accesso in ssh che altrimenti potrebbe rendere meno sicura la vostra installazione.

A disposizione per eventuali chiarimenti.

8 commenti:

morellik ha detto...

Ciao,
ho seguito i tuoi suggerimenti, ma non riesco a fare ssh sull'ESXi server free.
Ricevo sempre connection refused, qualche suggerimento?

Grazie

Marco ha detto...

Ciao,

hai effettivamente abilitato l'accesso tramite ssh e riavviato i servizi come indicato in questo paragrafo?

"Per prima cosa abilitate la possibilità di accedere in ssh al vostro server: editate il file xinetd.conf (vi /etc/inetd.conf) togliendo il commento (#) nel rigo relativo (ssh) e riavviate i servizi (/sbin/services.sh restart)."

morellik ha detto...

Si', ho seguito passo passo i tuoi suggerimenti ma non riesco a fare ssh.
La riga che dovrebbe abilitare l'ssh in /etc/inetd.conf mi pare un po' strana, non c'e' nessun riferimento a qualche demone ssh.

A parte questo, credi che la procedura che hai illustrato possa venire usata anche per migrare macchine virtuali da un server ad un altro?

Grazie

Marco ha detto...

Questa è la riga di cui parliamo:

ssh stream tcp nowait root /sbin/dropbearmulti dropbear ++min=0,swap,group=shell -i

Se hai seguito la procedura indicata è possibile che ci sia un firewall che inibisce il traffico verso la porta 22?

La procedura ti dovrebbe permettere anche la copia/migrazione tra due server ESXi.

morellik ha detto...

Esatto, la riga e' proprio quella.

Se non e' interno all'ESXi, non ci sono firewall nel mezzo che inibiscono il traffico sulla porta 22.

Quello che mi interessa e' poter migrare da un server ESXi ad un altro alcune macchine virtuali. Secondo te l'abilitazione della porta ssh e' un passo essenziale oppure posso farne a meno? Mi sfugge un attimo come posso portare una macchina virtuale su un altro server non potendo fare scp o qualcosa di simile.

Come da te segnalato, sto provando anche il Converter per fare la stessa cosa, ma per ora si blocca perché facendo avviare una macchina virtuale 'ibrida' sul server di destinazione (credo per fare poi la copia via ssh), questa si aspetta un DHCP(che non c'è su quella rete) per ottenere un indirizzo IP e quindi va in errore prima di far partire la copia.

Scusa se ti tedio...

Marco ha detto...

Accedendo al server ESXi in ssh puoi lanciare le copie in scp verso il server di destinazione.

Non ho ben capito l'operazione che provi a compiere utilizzando il Converter, comunque dopo avere spento la macchina virtuale che si vuole copiare è sufficiente indicare indirizzi IP e credenziali dei server di destinazione ed origine per effettuare la copia.

morellik ha detto...

Niente da fare, ssh non funziona.
Ho guardato con nmap le porte aperte sul server ESXi e non e' presente alcuna 22.
Ho provato un ssh sulla porta 5989 segnalata come aperta ma con servizio sconosciuto. L'errore è ssh_exchange_identification: Connection closed by remote host
di solito imputabile al tcpwrapper e risolvibile mettendo sshd in hosts.allow.
Ma in questo caso non funziona niente.

Anonimo ha detto...

Disabilita il firewall del tuo pc e tutto funziona.
SSH prevede una connessione in entrata dall'host che si sta tentando di contattare...