ESXi 虚拟机自动热备

严懿 673 2024-05-21

工具名称:GhettoVCB

该工具是VMware Cloud项目构架师William Lam发布的开源程序,可以在设定好几个简单的配置之后每天自动或手动备份指定或者所有的虚拟机到指定目录,备份过程虚拟机无需关机(可以是ESXi本地的某个磁盘也可以是远程NAS中,NAS可以通过NFS挂载)

1. 安装步骤

  • 工具下载地址下载后缀为vib的文件
    image

  • 进入ESXI Web后台

  • 输入后台IP进入,操作—服务—开启安全Shell(ssh)

  • 使用ssh登入输入对应的用户名密码

  • 把刚刚下载的文件上传到ESXI主机,本文上传在root的根目录
    image-1716273585502

  • 查下ESXI主机的软件级别

    • 具体来说,这个命令可以有以下几种接受级别:
      1. VMwareCertified: 仅允许由 VMware 测试和认证的软件包。这是最高级别的信任。
      2. VMwareAccepted: 允许 VMware 和 VMware 合作伙伴测试和认证的软件包。
      3. PartnerSupported: 允许 VMware 合作伙伴测试和认证的软件包,但不一定经过 VMware 的测试。
      4. CommunitySupported: 允许社区提供的软件包,这些包未经 VMware 或其合作伙伴的测试和认证。这是最低级别的信任。
esxcli software acceptance get
  • 我这边查出来的级别是PartnerSupported
    image-1716273884058
  • 如果安装报错下图信息,可以将级别设定为CommunitySupported
    image-1716274128826
  • 设定命令
esxcli software acceptance set --level=CommunitySupported
  • 安装ghettoVCB
esxcli software vib install -v /vghetto-ghettoVCB.vib -f   

-v 后面为vib文件的路径,如果没有任何报错就安装成功。
我这边安装(2023_09_29版本)一直报错Calculated digest at EOF does not match expected result
然后换了一个低版本的(2021_07_09)就成功安装

2.挂载备份盘存放VM主机文件

  • 登录到ESXI WEB后台
  • 存储–新建数据存储–挂载NFS数据存储–填入相关NFS服务器信息

3.配置ghettoVCB工具

  • 软件安装好以后,所有的配置信息都在/opt/ghettovcb/这个目录
  • 备份默认的配置文件
  cp ghettoVCB.conf ghettoVCB.conf.bak
  • 配置文件说明
# 备份到何处。绝对路径
VM_BACKUP_VOLUME=/vmfs/volumes/xxx

# 磁盘格式。支持:zeroedthick, eagerzeroedthick, thin, 2gbsparse
DISK_BACKUP_FORMAT=thin

# 备份要保存几个版本
VM_BACKUP_ROTATION_COUNT=3

# 备份前是否要关闭虚拟机。0 代表不关闭,1 代表关闭
POWER_VM_DOWN_BEFORE_BACKUP=0

# 如果 POWER_VM_DOWN_BEFORE_BACKUP 被设置为 1 且没有安装 VMware  Tools 时,是否允许强制关闭虚拟机
ENABLE_HARD_POWER_OFF=0

# 当 POWER_VM_DOWN_BEFORE_BACKUP 被设置为 1 时,脚本迭代次数
ITER_TO_WAIT_SHUTDOWN=3

# 关闭虚拟机电源时脚本将等待的迭代次数
POWER_DOWN_TIMEOUT=5

# 拍摄虚拟机快照时脚本将等待的迭代次数
SNAPSHOT_TIMEOUT=15

# 是否启用压缩
ENABLE_COMPRESSION=0

# 是否需要备份内存中的数据。为了 debug 添加的,通常应该设置为 0 
VM_SNAPSHOT_MEMORY=0
# 备份内存数据时,是否启用静默执行。为了 debug 添加的,通常应该设置为 0 
VM_SNAPSHOT_QUIESCE=0

# 是否允许备份有快照的虚拟机
ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP=0

# 如果要备份到 NFS,则需要设置配置以下几项
ENABLE_NON_PERSISTENT_NFS=0
UNMOUNT_NFS=0
NFS_SERVER=192.168.1.1
NFS_VERSION=nfs
NFS_MOUNT=/xxx
NFS_LOCAL_NAME=xxx
NFS_VM_BACKUP_DIR=xxx

# 邮件提醒相关
EMAIL_ALERT=0
EMAIL_LOG=0
EMAIL_SERVER=xxx.com
EMAIL_SERVER_PORT=25
EMAIL_DELAY_INTERVAL=1
EMAIL_USER_NAME=
EMAIL_USER_PASSWORD=
EMAIL_TO=xxx@xxx.com
EMAIL_ERRORS_TO=
EMAIL_FROM=xxx


WORKDIR_DEBUG=0

# 当 POWER_VM_DOWN_BEFORE_BACKUP 设置为 1,备份开始时,虚拟机的关闭顺序
VM_SHUTDOWN_ORDER=

# 当 POWER_VM_DOWN_BEFORE_BACKUP 设置为 1,备份结束时,虚拟机的开机顺序
VM_STARTUP_ORDER=

  • 修改配置文件

    • 这里我只修改了两个地方 VM_BACKUP_VOLUME=/vmfs/volumes/VmHostsBak 这里是文件备份的路径,个人根据服务器的配置修改,我这里修改的是刚刚挂载的NFS的路径。
      VM_BACKUP_ROTATION_COUNT=3 这里是版本的保存数量,超过3个以后会自动删除,其他都是默认,有兴趣的可以自行研究
  • 创建虚拟机备份列表
    创建一个文件名称为vms_backup_list

  • vi打开vms_baskup_list文件,填入你要备份的虚拟机名称,一行一个 (注意,虚拟机的名字需要填写在WEB界面看到的虚拟机的名字,不要带有空格,如果web界面中虚拟机的名字带有空格,点击编辑按钮,点击虚拟机选项,删掉空格)

mysql
zabbix
nginx
sqlserver
openwrt
223nginx

4.测试备份虚拟机

  • 执行备份命令,
/opt/ghettovcb/bin/ghettoVCB.sh -f /opt/ghettovcb/vms_backup_list -g /opt/ghettovcb/ghettoVCB.conf

/opt/ghettovcb/bin/ghettoVCB.sh :ghettoVCB脚本所在路径
/opt/ghettovcb/vms_backup_list : 备份虚拟机列表
/opt/ghettovcb/ghettoVCB.conf : 配置文件路径
image-1716275859374

  • 其他命令
    • 临时想要备份一个虚拟机,或者想要快速克隆一台虚拟机:
   /opt/ghettovcb/bin/ghettoVCB.sh -m 虚拟机名字 -g /opt/ghettovcb/ghettoVCB.conf

5.测试还原虚拟机

  • 创建/注册虚拟机—注册现有虚拟机–选择数据存储目录(备份的位置)

  • 找到后缀为.vmx的文件,选择它添加即可

  • 找到添加的虚拟机打开电电源提示选择I Moved It即可
    image-1716276958586

  • 注意这两个选项区别

    • 如果以前的虚拟机已经不用了就选择I Moved It,只会从新生成UUID
    • 如果同时使用两个就选I Copied It,会重新生成MAC地址与UUID,根据需要选择
  • 其他
    如果虚拟机已经有快照,在配置文件将ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP=1,在备份即可

定时自动执行备份

  • 如果有需要,可以配置定时任务,让备份在某个时间点自动执行,ESXI的时间比大陆的时间晚8小时,设定时候要注意。自行查找关于cron方面的资料