bash练习5 (复制虚拟机)

该脚本是一个用于在Linux环境中复制虚拟机的bash shell脚本。它首先检查是否以root权限运行,并确保提供了正确的参数。然后,脚本会验证源虚拟机是否存在,目标虚拟机是否已存在。接着,它将源虚拟机的配置文件复制并修改为新的虚拟机名称,删除UUID和MAC地址信息,并创建一个新的磁盘文件。如果所有步骤都成功,它将定义新的虚拟机并报告复制成功。
摘要由CSDN通过智能技术生成
#!/usr/bin/bash
# 从指定虚拟机复制一台相同的虚拟机
# usage: copyvm.sh oldvm newvm

# 复制的镜像文件在源镜像文件的相同路径下


if [ $UID -ne 0 ]
then
        echo "You are not root, can not execute this script"
        exit 1
fi

if [ $# -ne 2 ]
then
        echo "Usage Error! Usage: copyvm.sh oldvm newvm"
        exit 1
fi

OLDVM=$1
NEWVM=$2

FLAG=0
ALLVM=$(virsh list --all | sed -n '3,$p' | awk '{print $2}')
for vm in ${ALLVM}
do
        if [[ "${OLDVM}" == "$vm" ]]
        then
                FLAG=1
                break
        fi
done

if [ ${FLAG} -eq 0 ]
then
        echo "source vm ${OLDVM} does not exist!"
        exit 1
fi

FLAG=1
for vm in ${ALLVM}
do
        if [[ "${NEWVM}" == "$vm" ]]
        then
                FLAG=0
                break
        fi
done

if [ ${FLAG} -eq 0 ]
then
        echo "dest vm ${NEWVM} already exits"
        exit 1
fi

virsh dumpxml ${OLDVM} > ${NEWVM}.xml
if [ $? -ne 0 ]
then
        echo "can not dump the xml file"
        exit 1
fi

if [ ! -e ${NEWVM}.xml ]
then
        echo "can not find the new configuration file"
        exit 1
fi

sed -ri "s@<name>.*</name>@<name>${NEWVM}</name>@" ${NEWVM}.xml
sed -ri '/<uuid>/d' ${NEWVM}.xml
sed -ri '/<mac add/d' ${NEWVM}.xml
EXT=$(sed -rn '/<driver name/p' ${NEWVM}.xml |  awk '{print $3}'| sed -rn "s@type='(.*)'.*@\1@p")
DISKPATH=$(sed -rn '/<source file/p' ${NEWVM}.xml | awk -F= '{print $2}'| sed -rn "s@'(.*)'/>@\1@p")

if [ ! -e ${FILEPATH} ]
then
        echo "The old vm disk file does not exist"
        exit 1
fi

DISKDIR=$(dirname ${DISKPATH})

echo "OLDDISK:${DISKPATH}"
echo "NEWDISK:${DISKDIR}/${NEWVM}.${EXT}"

cp ${DISKPATH} ${DISKDIR}/${NEWVM}.${EXT}

if [ $? -ne 0 ]
then
        echo "copy the old vm disk file failed"
        exit 1
fi

sed -ri "s@(.*<source file=').*('/>)@\1${DISKDIR}/${NEWVM}.${EXT}\2@" ${NEWVM}.xml

# echo "${NEWVM}.xml"
virsh define ${NEWVM}.xml &>/dev/null

if [ $? -eq 0 ]
then
        echo "create new virt machine : ${NEWVM} FROM ${OLDVM} successflly!"
else
        echo "create new virt machine : ${NEWVM} failed"
fi

rm -rf ${NEWVM}.xml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值