kvm云主机迁移脚本
#!/bin/shnewip=$1;newpasswd=$2;if [ ! -f /tmp/newserver.sh ];thencat >> /tmp/newserver.sh << "EOF"#!/bin/shsed -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 ];thensed -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;fivirsh 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; donefi[ $? != 0 ] && exit;echoecho =================================== > /dev/pts/ttynumecho ===========$1======over======= > /dev/pts/ttynumecho =================================== > /dev/pts/ttynumecho `date +%F` `date +%T` $1 ok >> /tmp/okhostEOFfichmod 700 /tmp/newserver.sh#scp newserver.sh to newserverexpect -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.hostvirsh list --all | sed '1,2d' | sed '$d' | awk '{print $2}'| sort > /tmp/zcc.hostfi
while read hostdovirsh destroy $host 2>/dev/nullsleep 3
virsh snapshot-list $host > /tmp/$$.snapshotsnapshotname=$(grep -o -P '\d{14}' /tmp/$$.snapshot)rm /tmp/$$.snapshotif [ -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 ];thenecho =============================echo ====$host=====scp======OK====echo =============================
sed -i "/^$host$/d" /tmp/zcc.hostfi
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.hostrm /tmp/zcc.host此脚本用户kvm架构的云主机,迁移服务器使用,只需要在旧服务器上操作,新服务器无需登录操作就可以完成迁移。name.sh 新服务器ip 新服务器密码1、由于expect无法识别特殊字符,所以新服务器密码不可以有特殊字符。(为了安全,可以在新服务器的iptables里面把旧服务器ip的22端口允许访问,在修改新服务器密码为简单密码)
2、由于expect无法返回$?,所以当新服务器网络突然中断了,此脚本还会继续运行。(bug)
帮你顶下哈!! 我本非随便的人,但如果你想随便,那我就随你的便好啦! 路过,支持一下啦 生我之前谁是我,生我之后我是谁? 怀揣两块,胸怀500万! 关羽五绺长髯,风度翩翩,手提青龙偃月刀,江湖人送绰号——刀郎。
页:
[1]