-
Notifications
You must be signed in to change notification settings - Fork 0
/
esxi-vm-backup.sh
119 lines (91 loc) · 3.31 KB
/
esxi-vm-backup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/bin/sh
# костыльный способ сделать BackUp VM в ESXi
# ссылка на github https://github.com/NickNeoOne/bash-scripts
#Задаем переменные даты времени и название лог файла
DATE=`date +"%m-%d-%y"`
TIME=`date +"%T"`
LOG_FILE=backup-$DATE.log
# Указываем ID виртуальной машины
VMID=3
# Указываем путь ОТКУДА бекапить
SOURCE_DIR=/vmfs/volumes/id_src_dir/
# Указываем путь КУДА бекапить
DEST_DIR=/vmfs/volumes/id_dst_dir/
# Указываем каталог где находятся файлы виртуальной машины (путь к ней /vmfs/volumes/e7d62437-0da87f64-0000-000000000000/)
VMNAME=SQUID
echo $DATE
echo $LOG_FILE
echo "=============== start log ===============" > /tmp/$LOG_FILE
# Проверяем наличие бекапа в каталоге DEST_DIR
if [ -z "$(ls -A ${DEST_DIR}${VMNAME})" ]; then
echo "Empty dir ${DEST_DIR}${VMNAME}" >> /tmp/$LOG_FILE
echo "do not delete old data" >> /tmp/$LOG_FILE
else
echo "REMOVE old VM backup `date`" >> /tmp/$LOG_FILE
# Удаляем старый Бекап
rm -rf ${DEST_DIR}${VMNAME}_OLD
echo "move VM backup to OLD `date`" >> /tmp/$LOG_FILE
# Переименовываем текущий бекап в старый
mv ${DEST_DIR}${VMNAME} ${DEST_DIR}${VMNAME}_OLD
fi
echo " " >> /tmp/$LOG_FILE
echo "Start BackUp VM `date`" >> /tmp/$LOG_FILE
vim-cmd vmsvc/power.shutdown ${VMID}
# Функция проверки состояния VM
check_vm_status (){
var1=`vim-cmd vmsvc/power.getstate $VMID | grep Powered`
}
# Цикл проверки состояния VM
i=0
while check_vm_status
do
i=$(($i + 1))
if [ "$var1" == "Powered on" ]; then
if [ "$i" -gt "20" ]; then
echo "VM falied normal stop. FORCED stop !!!" >> /tmp/$LOG_FILE
vim-cmd vmsvc/power.off $VMID
sleep 10s
break
fi
echo $i
echo "WARNING: VM not stopped yet, waiting 1m " >> /tmp/$LOG_FILE
sleep 1m
else
echo "VM normal stopped `date`" >> /tmp/$LOG_FILE
break
fi
done
# Запускаем копирование
cp -r ${SOURCE_DIR}${VMNAME}/ ${DEST_DIR} 2>> /tmp/$LOG_FILE
# Проверяем статус выполнения
STATUS=$?
if [[ $STATUS != 0 ]]; then
echo " " >> /tmp/$LOG_FILE
echo "VM copy ERROR!!! - `date`" >> /tmp/$LOG_FILE
else
# Если все ОК
echo " " >> /tmp/$LOG_FILE
echo "VM copy completed - `date`" >> /tmp/$LOG_FILE
echo " " >> /tmp/$LOG_FILE
# узнаем размер скопированных файлов.
VM_SIZE=`du -h ${DEST_DIR}${VMNAME} | awk '{ print $1}'`
echo "VM copy size - " $VM_SIZE >> /tmp/$LOG_FILE
echo "starting VM - " $DATE $TIME >> /tmp/$LOG_FILE
fi
# Запускаем VM
vim-cmd vmsvc/power.on ${VMID} 2>> /tmp/$LOG_FILE
# Проверяем статус выполнения
STATUS=$?
if [[ $STATUS != 0 ]]; then
echo " " >> /tmp/$LOG_FILE
echo "start VM ERROR - `date`" >> /tmp/$LOG_FILE
else
# Если все ОК
echo " " >> /tmp/$LOG_FILE
echo "start VM - `date`" >> /tmp/$LOG_FILE
fi
echo "=============== end log ===============" >> /tmp/$LOG_FILE
# Копируем лог в указанную папку
mkdir -p ${DEST_DIR}log/
mv -f /tmp/$LOG_FILE ${DEST_DIR}log/
exit