Snapshot All VM
모든 VM에 대하여 snapshot을 생성합니다.
- 전체 VM 리스트를 출력
- 이름만 분리하고 오름차순으로 정렬한다.
- "를 제거하고 VM명과 상태를 출력한다.
- VM 전체를 Pause 한다
- 전체 vm 리스트에 대한 pause를 실행
- vm명에 "ex"가 있는 경우 skip하고자 하였으나 운영 상 스냅샷을 하는 것이 좋을 것 같아 나중에 수정함
- 단 vm명에 "ex"가 있는 경우
- 실행 상태 확인
- 실행상태
- 이미 pause 상태를 확인하고 pause인 경우 skip , pause가 아닌 경우 pause
- 실행상태
- 실행 상태가 아닌 경우
- skip
- 실행 상태 확인
- vm명에 "ex"가 없는 경우
- 실행 상태 확인
- 실행상태
- 이미 pause 상태를 확인하고 pause인 경우 skip , pause가 아닌 경우 pause
- 실행상태
- 실행 상태가 아닌 경우
- skip
- 실행 상태 확인
- 스냅샷을 생성한다
- 오래된 스냅샷을 삭제한다.
- Pause를 풀고 Resuming한다.
#!/bin/bash
echo -e "\n"
echo "##############################################"
echo "############# MAKE SNAPSHOT START ! ##########"
echo "##############################################"
export _SDATE=$(date +"%Y-%m-%d %H")
echo "START "$_SDATE
echo -e "\n## Virtural Images list ##"
allVm=$(/usr/bin/VBoxManage list vms | awk '{print($1)}' | sort)
runningVm=$(/usr/bin/VBoxManage list runningvms | awk '{print($1)}' | sort -nr)
# Check Status
VmStatus(){
vmStatus=$(/usr/bin/VBoxManage showvminfo $1 | grep -e ^State | sed s/\ \ //g )
echo ${vmStatus}
}
# All VM Print
PrintVmList(){
for i in $allVm
do
vmname=$(echo $i | sed -e "s/\"//g")
echo " > " $vmname " , Status=" $(VmStatus $vmname)
done
}
# Check Running
IfRunning(){
runnable=1
vmStatus=$(/usr/bin/VBoxManage showvminfo $1 | grep -e ^Name: -e ^State | sed s/\ \ //g | grep running | awk '{print($2)}')
if [ -z $vmStatus ] ; then
runnable=1
elif [ $vmStatus = "running" ] ; then
runnable=0
else
runnable=1
fi
echo ${runnable}
}
# Check Pause
IfPause(){
pausevm=1
vmStatus=$(/usr/bin/VBoxManage showvminfo $1 | grep -e ^Name: -e ^State | sed s/\ \ //g | grep paused | awk '{print($2)}')
if [ -z $vmStatus ] ; then
pausevm=1
elif [ $vmStatus = "paused" ] ; then
pausevm=0
else
pausevm=1
fi
echo ${pausevm}
}
# All VM PAUSE
PauseVM(){
echo -e "\n## All Running Virtural Images Pause ##"
for i in $allVm
do
vmname=$(echo $i | sed -e "s/\"//g")
ex=$(echo $vmname | awk -F'-' '{print $1}')
if [ "$ex" = "ex" ] ; then
if [ $(IfRunning $vmname) = 0 ] ; then
if [ $(IfPause $vmname) = 0 ] ; then
echo " > " $vmname " is running but Already paused, Ex Skip PAUSE START ! "
else
echo " > " $vmname " is running and not paused, Ex PAUSE START ! "
./002-snapshotVMPause.sh $vmname
fi
else
echo " > " $vmname " is not running, Ex PAUSE Skip Pause !"
fi
else
if [ $(IfRunning $vmname) = 0 ] ; then
if [ $(IfPause $vmname) = 0 ] ; then
echo " > " $vmname " Already paused, notEx Skip PAUSE START ! "
else
echo " > " $vmname " is running and not paused, notEx PAUSE START ! "
./002-snapshotVMPause.sh $vmname
fi
else
echo " > " $vmname " is not running, notEx Skip Pause !"
fi
fi
done
}
# VM Snapshot
Snapshot(){
echo -e "\n## Virtural Images Snapshot ##"
for i in $allVm
do
vmname=$(echo $i | sed -e "s/\"//g")
ex=$(echo $vmname | awk -F'-' '{print $1}')
if [ "$ex" = "ex" ] ; then
if [ $(IfPause $vmname) = 0 ] ; then
echo " > " $vmname " is pause, Ex Snapshot Skip ! "
else
echo " > " $vmname " is not pause, Ex Snapshot Skip !"
fi
else
if [ $(IfPause $vmname) = 0 ] ; then
if [ "$ex" = "Test" ] ; then
echo " > " $vmname " is pause, notEx but it is Test VM so Snapshot Skip !"
else
echo " > " $vmname " is pause, notEx Snapshot START !"
./003-snapshotVM.sh $vmname
fi
else
echo " > " $vmname " is not pause, notEx Snapshot Skip ! "
fi
fi
done
}
# VM Delete
Delete(){
echo "\n## Virtural Images Backup Snapshot Delete ##"
for i in $allVm
do
vmname=$(echo $i | sed -e "s/\"//g")
ex=$(echo $vmname | awk -F'-' '{print $1}')
if [ "$ex" = "ex" ] ; then
echo " > " $vmname " Skip Snapshot Delete !"
else
if [ "$ex" = "Test" ] ; then
echo " > " $vmname " is disable VM so Skip Snapshot Delete !"
else
if [ $(IfPause $vmname) = 0 ] ; then
echo " > " $vmname " is pause, Snapshot Delete START ! "
./004-snapshotiDeleteVM.sh $vmname
else
echo " > " $vmname " is not pause, notEx Skip Snapshot Delete !"
fi
fi
fi
done
}
# VM Resuming
Resuming(){
echo "\n## Virtural Images Snapshot ##"
for i in $allVm
do
vmname=$(echo $i | sed -e "s/\"//g")
ex=$(echo $vmname | awk -F'-' '{print $1}')
if [ "$ex" = "ex" ] ; then
if [ $(IfPause $vmname) = 0 ] ; then
echo " > " $vmname " is pause, Ex START ! "
./005-snapshotResuming.sh $vmname
else
echo " > " $vmname " is not pause, Ex Check Start VM !"
if [ $(IfRunning $vmname) = 0 ] ; then
echo " > " $vmname " is running, Ex Skip Start VM !"
else
echo " > " $vmname " is not running, Ex Start VM !"
./005-snapshotResuming.sh $vmname
fi
fi
else
if [ "$ex" = "Test" ] ; then
echo " > " $vmname " is disable VM so Not Start VM !"
else
if [ $(IfPause $vmname) = 0 ] ; then
echo " > " $vmname " is pause, notEx Start VM !"
./005-snapshotResuming.sh $vmname
else
echo " > " $vmname " is not pause, notEx Check Start VM !"
if [ $(IfRunning $vmname) = 0 ] ; then
echo " > " $vmname " is running, Ex Skip Start VM !"
else
echo " > " $vmname " is not running, Ex Start VM !"
./005-snapshotResuming.sh $vmname
fi
fi
sleep 5
fi
fi
done
}
cd /home/hyunsu/BackUpCenter/20221014-snapshot/
PrintVmList
PauseVM
Snapshot
Delete
Resuming
echo -e "\n"
echo "##############################################"
echo "############# MAKE SNAPSHOT END ! ############"
echo "##############################################"
echo -e "\n"