This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| backup_vmware [2015/05/05 16:48] – herwarth | backup_vmware [2015/05/05 17:44] (current) – herwarth | ||
|---|---|---|---|
| Line 3: | Line 3: | ||
| Download latest files from github: | Download latest files from github: | ||
| [[https:// | [[https:// | ||
| + | Put the files on a datastore. I use datastore backup (/ | ||
| + | I have put the original scripts in / | ||
| + | |||
| + | From download machine: | ||
| + | scp ghettoVCB-master.zip root@supermicro1.mngt.bh.helux.nl:/ | ||
| + | From hypervisor: | ||
| + | cd / | ||
| + | unzip ghettoVCB-master.zip | ||
| + | mv ghettoVCB-master bin | ||
| + | mkdir log | ||
| + | mkdir data | ||
| + | mkdir conf | ||
| + | |||
| + | <code - / | ||
| + | #!/bin/sh | ||
| + | BACKUPDIR=/ | ||
| + | BINDIR=$BACKUPDIR/ | ||
| + | CONFDIR=$BACKUPDIR/ | ||
| + | LOGDIR=$BACKUPDIR/ | ||
| + | DATE=$(date +%d-%m-%Y-%H-%M) | ||
| + | HOSTNAME=$(hostname) | ||
| + | |||
| + | case $(hostname -d) in | ||
| + | mngt.bh.helux.nl) DOMAIN=bh ;; | ||
| + | mngt.rtd.helux.nl) DOMAIN=rtd ;; | ||
| + | mngt.ams.helux.nl) DOMAIN=ams ;; | ||
| + | *) DOMAIN=unknown ;; | ||
| + | esac | ||
| + | |||
| + | $BINDIR/ | ||
| + | |||
| + | exit 0 | ||
| + | </ | ||
| + | |||
| =====Configure ghettoVCB===== | =====Configure ghettoVCB===== | ||
| + | I use different configs for each datacenter. I have hypervisors in 3 datacenters. | ||
| + | |||
| + | <code - / | ||
| + | VM_BACKUP_VOLUME=/ | ||
| + | DISK_BACKUP_FORMAT=thin | ||
| + | VM_BACKUP_ROTATION_COUNT=1 | ||
| + | POWER_VM_DOWN_BEFORE_BACKUP=0 | ||
| + | ENABLE_HARD_POWER_OFF=0 | ||
| + | ITER_TO_WAIT_SHUTDOWN=3 | ||
| + | POWER_DOWN_TIMEOUT=5 | ||
| + | ENABLE_COMPRESSION=0 | ||
| + | VM_SNAPSHOT_MEMORY=0 | ||
| + | VM_SNAPSHOT_QUIESCE=0 | ||
| + | ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP=1 | ||
| + | ENABLE_NON_PERSISTENT_NFS=0 | ||
| + | UNMOUNT_NFS=0 | ||
| + | NFS_SERVER=172.30.0.195 | ||
| + | NFS_VERSION=nfs | ||
| + | NFS_MOUNT=/ | ||
| + | NFS_LOCAL_NAME=nfs_storage_backup | ||
| + | NFS_VM_BACKUP_DIR=mybackups | ||
| + | SNAPSHOT_TIMEOUT=15 | ||
| + | EMAIL_LOG=0 | ||
| + | EMAIL_SERVER=auroa.primp-industries.com | ||
| + | EMAIL_SERVER_PORT=25 | ||
| + | EMAIL_DELAY_INTERVAL=1 | ||
| + | EMAIL_TO=auroa@primp-industries.com | ||
| + | EMAIL_FROM=root@ghettoVCB | ||
| + | WORKDIR_DEBUG=0 | ||
| + | VM_SHUTDOWN_ORDER= | ||
| + | VM_STARTUP_ORDER= | ||
| + | </ | ||
| + | <code - / | ||
| + | VM_BACKUP_VOLUME=/ | ||
| + | DISK_BACKUP_FORMAT=thin | ||
| + | VM_BACKUP_ROTATION_COUNT=1 | ||
| + | POWER_VM_DOWN_BEFORE_BACKUP=0 | ||
| + | ENABLE_HARD_POWER_OFF=0 | ||
| + | ITER_TO_WAIT_SHUTDOWN=3 | ||
| + | POWER_DOWN_TIMEOUT=5 | ||
| + | ENABLE_COMPRESSION=0 | ||
| + | VM_SNAPSHOT_MEMORY=0 | ||
| + | VM_SNAPSHOT_QUIESCE=0 | ||
| + | ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP=1 | ||
| + | ENABLE_NON_PERSISTENT_NFS=0 | ||
| + | UNMOUNT_NFS=0 | ||
| + | NFS_SERVER=172.30.0.195 | ||
| + | NFS_VERSION=nfs | ||
| + | NFS_MOUNT=/ | ||
| + | NFS_LOCAL_NAME=nfs_storage_backup | ||
| + | NFS_VM_BACKUP_DIR=mybackups | ||
| + | SNAPSHOT_TIMEOUT=15 | ||
| + | EMAIL_LOG=0 | ||
| + | EMAIL_SERVER=auroa.primp-industries.com | ||
| + | EMAIL_SERVER_PORT=25 | ||
| + | EMAIL_DELAY_INTERVAL=1 | ||
| + | EMAIL_TO=auroa@primp-industries.com | ||
| + | EMAIL_FROM=root@ghettoVCB | ||
| + | WORKDIR_DEBUG=0 | ||
| + | VM_SHUTDOWN_ORDER= | ||
| + | VM_STARTUP_ORDER= | ||
| + | </ | ||
| + | <code - / | ||
| + | VM_BACKUP_VOLUME=/ | ||
| + | DISK_BACKUP_FORMAT=thin | ||
| + | VM_BACKUP_ROTATION_COUNT=1 | ||
| + | POWER_VM_DOWN_BEFORE_BACKUP=0 | ||
| + | ENABLE_HARD_POWER_OFF=0 | ||
| + | ITER_TO_WAIT_SHUTDOWN=3 | ||
| + | POWER_DOWN_TIMEOUT=5 | ||
| + | ENABLE_COMPRESSION=0 | ||
| + | VM_SNAPSHOT_MEMORY=0 | ||
| + | VM_SNAPSHOT_QUIESCE=0 | ||
| + | ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP=1 | ||
| + | ENABLE_NON_PERSISTENT_NFS=0 | ||
| + | UNMOUNT_NFS=0 | ||
| + | NFS_SERVER=172.30.0.195 | ||
| + | NFS_VERSION=nfs | ||
| + | NFS_MOUNT=/ | ||
| + | NFS_LOCAL_NAME=nfs_storage_backup | ||
| + | NFS_VM_BACKUP_DIR=mybackups | ||
| + | SNAPSHOT_TIMEOUT=15 | ||
| + | EMAIL_LOG=0 | ||
| + | EMAIL_SERVER=auroa.primp-industries.com | ||
| + | EMAIL_SERVER_PORT=25 | ||
| + | EMAIL_DELAY_INTERVAL=1 | ||
| + | EMAIL_TO=auroa@primp-industries.com | ||
| + | EMAIL_FROM=root@ghettoVCB | ||
| + | WORKDIR_DEBUG=0 | ||
| + | VM_SHUTDOWN_ORDER= | ||
| + | VM_STARTUP_ORDER= | ||
| + | </ | ||
| =====Configure crontab===== | =====Configure crontab===== | ||
| - | Add the following on each ESXi hypervisor | + | Add the following on each ESXi hypervisor. The notation of the crontab is as follows: |
| + | #min hour day mon dow command | ||
| + | |||
| + | using the following config it means. run on 1:00 on sunday (day 0) | ||
| <code - / | <code - / | ||
| . | . | ||
| Line 14: | Line 144: | ||
| crond | crond | ||
| exit 0 | exit 0 | ||
| + | </ | ||
| + | |||
| + | after that run it for 1 time only! | ||
| + | |||
| + | / | ||
| + | |||
| + | make it persistent | ||
| + | |||
| + | / | ||
| + | |||
| + | =====Use Bacula to backup the NFS share===== | ||
| + | We only backup vms backupped with status OK. So I use a script before I run the Bacula job. | ||
| + | This script is the same NFS share on Linux as a datastore on the hypervisor. In this situation the NFS share is mounted on / | ||
| + | |||
| + | <code - run-before-bacula.sh> | ||
| + | #!/bin/bash | ||
| + | BACKUPDIR=/ | ||
| + | STATUSOK=STATUS.ok | ||
| + | STATUSWARN=STATUS.warn | ||
| + | TEMPDIR=$BACKUPDIR/ | ||
| + | |||
| + | case $1 in | ||
| + | bh) DATADIR=$BACKUPDIR/ | ||
| + | rtd) DATADIR=$BACKUPDIR/ | ||
| + | ams) DATADIR=$BACKUPDIR/ | ||
| + | *) echo "usage $0 < | ||
| + | exit 1 ;; | ||
| + | esac | ||
| + | |||
| + | rm -rf $TEMPDIR/* | ||
| + | |||
| + | for fulldir in $(find $DATADIR -name $STATUSOK -exec dirname {} \; -o -name $STATUSWARN -exec dirname {} \; ); do | ||
| + | DIR=$(basename $fulldir) | ||
| + | VMNAME=$(echo $fulldir | sed " | ||
| + | if [ ! -d $TEMPDIR/ | ||
| + | mkdir $TEMPDIR/ | ||
| + | fi | ||
| + | mv $fulldir $TEMPDIR/ | ||
| + | done | ||
| + | |||
| + | rm -rf $DATADIR/* | ||
| + | mv $TEMPDIR/* $DATADIR | ||
| </ | </ | ||