使用 ghettoVCB 备份 VMware ESXi 虚拟机

调整接受级别

ghettoVCB 是一个社区开发的开源软件,所以第一步需要更改配置,让 esxi 允许安装社区软件。

按照下图所示,调整接受级别为社区
2024032515082183.png
2024032515083835.png

开启 ssh 登录

按照下图所示,开启 ssh 登录。图中所示是已开启状态。
2024032515212651.png

安装软件

如果能访问 github,选择在线安装,否则选择离线安装。

在线安装

由于安装 ghettoVCB 的脚本是通过 github releases 发布的,每个 releases 对应的连接地址都不一样,所以首先要确认脚本连接。打开 https://github.com/lamw/ghettoVCB/releases 按照下图所示,得到脚本连接。例如: https://github.com/lamw/ghettoVCB/releases/download/2023_09_29/vghetto-ghettoVCB.vib
2024032515173262.png

使用 ssh 登录到 esxi,执行 esxcli software vib install -v https://github.com/lamw/ghettoVCB/releases/download/2023_09_29/vghetto-ghettoVCB.vib -f。安装过程没有提示,且会需要花费一些时间,耐心等待即可。安装成功后会显示:

Installation Result
Message: Operation finished successfully.
VIBs Installed: virtuallyGhetto_bootbank_ghettoVCB_1.0.0-0.0.0
VIBs Removed:
VIBs Skipped:
Reboot Required: false
DPU Results:

离线安装

如下图所示,打开 https://github.com/lamw/ghettoVCB/releases ,把脚本下载到本地。
2024032515233953.png

把脚本 vghetto-ghettoVCB-offline-bundle.zip 上传到 esxi 中某个位置。如图所示,上传之后的文件路径是:/vmfs/volumes/vm/vghetto-ghettoVCB-offline-bundle.zip
2024032515252383.png

使用 ssh 登录到 esxi,执行 esxcli software vib install -d /vmfs/volumes/vm/vghetto-ghettoVCB-offline-bundle.zip -f。等待安装完成即可。

检查文件

执行 ls /opt/ghettovcb,可以看到有如下文件:

bin
ghettoVCB-vm_backup_configuration_template
ghettoVCB-restore_vm_restore_configuration_template
ghettoVCB.conf

定义配置文件

上一步看到,有一个示例文件: ghettoVCB.conf。各个配置项的大概含意如下:

# 备份到何处。绝对路径
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_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=

随意找一个位置,新建一个文件,例如:/vmfs/volumes/vm/ghetto-vcb/default.conf,把上述内容填入。

更多的配置项含意参考官方文档: https://communities.vmware.com/t5/VI-VMware-ESX-3-5-Documents/ghettoVCB-sh-Free-alternative-for-backing-up-VM-s-for-ESX-i-3-5/ta-p/2773570

定义需要配置的虚拟机

随意找一个位置,新建一个文件,例如:/vmfs/volumes/vm/ghetto-vcb/vm-list,把需要备份的虚拟机的名字填入,每个虚拟机名字一行。
2024032516090159.png

debian12
debian12-1

手动执行备份

执行命令 /opt/ghettovcb/bin/ghettoVCB.sh -f /vmfs/volumes/vm/ghetto-vcb/vm-list -g /vmfs/volumes/vm/ghetto-vcb/default.conf 即可备份。可以看到如下信息:

Logging output to "/tmp/ghettoVCB-2024-03-25_16-26-26-2118455.log" ...
2024-03-25 16:26:26 -- info: ============================== ghettoVCB LOG START ==============================
 
2024-03-25 16:26:26 -- info: CONFIG - USING GLOBAL GHETTOVCB CONFIGURATION FILE = /vmfs/volumes/vm/ghetto-vcb/default.conf
2024-03-25 16:26:26 -- info: CONFIG - VERSION = 2023_09_29_1
2024-03-25 16:26:26 -- info: CONFIG - GHETTOVCB_PID = 2118455
2024-03-25 16:26:26 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/vm/backup
2024-03-25 16:26:26 -- info: CONFIG - ENABLE_NON_PERSISTENT_NFS = 0
2024-03-25 16:26:26 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 3
2024-03-25 16:26:26 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2024-03-25_16-26-26
2024-03-25 16:26:26 -- info: CONFIG - DISK_BACKUP_FORMAT = thin
2024-03-25 16:26:26 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 0
2024-03-25 16:26:26 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0
2024-03-25 16:26:26 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3
2024-03-25 16:26:26 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5
2024-03-25 16:26:26 -- info: CONFIG - SNAPSHOT_TIMEOUT = 15
2024-03-25 16:26:26 -- info: CONFIG - LOG_LEVEL = info
2024-03-25 16:26:26 -- info: CONFIG - BACKUP_LOG_OUTPUT = /tmp/ghettoVCB-2024-03-25_16-26-26-2118455.log
2024-03-25 16:26:26 -- info: CONFIG - ENABLE_COMPRESSION = 0
2024-03-25 16:26:26 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0
2024-03-25 16:26:26 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0
2024-03-25 16:26:26 -- info: CONFIG - ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP = 0
2024-03-25 16:26:26 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all
2024-03-25 16:26:26 -- info: CONFIG - VM_SHUTDOWN_ORDER =
2024-03-25 16:26:26 -- info: CONFIG - VM_STARTUP_ORDER =
2024-03-25 16:26:26 -- info: CONFIG - RSYNC_LINK = 0
2024-03-25 16:26:26 -- info: CONFIG - BACKUP_FILES_CHMOD =
2024-03-25 16:26:26 -- info: CONFIG - EMAIL_LOG = 0
2024-03-25 16:26:26 -- info: CONFIG - ENABLE_NFS_IO_HACK = 0
2024-03-25 16:26:31 -- info: Initiate backup for debian12
2024-03-25 16:26:31 -- info: Creating Snapshot "ghettoVCB-snapshot-2024-03-25" for debian12
Destination disk format: VMFS thin-provisioned
Cloning disk '/vmfs/volumes/datastore1/debian12/debian12.vmdk'...
Clone: 100% done.
2024-03-25 16:26:55 -- info: Removing snapshot from debian12 ...
2024-03-25 16:26:56 -- info: Backup Duration: 24 Seconds
2024-03-25 16:26:56 -- info: Successfully completed backup for debian12!
 
2024-03-25 16:26:59 -- info: ###### Final status: All VMs backed up OK! ######
 
2024-03-25 16:26:59 -- info: ============================== ghettoVCB LOG END ================================

检查备份文件:
2024032516211324.png

定时自动执行备份

如果有需要,可以配置定时任务,让备份自动执行。在 linux 中执行定时任务,通常使用 cron