最近忙着弄虚拟机,什么数据都需要备份,即使虚拟机也不例外,下面是我自己写的备份脚本根据实际情况进行使用,:)

 

首先做一个NFS服务器,此服务器需要大容量磁盘,然后再需要备份的虚拟服务器主机上挂在共享目录

然后就可以实施脚本做成计划任务做备份

 ###################################################################################################

####                       创建所有虚拟机的快照并导出为模板删除快照                            ####

###################################################################################################

#全部  测试OK

#!/bin/bash

 

#Version: v.2

#Date: 2012.07.20

#Auther:andylhz

#Propose:Create All VM's snapshot on XenServer and export snapshot to template and delete the snapshot.

#Script name: A_vm_export_shapshot_to_template.sh, Example:./A_vm_export_shapshot_to_template.sh

 

 

 

 

 

##Get System Date

DT=$(date +%Y%m%d%H%M%S)

 

##Seting backup dir

backup_dir=/root/vmbk

 

##Get VM uuid list

 

echo "VM snapshot is createing...."

 

   for vmname in `xe vm-list params=name-label |awk '{print $5}' |grep -v ^C |sed '/^$/d'` ;

     

     do echo `xe vm-snapshot vm=$vmname    new-name-label=$vmname`  >> $backup_dir/snapshot_uuid ;            

 

     if [ $? -eq 0 ]; then

 

      echo  "VM snapshot $vmname is created....OK!"

    else

      echo  "VM snapshot $vmname is created....FAILSE!"

      exit 1

    fi

 

    done

 

##Export snapshots as a template

 

#Get snapshot uuid

xe snapshot-list params=uuid,name-label|sed '/^$/d' |awk '{print $4,$5}' |sed 's/: //g'|sed -e 'N; s/\n/ /g' >$backup_dir/vmname_sanpuid

 

echo "Templates are exporting please waite....."

 

   for snap_uuid in `cat $backup_dir/vmname_snapuid|awk '{print $1}'`;

     

     do xe snapshot-export-to-template  snapshot-uuid=$snap_uuid   filename=$backup_dir/$snap_uuid$DT.xva ;

      

   if [ $? -eq 0 ]; then

 

      echo  "VM template $snap_uuid$DT is created....OK!"

   else

      echo  "VM template $snap_uuid$DT is created....FAILSE!"

      

      exit 1

   fi

         

   done

   

 

##Compressed export file.

 

cd  $backup_dir

 

echo "VM templates are being compressed...."

 

gzip  *.xva

 

 if [ $? -eq 0 ]; then

 

      echo  "VM template is compressed....OK!"

 else

      echo  "VM template is compressed....FAILSE!"

      

      exit 1

 fi

 

 

##Delete snapshot

 

echo "Deleteing snapshot....."

 

      for snap_uuid in `cat $backup_dir/snapshot_uuid`;

     

         do xe snapshot-uninstall    snapshot-uuid=$snap_uuid force=true;

         

 if [ $? -eq 0 ]; then

 

      echo   "Snapshot $snap_uuid deleted.....OK!"

 else

      echo   "Snapshot $snap_uuid deleted.....FAILSE!"

      

      exit 1

 fi

                 

      done

 

mv snapshot_uuid   snapshot_uuid$DT

mv vmname_sanpuid vmname_sanpuid$DT

 

 

 

###################################################################################################

####                           对某个虚拟机做快照并导出为模板                                  ####

###################################################################################################

#静默方式 测试OK!

 

#!/bin/bash

 

#Version: v.1

#Date: 2012.07.20

#Auther:andylhz

#Propose:Create one VM's snapshot on XenServer and export snapshot to template and delete the snapshot.

#Script name: Q_vm_export_shapshot_to_template.sh, Example:Q_vm_export_shapshot_to_template.sh  snapshot_name

 

 

 

 

#Dfine varable

 

#Get System Date

DT=$(date +%Y%m%d%H%M%S)

 

#Seting backup dir

backup_dir=/root/vmbk

 

#VM name you want to export, parameter is shapshot name!

 

v_host=$1 

 

##Create vm snapshot 

 

echo "VM snapshot is createing...."

 

