Centos7部署KVM虚拟机
查看cpu是否支持虚拟化
cat /proc/cpuinfo | egrep 'vmx|svm'
查看是否加载KVM
lsmod | grep kvm
没有加载则执行
modprobe -a kvm
modprobe -a kvm_intel
关闭selinux
setenforce 0
vim /etc/sysconfig/selinux
-------------------
SELINUX=disabled
-------------------
安装KVM软件
yum install qemu-kvm qemu-img libguestfs-tools \
virt-manager libvirt libvirt-python virt-manager qemu-kvm \
libvirt-client virt-install virt-viewer libvirt -y
启动libvirt并设置开机自启动
systemctl start libvirtd
systemctl enable libvirtd
systemctl status libvirtd
创建两个新目录,一个存放系统镜像,一个做虚拟机的存储盘
mkdir /opt/images
进入图形化
virt-manager
修改kvm网段
virsh net-edit default
宿主机查看虚拟机
virsh list --all
查看compute1虚拟机的配置文件
ll /etc/libvirt/qemu
开始克隆
virt-clone -o compute1 -n compute2 -f /home/images/compute2.qcow2
kvm配置网络
宿主机
virsh net-edit default
修改想要的网段
virsh net-define /etc/libvirt/qemu/networks/default.xml
virsh net-destroy default
virsh net-start default
systemctl restart libvirtd
虚拟机配置网络
kvm命令
virsh list --all 查看虚拟机
virsh start xxx 启动虚拟机xxx
virsh shutdown xxx 关闭虚拟机xxx
virsh reboot xxx 重启虚拟机xxx
-o 原虚拟机 -n 新虚拟机 -f 存放路径
virt-clone -o centos7.0 -n xuegod110 -f /var/images/xuegod110.qcow2 克隆虚拟机
virsh snapshot-create 【虚拟机名称】 创建快照
virsh snapshot-list 【虚拟机名称】 查看快照
virsh snapshot-create-as 【虚拟机名】 【快照名】 创建快照
virsh snapshot-revert 【虚拟机名】 【快照名】 快照恢复
virsh snapshot-delete 【虚拟机名】 【快照名】 快照删除
kvm命令脚本
批量克隆
[root@hpc machine]# cat clone_vms.sh
# 设置原始虚拟机名称和磁盘文件路径
original_vm="centos7.9_01"
original_disk="/mnt/kvm/machine/centos7.9_01.qcow2"
# 目标虚拟机名称和磁盘路径的前缀
target_vm_prefix="centos7.9_"
target_disk_prefix="/mnt/kvm/machine/centos7.9_"
# 使用 for 循环批量克隆虚拟机
for i in $(seq -w 2 17); do
# 格式化 i 为两位数
target_vm="${target_vm_prefix}${i}"
target_disk="${target_disk_prefix}${i}.qcow2"
# 执行 virt-clone 命令
virt-clone -o "$original_vm" -n "$target_vm" -f "$target_disk"
echo "已克隆虚拟机:$original_vm 到 $target_vm,磁盘文件路径:$target_disk"
done
批量创建快照
[root@hpc machine]# cat create_snapshots.sh
#!/bin/bash
# 定义快照名称
snapshot_name="purity"
# 循环遍历虚拟机名称并创建快照
for i in $(seq -w 1 17); do
vm_name="centos7.9_${i}"
# 检查虚拟机是否存在
if virsh dominfo "$vm_name" &> /dev/null; then
# 创建快照
virsh snapshot-create-as "$vm_name" "$snapshot_name" --description "Snapshot $snapshot_name for $vm_name"
echo "已为虚拟机 $vm_name 创建快照:$snapshot_name"
else
echo "虚拟机 $vm_name 不存在,跳过"
fi
done
批量查看快照
[root@hpc machine]# cat list_snapshots.sh
#!/bin/bash
# 定义虚拟机的前缀和范围
vm_prefix="centos7.9_"
# 循环遍历所有虚拟机
for i in $(seq -w 2 17); do
vm_name="${vm_prefix}${i}"
# 检查虚拟机是否存在
if virsh dominfo "$vm_name" &> /dev/null; then
echo "虚拟机 $vm_name 的快照列表:"
virsh snapshot-list "$vm_name"
echo "-----------------------------"
else
echo "虚拟机 $vm_name 不存在,跳过"
fi
done
批量开关机
[root@hpc machine]# cat manage_vms.sh
#!/bin/bash
# 检查输入参数
if [ "$1" == "start" ]; then
action="start"
echo "Starting all virtual machines..."
elif [ "$1" == "stop" ]; then
action="shutdown"
echo "Shutting down all virtual machines..."
else
echo "Usage: $0 [start|stop]"
exit 1
fi
# 获取所有虚拟机名称
vm_list=$(virsh list --all --name)
# 遍历虚拟机列表并执行操作
for vm in $vm_list; do
if [ -n "$vm" ]; then
echo "${action^}ing $vm..."
virsh $action $vm
fi
done
echo "All virtual machines have been ${action}ed."
批量删除快照
[root@hpc sunty]# cat drop_snapshots.sh
#!/bin/bash
# 定义虚拟机的前缀和范围
vm_prefix="centos7.9_"
snapshot_name="base01"
# 循环遍历虚拟机名称并删除快照
for i in $(seq -w 1 21); do
vm_name="${vm_prefix}${i}"
# 检查虚拟机是否存在
if virsh dominfo "$vm_name" &> /dev/null; then
echo "正在处理虚拟机 $vm_name ..."
# 检查并删除指定名称的快照
snapshot_exists=$(virsh snapshot-list "$vm_name" --name | grep "$snapshot_name")
if [ -n "$snapshot_exists" ]; then
echo "删除快照 $snapshot_name ..."
virsh snapshot-delete "$vm_name" --snapshotname "$snapshot_name" --metadata
# 删除快照源文件(这里假设快照文件的存放路径根据虚拟机而不同,需要根据实际情况调整)
snapshot_file="/var/lib/libvirt/images/${vm_name}_${snapshot_name}.qcow2" # 假设快照存储在该路径下
if [ -f "$snapshot_file" ]; then
echo "删除快照源文件:$snapshot_file"
rm -f "$snapshot_file"
else
echo "找不到快照源文件:$snapshot_file"
fi
else
echo "虚拟机 $vm_name 没有名为 $snapshot_name 的快照,跳过"
fi
echo "-----------------------------"
else
echo "虚拟机 $vm_name 不存在,跳过"
fi
done