Skip to main content

Snapshot All VM

모든 VM에 대하여 snapshot을 생성합니다. 

  1. 전체 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"