kvm鏡像複製

#!/bin/bash
#本腳本用於拷貝kvm鏡像文件,只需要選擇拷貝哪個鏡像,拷貝幾次即可
#user:falconhero
#qq  : 40594324
#date: 2012.12.20
cd /home/vm
ls |grep qcow2
numeric=`ls|grep qcow2|wc -l`
if [ $numeric -eq 1 ]
    then
        MIRROR=`ls |grep qcow2`
else
    echo "請選擇你要拷貝的鏡像文件"
    read MIRROR
fi

echo "此鏡像文件你想要拷貝幾次?"
read num    

for i in `ls $MIRROR`
do
    NAME=`echo $i|sed -n 's/^\(.*[-_]\)\([[:digit:]]\+\).qcow2$/\1/p'`
    NUMBER=`echo $i|sed -n 's/^\(.*[-_]\)\([[:digit:]]\+\).qcow2$/\2/p'`
    #NUMBER=10#${NUMBER}
    NAME1=`echo $i|sed -n 's/^\(.*\).qcow2/\1/p'`
    vncmaxport=`grep vnc /etc/libvirt/qemu/*.xml|sed -n 's/^.*port\(.*\)auto.*$/\1/p'|cut -b 3-6|sort -rn|head -1`
    vncmirrorport=`grep vnc /etc/libvirt/qemu/${NAME1}.xml|sed -n 's/^.*port\(.*\)auto.*$/\1/p'|cut -b 3-6`
    elq=/etc/libvirt/qemu/  
    Mn=`ps -ef |grep $MIRROR|wc -l `
    #let "A = $NUMBER + 1"
    A=`expr $NUMBER + 1`
    B=`expr $NUMBER + $num`
    C=`expr $vncmaxport + 1`
    D=`expr $vncmaxport + $num`
    if [ $Mn -eq 2  ]
       then
           echo "*****鏡像現在是啓動狀態,需要關閉,請確認是否關閉****** "
           echo "1,y 爲關閉鏡像,2,n 爲退出操作"
           echo "1|y)yes"
           echo "2|n)no"
           read judge
           
           case $judge in
                1|y) virsh destroy $NAME1
                     sleep 10
                     ;;
                2|n) exit
                     ;;
                  *) echo "輸入錯誤,請重輸"
                     ;;
           esac
    fi
    
    for ((j=$A,k=$C;j<=$B,k<=$D;j++,k++))
        do
        if [ $j -le 9  ]    
           then
              if [ ! -f ${NAME}0$j.qcow2 ]
                 then
                    cp -i $MIRROR  ${NAME}0$j.qcow2 &
                    cp ${elq}${NAME1}.xml               ${elq}${NAME}0$j.xml
                    sed -i s/${NAME1}/${NAME}0$j/g      ${elq}${NAME}0$j.xml
                    sed -i '/^.*uuid/ s/.*//g'          ${elq}${NAME}0$j.xml
                    sed -i '/^.*<mac address/ s/.*//g'  ${elq}${NAME}0$j.xml
                    sed -i s/$vncmirrorport/$k/g        ${elq}${NAME}0$j.xml
                    virsh define                        ${elq}${NAME}0$j.xml
              fi
        else
              if [ ! -f ${NAME}$j.qcow2 ]
                 then
                    cp -i $MIRROR ${NAME}$j.qcow2  &
                    cp  ${elq}${NAME1}.xml              ${elq}${NAME}$j.xml
                    sed -i s/${NAME1}/${NAME}$j/g       ${elq}${NAME}$j.xml
                    sed -i '/^.*uuid/ s/.*//g'          ${elq}${NAME}$j.xml
                    sed -i '/^.*<mac address/ s/.*//g'  ${elq}${NAME}$j.xml
                    sed -i s/$vncmirrorport/$k/g        ${elq}${NAME}$j.xml           
                    virsh define                        ${elq}${NAME}$j.xml
             fi
        fi
    done
done

wait
for ((j=$A;j<=$B;j++))
    do
    virsh start ${NAME1}
    virsh start ${NAME}0$j
    virsh start ${NAME}$j
done

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章