本文目录导读:

在Shell脚本中克隆虚拟机实例的方法取决于你使用的虚拟化平台,以下是几种主流平台的脚本示例:
VMware vSphere/ESXi
#!/bin/bash
# VMware vSphere 克隆脚本
VM_SOURCE="source-vm-name"
VM_CLONE="clone-vm-name"
DATASTORE="datastore-name"
CLUSTER="cluster-name"
# 使用 govc 工具
# 创建完整克隆
govc vm.clone -vm $VM_SOURCE -name $VM_CLONE -ds=$DATASTORE -cluster=$CLUSTER
# 创建链接克隆
govc vm.clone -vm $VM_SOURCE -name $VM_CLONE -ds=$DATASTORE -cluster=$CLUSTER -linked
# 使用 vmware-vim-cmd
vmware-vim-cmd vmsvc/getallvms | grep $VM_SOURCE | awk '{print $1}' | while read VM_ID; do
vim-cmd vmsvc/clone $VM_ID $VM_CLONE $DATASTORE
done
KVM/QEMU
#!/bin/bash
# KVM 克隆脚本
SOURCE_VM="source-vm"
CLONE_VM="clone-vm"
STORAGE_PATH="/var/lib/libvirt/images"
# 创建磁盘快照
qemu-img create -f qcow2 -b $STORAGE_PATH/$SOURCE_VM.qcow2 \
$STORAGE_PATH/$CLONE_VM.qcow2
# 导出并修改 XML 配置
virsh dumpxml $SOURCE_VM > /tmp/$CLONE_VM.xml
# 修改 VM 名称和 UUID
sed -i "s/<name>$SOURCE_VM<\/name>/<name>$CLONE_VM<\/name>/" /tmp/$CLONE_VM.xml
UUID=$(uuidgen)
sed -i "s/<uuid>.*<\/uuid>/<uuid>$UUID<\/uuid>/" /tmp/$CLONE_VM.xml
# 修改磁盘路径
sed -i "s|$SOURCE_VM.qcow2|$CLONE_VM.qcow2|g" /tmp/$CLONE_VM.xml
# 定义新虚拟机
virsh define /tmp/$CLONE_VM.xml
VirtualBox
#!/bin/bash
# VirtualBox 克隆脚本
SOURCE_VM="source-vm-name"
CLONE_VM="clone-vm-name"
# 完整克隆
VBoxManage clonevm "$SOURCE_VM" --name "$CLONE_VM" --register
# 链接克隆
VBoxManage clonevm "$SOURCE_VM" --name "$CLONE_VM" --options Link --register
# 指定克隆类型
VBoxManage clonevm "$SOURCE_VM" --name "$CLONE_VM" \
--mode machine --register
通用模板脚本
#!/bin/bash
# 通用虚拟机克隆脚本
set -e
# 配置变量
source_vm="${1:?请提供源虚拟机名称}"
clone_vm="${2:?请提供克隆虚拟机名称}"
vm_type="${3:-vmware}" # 可选: vmware, kvm, virtualbox
clone_vmware() {
echo "克隆 VMware 虚拟机: $source_vm -> $clone_vm"
govc vm.clone -vm "$source_vm" -name "$clone_vm"
}
clone_kvm() {
echo "克隆 KVM 虚拟机: $source_vm -> $clone_vm"
local disk_path=$(virsh domblklist "$source_vm" | grep vda | awk '{print $2}')
local clone_disk="${disk_path/$source_vm/$clone_vm}"
# 克隆磁盘
qemu-img create -f qcow2 -b "$disk_path" "$clone_disk"
# 克隆配置
virsh dumpxml "$source_vm" > "/tmp/${clone_vm}.xml"
sed -i "s/$source_vm/$clone_vm/g" "/tmp/${clone_vm}.xml"
virsh define "/tmp/${clone_vm}.xml"
}
clone_virtualbox() {
echo "克隆 VirtualBox 虚拟机: $source_vm -> $clone_vm"
VBoxManage clonevm "$source_vm" --name "$clone_vm" --register
}
# 执行克隆
case $vm_type in
vmware)
clone_vmware
;;
kvm)
clone_kvm
;;
virtualbox)
clone_virtualbox
;;
*)
echo "不支持的虚拟机类型: $vm_type"
exit 1
;;
esac
echo "虚拟机克隆完成: $clone_vm"
高级克隆脚本(含自定义功能)
#!/bin/bash
# 高级克隆脚本,支持网络配置和主机名修改
set -euo pipefail
# 函数:克隆后配置
configure_clone() {
local vm_name="$1"
local new_hostname="$2"
local network_config="$3"
case $vm_type in
vmware)
# 修改 VM 网络设置
govc vm.change -vm "$vm_name" -e "guestinfo.hostname=$new_hostname"
;;
kvm)
# 修改 KVM 虚拟机配置
virsh set-user-metadata "$vm_name" "hostname" "$new_hostname"
;;
esac
# 启动虚拟机
echo "启动克隆虚拟机: $vm_name"
case $vm_type in
vmware) govc vm.power -on "$vm_name" ;;
kvm) virsh start "$vm_name" ;;
virtualbox) VBoxManage startvm "$vm_name" --type headless ;;
esac
# 等待 VM 就绪
sleep 30
# SSH 配置(需要 SSH密钥认证)
if command -v ssh &> /dev/null; then
local ip=$(get_vm_ip "$vm_name")
echo "配置主机名: $new_hostname @ $ip"
ssh -o StrictHostKeyChecking=no "root@$ip" \
"hostnamectl set-hostname $new_hostname"
fi
}
get_vm_ip() {
local vm_name="$1"
case $vm_type in
vmware) govc vm.ip "$vm_name" ;;
kvm) virsh domifaddr "$vm_name" | grep ipv4 | awk '{print $4}' | cut -d'/' -f1 ;;
*) echo "192.168.1.100" ;;
esac
}
# 主执行流程
clone_vm "$source_vm" "$clone_vm"
configure_clone "$clone_vm" "new-server-01" "dhcp"
使用示例
# 克隆 VMware 虚拟机 ./clone_vm.sh source-vm clone-vm vmware # 克隆 KVM 虚拟机 ./clone_vm.sh source-vm clone-vm kvm # 克隆 VirtualBox 虚拟机 ./clone_vm.sh source-vm clone-vm virtualbox
注意事项
- 权限要求:运行脚本需要管理员权限
- 存储空间:确保有足够的存储空间
- 网络配置:克隆后可能需要修改网络设置
- 主机名冲突:避免同一网络中出现同名主机
- 许可证问题:某些操作系统克隆后可能需要重新激活
根据你的具体需求和虚拟化平台,选择合适的克隆方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播