Backup gratuito dei server vmware esx

Di seguito un modo per fare il backup integrale, gratuito, con rotazione, notifica via email, memorizzazione su nas di rete,… delle macchine virtuali presenti su un server ESXi dalla versione 2 alla versione 6.

Ingredienti

  • server esxi
  • connessione ssh al server esxi
  • NAS che supporti NFS

Preparazione

Come sappiamo ESXi supporta il file system NFS rendendo quindi possibile montare la nostra unità NAS per accogliere i backup creati. Ovviamente anche quest’ultima deve supportare il protocollo di rete NFS.

Operazioni preliminari: aggiungere un datastore usando la condivisione NFS di un’unità NAS

Prima di iniziare a creare i nostri backup dobbiamo preparare loro una destinazione idonea ed una delle migliori possibili è sicuramente un’unità NAS. Una volta creata su di essa una partizione con NFS possiamo montarla per farla leggere anche al nostro server ESXi come datastore.

Per farlo apriamo vSphere Client e portiamoci sul tab

Configuration > Storage > Add Storage

Nella selezione del tipo di storage spuntiamo Network File System e andiamo avanti.

Nella finestra che si apre dobbiamo andare a inserire i dati della condivisione NFS che vogliamo collegare:

  • Server: nome host o indirizzo IP dell’unità NAS
  • Folder: percorso della directory NFS
  • Datastore Name: il nome che vogliamo assegnare al nostro nuovo datastore
aggiunta nas

Se i dati inseriti sono corretti vedremo la nostra unità NAS aggiunta all’elenco dei datastore:

elenco datastore

 

Backup con ghettoVCB

Iniziamo ora con le operazioni vere e proprie di backup scaricando il file .zip di ghettoVCB e caricando sull’host ESXi i 2 script bash.

Queste sono le operazioni da fare se vi trovate su un ambiente Linux/Osx:

Scaricate il file zip

wget https://github.com/lamw/ghettoVCB/archive/master.zip

Scompattate l’archivio

unzip master.zip

E caricate tramite scp i 2 file bash sull’host ESXi all’interno del datastore:

