====== Scripts TDP VE ======
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"
===== Script backup VM =====
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
===== Get disks backupped =====
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.