主要步骤如下。
- 通过SSH连接到Xenserver
- 通过awk命令过滤出虚拟机名称及uuid并输出到一个文本
- 创建一块虚拟磁盘并已经格式化,后续此磁盘用于克隆新磁盘
- 通过while循环读取步骤2输出的信息设置新克隆的磁盘名称
- 通过步骤2输出的信息指定新克隆的磁盘挂载给指定uuid虚拟机
#通过awk命令过滤所需信息并重定向到/opt/vm-uuid文件中
xe vm-list | awk '$1=="uuid"||$1=="name-label"{print $NF}' | xargs -n2 | awk -v var=$(hostname) '$2!=var {print $2,$1}' >/opt/vm-uuid
#创建一块虚拟磁盘,设置好磁盘名称和容量大小
sr-uuid可以通过xe sr-list 命令查看,这里主要指定虚拟磁盘建立在哪个存储上面
Nvdi=$(xe vdi-create name-label=TEMP-DATA type=user virtual-size=5GiB sr-uuid=8a6c6978-2671-68af-8faf-f5b8f9c0af9c)
#通过while循环逐行读取文本内容并创建虚拟机磁盘挂载给指定uuid虚拟机,每读取一行执行一次命令,直至读取完成后,循环退出。
cat /opt/vm-uuid | while read line
do
vm_name=`echo $line | awk '{print $1}'`
vm_uuid=`echo $line | awk '{print $2}'`
#echo $vm_name
#echo $vm_uuid
vdi=$(xe vdi-clone new-name-label=$vm_name-DATA uuid=$Nvdi new-name-description=$vm_name-DATA)
echo -e "\e[32m 管理员正在将磁盘[$vm_name-DATA] 挂载给虚拟机[$vm_name]中 \e[0m"
vbd=$(xe vbd-create device=5 vdi-uuid=$vdi vm-uuid=$vm_uuid type=Disk mode=RW)
xe vbd-plug uuid=$vbd &>/dev/null
done