#!/bin/sh newip=$1; newpasswd=$2; if [ ! -f /tmp/newserver.sh ];then cat >> /tmp/newserver.sh << "EOF" #!/bin/sh sed -i 's#rhel6.2.0#pc#' /vm/vm/$1/$1.xml; [ $? != 0 ] && exit 1; sed -i 's#/usr/libexec/qemu-kvm#/usr/bin/kvm#' /vm/vm/$1/$1.xml; [ $? != 0 ] && exit 2; if [ -f /vm/vm/$1/snapshot/*.xml ];then sed -i 's#rhel6.2.0#pc#' /vm/vm/$1/snapshot/*.xml; [ $? != 0 ] && exit 3; sed -i 's#/usr/libexec/qemu-kvm#/usr/bin/kvm#' /vm/vm/$1/snapshot/*.xml; [ $? != 0 ] && exit 4; mkdir -p /var/lib/libvirt/qemu/snapshot/$1 && cp /vm/vm/$1/snapshot/*.xml /var/lib/libvirt/qemu/snapshot/$1; [ $? != 0 ] && exit 5; fi virsh define /vm/vm/$1/$1.xml; virsh start $1; hostip=$(less /vm/vm/$1/$1.xml| grep value |grep -o -P '(\d{1,3}\.){3}\d{1,3}') if [ -n $hostip ];then ping -c 2 $hostip; while [ $? != 0 ] do ping -c 2 $hostip; done fi [ $? != 0 ] && exit; echo echo =================================== > /dev/pts/ttynum echo ===========$1======over======= > /dev/pts/ttynum echo =================================== > /dev/pts/ttynum echo `date +%F` `date +%T` $1 ok >> /tmp/okhost EOF fi chmod 700 /tmp/newserver.sh #scp newserver.sh to newserver expect -c " spawn scp -r /tmp/newserver.sh root@$newip:/tmp/ expect { \"*assword\" {set timeout 300; send \"$newpasswd\r\";} \"yes/no\" {send \"yes\r\"; exp_continue;} } expect eof" [ $? != 0 ] && echo "create newserver or scp wang!" && exit; echo "create and scp newserver ok"
if [ ! -f /tmp/zcc.host ];then
#ls /vm/vm |sort > /tmp/zcc.host virsh list --all | sed '1,2d' | sed '$d' | awk '{print $2}'| sort > /tmp/zcc.host fi
while read host do virsh destroy $host 2>/dev/null sleep 3
virsh snapshot-list $host > /tmp/$$.snapshot snapshotname=$(grep -o -P '\d{14}' /tmp/$$.snapshot) rm /tmp/$$.snapshot if [ -n "$snapshotname" ];then virsh snapshot-delete $host $snapshotname;
fi
virsh undefine $host
expect -c "
spawn scp -r /vm/vm/$host/ root@$newip:/vm/vm/ expect { \"*assword\" {set timeout 300; send \"$newpasswd\r\";} \"yes/no\" {send \"yes\r\"; exp_continue;} } expect eof" if [ $? = 0 ];then echo ============================= echo ====$host=====scp======OK==== echo =============================
sed -i "/^$host$/d" /tmp/zcc.host fi
expect -c " spawn ssh root@$newip \"nohup /tmp/newserver.sh $host\" & expect { \"*assword\" {set timeout 300; send \"$newpasswd\r\";} \"yes/no\" {send \"yes\r\"; exp_continue;} } expect eof"
done < /tmp/zcc.host rm /tmp/zcc.host 此脚本用户kvm架构的云主机,迁移服务器使用,只需要在旧服务器上操作,新服务器无需登录操作就可以完成迁移。 name.sh 新服务器ip 新服务器密码 1、由于expect无法识别特殊字符,所以新服务器密码不可以有特殊字符。(为了安全,可以在新服务器的iptables里面把旧服务器ip的22端口允许访问,在修改新服务器密码为简单密码)
2、由于expect无法返回$?,所以当新服务器网络突然中断了,此脚本还会继续运行。(bug)
|