echo `xe vm-snapshot vm=$v_host    new-name-label=$v_host$DT`  > $backup_dir/snapshot_uuid

    [ -n  $backup_dir/snapshot_uuid ]

    if [ $? -eq 1 ]; then

 

      echo  "VM snapshot $v_host$DT is created....OK!"

    else

      echo  "VM snapshot $v_host$DT created....FAILSE !"

      exit 1

    fi

 

 

sn_uuid=`cat $backup_dir/snapshot_uuid`

 

echo "Convert snapshot to template and export"

 

echo "Template exporting....."

 

xe snapshot-export-to-template  snapshot-uuid=$sn_uuid   filename=$backup_dir/$v_host$DT.xva

 

if [ $? -eq 0 ]; then

      echo  "Template $v_host$DT Exported...OK!"

    else

      echo "Template $v_host$DT Exported...FAILSE!"

      exit 1

    fi

 

 

cd  $backup_dir

 

echo "VM templates are being compressed...."

 

gzip  $v_host*.xva

 

 if [ $? -eq 0 ]; then

 

      echo  "VM template $v_host*.xva is compressed....OK!"

 else

      echo  "VM template $v_host*.xva is compressed....FAILSE!"

      

      exit 1

 fi

 

 

echo "Deleteing snapshot:"$sn_uuid

 

xe snapshot-uninstall snapshot-uuid=$sn_uuid  force=true

 

if [ $? -eq 0 ]; then

 

      echo   "Snapshot $sn_uuid deleted.....OK!"

 else

      echo   "Snapshot $sn_uuid deleted.....FAILSE!"

      

      exit 1

 fi

 

 

 

###################################################################################################

####                             解压缩模板并导入创建虚拟机                                    ####

###################################################################################################

#!/bin/bash

 

#Version v.1

#Date: 2012.07.20

#Auther:andylhz

#Porpose: Install VM from GZIP template.

#Script name: gzip_vm_install_from_template.sh, Example:gzip_vm_install_from_template.sh  abc_template.gz

 

 

 

 

 

#Import VM template and  install

 

#read  import

 

gunzip $1

 

#gunzip import file

 

importfile=`echo $1 |sed  s/\.gz$//g`

 

#importfile=`echo $import |sed  s/\.gz$//g`

 

xe vm-import filename=$importfile

 

    if [ $? -eq 0 ]; then

 

            echo  "VM Template $importfile import success....OK!"

       else

            echo  "VM Template $importfile import....FAILSE!"

            exit 1

    fi

 

 

 

##Create VM from template

 

echo "Installing VM:"${importfile}clone

 

xe vm-install template=$importfile new-name-label=${importfile}clone  

 

 if [ $? -eq 0 ]; then

 

            echo  "Installing VM:"${importfile}clone....OK!"

       else

            echo  "Installing VM:"${importfile}clone....FAILSE!"

            exit 1

    fi

 

#Starting VM

echo "Starting VM:"${importfile}clone

 

xe vm-start vm=${importfile}clone

 

 if [ $? -eq 0 ]; then

 

            echo "Starting VM:"${importfile}clone....OK!"

       else

            echo "Starting VM:"${importfile}clone....FAILSE!"

            exit 1

    fi

 

 

echo "All options is OK"

 

 

 

###################################################################################################

####                               根据导入模板并创建虚拟机                                    ####

###################################################################################################

 

静默+参数模式:

 

#!/bin/bash

 

#Version v.2

#Date: 2012.07.20

#Auther: andylhz

#Porpose: Install VM from template.

#Script name: Q_vm_install_from_template.sh, Example: Q_vm_install_from_template.sh  template_name

 

 

 

 

##Creater VM from imported template

 

install_tp=$1

 

echo  "Use VM template is:"$1

 

echo  "The VM is installing....." 

 

xe vm-install template=$install_tp new-name-label=${install_tp}clone

 

echo "Starting VM:"${install_tp}clone

 

xe vm-start vm=${install_tp}clone

 

echo "Starting VM:"${install_tp}clone "OK!"

 

echo "All options is OK!"

 

 

###################################################################################################

 

备份中的备份文件夹是挂在远端的NFS 服务器到本地xen服务器上。

NFS配置在这里不做介绍