Working with standalone ESXi 4.1 hosts presents unique backup challenges, especially when you lack vCenter Server infrastructure. The primary pain points are:
- No native backup API access (like VADP)
- Storage inefficiency when copying thick-provisioned VMDKs
- Potential corruption risks with thin-provisioned disks
- No built-in automation for VM lifecycle during backups
After testing multiple approaches on production systems, these methods deliver reliable results:
Method 1: ghettoVCB Script (Modified for ESXi 4.1)
The community-developed ghettoVCB script can be adapted for older ESXi versions. Here's a working configuration example:
# ghettoVCB configuration for ESXi 4.1
VM_BACKUP_VOLUME=/vmfs/volumes/backup-storage
DISK_BACKUP_FORMAT=thin
POWER_VM_DOWN_BEFORE_BACKUP=1
ENABLE_HARD_POWER_OFF=1
ITER_TO_WAIT_SHUTDOWN=30
Method 2: ESXCLI + Tar for Space Efficiency
This approach uses ESXi's built-in tools to create compressed archives:
# Connect to ESXi host
ssh root@esxi-host
# For each VM (example with VM named "webserver"):
vim-cmd vmsvc/getallvms | grep webserver
vim-cmd vmsvc/power.off [VMID]
tar -czvf /vmfs/volumes/backup-storage/webserver-$(date +%Y%m%d).tar.gz /vmfs/volumes/datastore1/webserver/
vim-cmd vmsvc/power.on [VMID]
While thin disks have risks, these precautions make them viable:
- Always verify disk integrity with
vmkfstools -v
before backup - Use
vmkfstools --punchzero
to reclaim empty blocks - Consider converting to thin during backup (space savings outweigh performance impact for backups)
Create a basic backup scheduler using cron and SSH keys:
# On your management machine:
0 2 * * * ssh root@esxi-host '/path/to/backup-script.sh webserver && /path/to/backup-script.sh dbserver'
For reliable restores:
# For tar backups:
ssh root@esxi-host "tar -xzvf /vmfs/volumes/backup-storage/webserver-20240101.tar.gz -C /vmfs/volumes/datastore1/"
# Register the VM:
vim-cmd solo/registervm /vmfs/volumes/datastore1/webserver/webserver.vmx
For environments supporting it, Network Block Device mode offers efficient transfers:
# On backup server:
nbd-client esxi-host 902 /dev/nbd0
dd if=/dev/nbd0 | gzip > webserver.vmdk.gz
When working with standalone ESXi 4.1 hosts without vCenter, administrators face unique backup challenges. The primary issue stems from how ESXi handles virtual disk files (VMDKs) during copy operations.
The native cp
command copies entire VMDK files regardless of actual used space. Consider this example:
cp /vmfs/volumes/datastore1/VM1/VM1.vmdk /backup/VM1.vmdk
For a 30GB VMDK with only 1GB used, this wastes 29GB of backup space and transfer time.
Option 1: ESXi CLI Tools
Use the vim-cmd
utility for more efficient backups:
vim-cmd vmsvc/getallvms # List all VMs
vim-cmd vmsvc/snapshot.create [vmid] "Backup Snapshot" "Pre-backup state" 0 0
vim-cmd vmsvc/snapshot.remove [vmid] [snapshot-id]
Option 2: PowerShell Scripting
For Windows administrators, this PowerShell snippet automates VM shutdown and backup:
$vmHost = Connect-VIServer -Server esxi01.example.com
$vms = Get-VM -Server $vmHost
foreach ($vm in $vms) {
Stop-VM -VM $vm -Confirm:$false
Copy-VMGuestFile -Source $vm.ExtensionData.LayoutEx.File[0].Name
-Destination "\\backup\share\" -LocalToGuest
Start-VM -VM $vm -Confirm:$false
}
To minimize backup size:
- Convert thick to thin provisioned pre-backup:
vmkfstools -i source.vmdk -d thin target.vmdk
- Use
tar
with compression:tar czvf backup.tar.gz /vmfs/volumes/datastore1/VM1/
For reliable restoration:
# Register a new VM from backup
vim-cmd solo/registervm /vmfs/volumes/datastore1/backup/VM1/VM1.vmx
# Convert thin to thick for production
vmkfstools -i restored-thin.vmdk -d zeroedthick production.vmdk
Create a cron job for scheduled backups:
0 2 * * * /usr/bin/vim-cmd vmsvc/getallvms | awk '{print $1}' | xargs -I {} /bin/sh /scripts/backup_vm.sh {}