This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
tsm:tdpve_scripts1 [2021/01/01 21:25] 127.0.0.1 external edit |
tsm:tdpve_scripts1 [2022/01/27 17:17] (current) manu |
||
---|---|---|---|
Line 8: | Line 8: | ||
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" | 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" | ||
</cli> | </cli> | ||
+ | |||
+ | ===== Script backup VM ===== | ||
+ | |||
+ | This script is planned to use with a linux datamover and powershell installed | ||
+ | <cli prompt='#'> | ||
+ | [root@tdpvelnx]/usr/scripts # cat Backup-VM.ps1 | ||
+ | </cli> | ||
+ | <code> | ||
+ | #!/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 | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ===== Get disks backupped ===== | ||
+ | |||
+ | Check if all VM are backup and all disks | ||
+ | <cli prompt='#'> | ||
+ | [root@mgmt01 scripts]# cat list_backup_vm.sh | ||
+ | </cli> | ||
+ | <code> | ||
+ | #!/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 | ||
+ | </code> | ||
+ | |||
+ | output like: | ||
+ | <cli prompt='#'> | ||
+ | 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 | ||
+ | </cli> | ||
+ | |||
+ | If no scheduletag is assigned to the VM, then no backup. Some disks are also excluded from some VMs. |