scp ghettoVCB-master/*.sh root@192.168.0.200:/vmfs/volumes/datastore1

 

Come vedete l’archivio master.zip contiene anche altri file. Useremo però solo i 2 principali perchè sono sufficienti alle operazioni di backup e restore.

Ora che abbiamo caricato i file che ci interessano sul server ESXi colleghiamoci ad esso usando il terminale se siamo su ambiente Linux o usando PuTTY se il sistema operativo è Windows.

Portiamoci sulla directory del datastore dove risiedono le nostre macchine virtuali e dove abbiamo salvato i 2 script di ghettoVCB:

cd /vmfs/volumes/datastore1

e creiamo una directory dove andare a mettere i file per il backup:

mkdir ghettoVCB
mv *.sh ghettoVCB

Dando il comando ls vediamo come oltre alla directory appena creata vi siano anche le directory di tutte le macchine virtuali.

Entriamo ora nella directory ghettoVCB:

cd ghettoVCB

ed andiamo a editare il file ghettoVCB.sh usando l’editor vi:

vi ghettoVCB.sh

Individuiamo la seguente riga e modifichiamola con il nome che abbiamo dato al nostro datastore NFS:

VM_BACKUP_VOLUME=/vmfs/volumes/backupNAS

Questo è l’unico parametro strettamente necessario, le altre opzioni (quanti backup della stessa macchina mantenere sul datastore NFS, se comprimere o no i backup, ecc..) sono commentate in modo chiaro e possiamo perciò impostarle secondo i nostri bisogni.

Salviamo, chiudiamo il file e siamo pronti a fare il backup delle macchine virtuali.

Salvare tutte le macchine virtuali presenti sul server ESXi:

/vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh -a

Backup di una singola macchina virtuale espressamente indicata:

/vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh –m nome_macchina

Lanciato il comando l’operazione di backup si avvierà mostrando i risultati in output su video o, se indicato con l’opzione -l, sul file di log

Schedulare i backup

ghettoVCB sfrutta le risorse dell’hyervisor per i sui backup pertanto potremmo aver bisogno di schedulare questi nelle ore notturne o comunque di minor criticità.

Le istruzioni del cron sono memorizzare sul file

/var/spool/cron/crontabs/root

per prima cosa aggiungiamogli il permesso di scrittura:

chmod +w /var/spool/cron/crontabs/root

ora possiamo aprirlo in modifica:

vi /var/spool/cron/crontabs/root

In fondo al file scriviamo l’istruzione che vogliamo far partire specificando anche i parametri temporali.

30 1 * * * /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh -a -l /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB-backup-$(date +%d-%m-%y).log

salviamo e chiudiamo il file.

Come in crontab, i primi cinque campi indicano la frequenza con la quale eseguire il comando.

IMPORTANTE: ESXi usa sempre il tempo coordinato universale (UTC) pertanto dobbiamo calcolare il nostro fuso orario rispetto ad esso quando indichiamo l’ora nelle operazioni schedulate.

Per avere le modifiche funzionanti dobbiamo prima arrestare il demone crond e poi rilanciarlo:

kill $(pidof crond)
crond

Rendere persistenti i comandi schedulati

Le modifiche che abbiamo appena apportato a cron non sono persistenti. Vediamo quindi come renderle tali facendo in modo che vengano riscritte ad ogni riavvio.

ESXi esegue ad ogni suo avvio rc.local come avviene per altre distribuzioni Linux. Andiamo quindi ad editare questo script per fare in modo che ad ogni avvio vada a scrivere sul cron le istruzioni descritte sopra.

Per farlo apriamo il file

vi /etc/rc.local.d/local.sh

e inseriamo le seguenti righe in fondo al file subito prima di exit 0:

/bin/kill $(pidof crond)
/bin/echo "30 9 * * * /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh -a" >> /var/spool/cron/crontabs/root
crond

Invio dei log di backup via mail

Oltre che registrarli sul file come visto in precedenza, è possibile ricevere i log con gli esisti dei backup fatti anche via mail.

Andiamo quindi ad attivare questa funzionalità tornando ad editare lo script ghettoVCB.sh:

vi /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh

Scorriamo fino ad arrivare alla sezione #EMAIL CONFIGURATIONS e andiamo ad abilitare i log via mail, indicare il server SMTP e l’indirizzo al quale ricevere i log.

# Email log 1=yes, 0=no
EMAIL_LOG=1

# Email SMTP server
EMAIL_SERVER=ip o nome del server smtp

# Email FROM
EMAIL_FROM=root@ghettoVCB

# Email RCPT
EMAIL_TO=indirizzo@nostra_mail.it

Salviamo le modifiche e chiudiamo il file.

Abilitazione SMTP su firewall

Abbiamo ora impostato ghettoVCB in modo che ci invii i log via mail ma prima che ciò possa avvenire dobbiamo abilitare la porta SMTP in uscita che di default è chiusa dal firewall.

La directory con le regole del firewall è:

/etc/vmware/firewall/

ma anche qui non vengono mantenute le modifiche dopo il riavvio. Vediamo quindi come fare per rendere persistente l’apertura in uscita della porta 25 SMTP.

Creiamo il file smtp.xml nella directory ghettoVCB sul nostro datastore:

vi /vmfs/volumes/datastore1/ghettoVCB/smtp.xml

E incolliamo il seguente codice:

<ConfigRoot>
  <service id='1000'>
    <id>SMTP_Outbound</id>
    <rule>
      <direction>outbound</direction>
      <protocol>tcp</protocol>
      <porttype>dst</porttype>
      <port>25</port>
    </rule>
    <enabled>true</enabled>
    <required>false</required>
  </service>
</ConfigRoot>

chiudiamo salvando il file.

Per attivare subito la regola copiamo il file creato sulle regole del firewall:

cp /vmfs/volumes/datastore1/ghettoVCB/smtp.xml /etc/vmware/firewall/

e riavviamo il firewall stesso:

esxcli network firewall refresh

Per automatizzare queste operazioni in modo che avvengano ad ogni avvio di ESXi dobbiamo nuovamente editare lo script local.sh:

vi /etc/rc.local.d/local.sh

aggiungiamo anche le seguenti 2 righe in fondo al file ma sempre prima di exit 0:

cp /vmfs/volumes/datastore1/ghettoVCB/smtp.xml /etc/vmware/firewall/
esxcli network firewall refresh

poi salviamo e chiudiamo il file.

In questo modo ad ogni riavvio verrà copiata la regola per l’apertura in uscita della porta 25 di SMTP e riavviato il servizio del firewall.

Se vogliamo testare subito la nostra configurazione e vedere se riceviamo le mail lanciamo una simulazione di backup attraverso la funzione dryrun:

/vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh -a -d dryrun

Essendo una simulazione non viene scritto nessun backup ma possiamo vedere se la mail ci è arrivata correttamente all’indirizzo indicato nella configurazione.

N.B: ESXi non ha il supporto delle librerie SASL pertanto non è possibile utilizzare SMTP con autenticazione. Come client mail per inviare i log ESXi utilizza semplicemente Netcat.


 

Fonti: