There is a limitation in VMware vSphere where you can’t take a Snapshot of a VM with a PCIe device passed through to it.
One option is to install the Veeam Agent for the OS you’re running and use it to take guest based backups. This isn’t ideal though in my opinion. I would much rather keep my host based backups of the VM. Fortunately this is a easy solution to this problem.
Shut off the VM before taking the Veeam backup and then power it back on after the backup is complete.
To get this working you need to install the VMware PowerShell Module on your Veeam server. To do this perform the following steps:
- Right click on the PowerShell shortcut and choose ‘Run as Administrator’
- Run the following commands:Find-Module -Name VMware.PowerCLIInstall-Module -Name VMware.PowerCLI -Scope AllUsersGet-Command -Module *VMWare*Set-PowerCLIConfiguration -Scope AllUsers -ParticipateInCeip $false -InvalidCertificateAction Ignore
- You should see a large list of VMware PowerShell commands output which means you’ve successfully installed the module
Next up you need to make sure your Veeam Services are running under a Service Account with the appropriate permissions in vCenter. I believe this is normally a best practice and chances are you’ve all already done this. In my case I’d installed Veeam as a local service. Don’t know why but to fix it I just flipped over the following Windows Services to run as my backup operator account which had Domain Admin, Backup Operator, Local Admin on the Veeam Server and Administrator on vSphere permissions already.
The services were:
- Veeam Backup Enterprise Manager
- Veeam Backup Service
- Veeam Broker Service
- Veeam Cloud Connect Service
- Veeam Guest Catalog Service
- Veeam RESTful API Service
I then rebooted my Veeam server.
I already have my vCenter service joined to my domain but I did run into an issue where single sign-on wasn’t working properly. If I attempted to connect to my vCenter server via PowerShell using “Connect-VIServer <VCENTER SERVER FQDN>” I would be prompted for credentials which shouldn’t be happening since the account I’m logged in as is an Administrator in vCenter.
Turned out I needed to add my AD Group that gives users Administrative access to the vCenter Global Permissions list:
- Login to vCenter as an administrator
- Click ‘Menu’ and ‘Administrator’
- Click ‘Global Permissions’
- Click ‘Add’
- Change the ‘User’ field to your domain, search for the user or security group (I recommend security groups) and select it, make sure the role is ‘Administrator’ and check ‘Propagate to children’ and click ‘Ok’
After doing this I could run “Connect-VIServer <VCENTER SERVER FQDN>” and not be prompted for credentials.
Now that all the prep-work is done we can re-configure our backup job in Veeam.
First we’re going to need two scripts, one to shutdown the VM and one to boot it back up. I’ve saved these scripts on my Veeam server in “C:\Scripts\<VM FQDN>\”
The shutdown script is “shutdown.bat”, be sure to search and replace “VCENTER FQDN” and “VM FQDN” with your values:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -executionpolicy bypass -Command Connect-VIServer -Server “VCENTER FQDN”; Shutdown-VMGuest -VM “VM FQDN” -Server VCENTER FQDN -Confirm:0; do{$vm=Get-VM -Name “VM FQDN”}while ($vm.PowerState -eq \”PoweredOn\”)
The startup script is “startup.bat”, be sure to search and replace “VCENTER FQDN” and “VM FQDN” with your values:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -executionpolicy bypass -Command Connect-VIServer -Server “VCENTER FQDN”; Start-VM -VM “VM FQDN” -Server “VCENTER FQDN”; Start-Sleep -s 90
Once you’ve created these fire up the Veeam console and re-configure the VMs job:
- Launch Veeam
- Find the backup job for your VM, right click on it and choose ‘Edit’
- Go to ‘Storage’
- Click ‘Advanced’
- Go to ‘Scripts’
- Checkmark ‘Run the following script before the job:’ and select your “shutdown.bat” script
- Checkmark ‘Run the following script after the job:’ and select your “startup.bat” script
- Click ‘Ok’
- Click ‘Finish’
- Perform a test run of the job, you can monitor the start-up/shutdown in vCenter
- That’s it. Minor inconvenience but it works. Hopefully vSphere 7 will allow for snapshots on VMs with pass-through devices configured.
References
- https://helpcenter.veeam.com/docs/backup/vsphere/backup_job_advanced_scripts_vm.html?ver=95u4
- https://forums.veeam.com/vmware-vsphere-f24/how-to-shut-down-a-vm-before-backup-and-the-poer-on-again-t36993.html#p204693
- https://thesysadminchannel.com/install-vmware-powercli-module-powershell/
- https://communities.vmware.com/message/2822499#2822499