Script incremental forever TDP VE backup_vm_incr.cmd
cd "C:\Program Files\Tivoli\TSM\baclient\" START /B dsmc backup vm "SRVWIN1" -vmbackuptype=fullvm -mode=ifincremental -asnodename=DC1 -optfile="C:\Program Files\Tivoli\TSM\baclient\dsm.DC1_DM.opt" >> "C:\Program Files\Tivoli\TSM\baclient\dsmsched.VDC1_DM.incr1.log" START /B dsmc backup vm "SRVLNX2" -vmbackuptype=fullvm -mode=ifincremental -asnodename=DC1 -optfile="C:\Program Files\Tivoli\TSM\baclient\dsm.DC1_DM.opt" >> "C:\Program Files\Tivoli\TSM\baclient\dsmsched.DC1_DM.incr1.log"
This script is planned to use with a linux datamover and powershell installed
[root@tdpvelnx]/usr/scripts # cat Backup-VM.ps1
#!/usr/bin/pwsh <# .SYNOPSIS Backup ALL VM .OUTPUTS @{ExitCode=;StdOut=,StdErr=} #> # Global Parameters $VMvCenterName = 'vcenter01' $VMvCenterUser = 'tdpve@vsphere.local' $VMvCenterPass = 'xxxxxxxxxx' # TSM Parameters $Exclude_VM = @("vmtest4","vcenter01") $AsNode = 'DATACENTER' $VMprod = @("vmtest1:vmdk=Hard Disk 1","vmtest2:vmdk=Hard Disk 1:vmdk=Hard Disk 2") Write-Verbose "vCenter Name . . = $VMvCenterName" # # Connect to vCenter # Write-Host "Connecting to vcenter $($VMvCenterName)..." try { Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -WarningAction SilentlyContinue -ParticipateInCeip $false -DisplayDeprecationWarnings $false -confirm:$false $VCSession = Connect-VIServer -Server $VMvCenterName -User $VMvCenterUser -Password $VMvCenterPass } catch { write-host "Error to connect to vCenter $VMvCenterName." exit -1 } ### ### Retreive VM Information ### Write-Host "Retreive VM information..." $env:LD_LIBRARY_PATH = "/opt/tivoli/tsm/client/ba/bin:/opt/tivoli/tsm/tdpvmware/common/jre/jre/bin/classic" Write-Host "##### Backup VM Starting" Foreach( $VM in $( Get-VM | Select-String -pattern $Exclude_VM -notMatch)) { Write-Host "#### Backup VM: $VM" /usr/bin/dsmc ba vm $VM -optfile="/opt/tivoli/tsm/client/ba/bin/dsm_ve.opt" -asnode="$AsNode" } Write-Host "##### Backup VM Finished" Write-Host "##### Backup specific VM Starting" Foreach( $VM in $VMprod) { Write-Host "#### Backup VM: $VM" Write-Host /usr/bin/dsmc ba vm $VM -optfile="/opt/tivoli/tsm/client/ba/bin/dsm_ve.opt" -asnode="$AsNode" /usr/bin/dsmc ba vm $VM -optfile="/opt/tivoli/tsm/client/ba/bin/dsm_ve.opt" -asnode="$AsNode" } Write-Host "##### Backup specific VM Finished" ### ### Disconnect from vCenter ### Disconnect-VIServer -Server $VMvCenterName -Confirm:$false exit $RC
Check if all VM are backup and all disks
[root@mgmt01 scripts]# cat list_backup_vm.sh
#!/bin/bash #set -x # #@(#) send list of VM with exclusion # # version: 1.0 03-2021 Manu # # input file is generated on TDP VE datamover (linux) # dsmc show vm all -optfile=dsm.opt -asnode=datacenter_01 > show_vm_all.txt dir=`dirname $0` . $dir/.env # Variables destination="myemail@test.lu" INPUT=$logpath/show_vm_all.txt logfile=$logpath/output.csv line="" cat /dev/null > $logfile #---------------------- get_input_file () { ssh tdpve 'dsmc show vm all -optfile=dsm.opt -asnode=datacenter_01' > $INPUT } #---------------------- extract_vm () { cat $INPUT | tr -s ' ' | sed 's/^\ //' | egrep '^\(|^scheduleTagName|^VMDK' | sed 's/\ /\|/g' | grep -v '|Copyright|' > ${INPUT}.1 for line1 in $(cat ${INPUT}.1) do begin=$(echo $line1 | cut -d':' -f1 | sed 's/$/:/') end=$(echo $line1 | cut -d':' -f2- | sed 's/^|//') if [ "$(echo $begin | grep '^(' | grep '.vmName:' > /dev/null; echo $?)" -eq "0" ] then if [ "${line}" != "" ] then echo $line | sed 's/|/\ /g' >> $logfile fi vm_name=$(echo $line1 | cut -d':' -f2- | sed 's/|//') line="${vm_name}" else if [ "$(echo $begin | grep '^scheduleTagName:' > /dev/null; echo $?)" -eq "0" ] then tag=$(echo $end) line="$line;$tag" else if [ "$(echo $begin | grep 'VMDK\[' > /dev/null; echo $?)" -eq "0" ] then if [ "$(echo $begin | grep '\]Label:' > /dev/null; echo $?)" -eq "0" ] then disk=$(echo $end) else if [ "$(echo $begin | grep '\]Status:' > /dev/null; echo $?)" -eq "0" ] then status=$(echo $end) line="$line;$disk;$status" fi fi fi fi fi done echo "$line" >> $logfile } #---------------------- sendemail () { echo "########### sendemail" SIZE=$(cat $logfile | wc -l) if (( SIZE > 6 )) then date "+%d-%m-%Y" | mailx -a $logfile -s "List VM backup by ISP" $destination exit 1 else echo " " echo No error echo " " exit 0 fi } ######################### # Main ######################### main () { date get_input_file extract_vm #sendemail #rm ${logfile}* 2>/dev/null } main > $logname 2>&1
output like:
vm1;VM_INCR_TUE;'Hard disk 1' (Hard Disk 1);Included;'Hard disk 2' (Hard Disk 2);Excluded - User VM2;VM_INCR_FRI;'Hard disk 1' (Hard Disk 1);Included;'Hard disk 2' (Hard Disk 2);Included linux1;VM_INCR_WED;'Hard disk 1' (Hard Disk 1);Included;'Hard disk 2' (Hard Disk 2);Included linux2;VM_INCR_FRI;'Hard disk 1' (Hard Disk 1);Included;'Hard disk 2' (Hard Disk 2);Included winvm01;VM_INCR_FRI;'Hard disk 1' (Hard Disk 1);Included;'Hard disk 2' (Hard Disk 2);Included winvm02;Unassigned;'Hard disk 1' (Hard Disk 1);Included;'Hard disk 2' (Hard Disk 2);Included
If no scheduletag is assigned to the VM, then no backup. Some disks are also excluded from some VMs.