经常玩linux的朋友,有时候会不会为了创建虚拟机搭建环境而苦恼,接下来所展示的如何在5秒内创建一个可以使用的虚拟机。
实验环境:

[root@luc ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 

准备的文件:

rh7_template.img和 rhel7.xml
如果没有两个文件的,可以直接使用下面的文件。
链接: https://pan.baidu.com/s/1ESlqw22wEY9HP2-kCFptpA 密码: etyh
链接: https://pan.baidu.com/s/1rm-sVkd3R7GtdVEyaFqeSQ 密码: myh3
把下载的文件放到/var/lib/libvirt/images/ 并保存为以.开头文件名

[root@luc ~]# mv  rh7_template.img    /var/lib/libvirt/images/.rh7_template.img
[root@luc ~]# mv  rhel7.xml   /var/lib/libvirt/images/.rhel7.xml

搭建虚拟环境:

[root@luc ~]# yum -y groups install 虚拟化平台 虚拟化主机 虚拟化客户端   
// 真机是中文环境,如果是英文环境就安装 “Virtualization Platform” “Virtualization Host”  “Virtualization Client”   每个部分之间要有空格隔开
[root@luc ~]# virt-manager                  //调出虚拟×××管理器,如下图

linux下5秒创建rhel7虚拟机
进入编辑——>连接详情——>虚拟网络,如下图
linux下5秒创建rhel7虚拟机
添加四个虚拟网络分别是
private1,private2,public1,public2
点击上图的左下脚加号,出现如图所示:(以private1为例子)
linux下5秒创建rhel7虚拟机
linux下5秒创建rhel7虚拟机
linux下5秒创建rhel7虚拟机
完成即可。
private1,配置的ip网段是:192.168.1.0/24
private2,配置的ip网段是:192.168.2.0/24
public1,配置的ip网段是:100.0.1.0/24
public2,配置的ip网段是:100.0.1.0/24

创建虚拟机的脚本

下面连接可以直接下载使用:
链接: https://pan.baidu.com/s/1lx_murPn7U09hywyuWSFyw 密码: 4xq6
[root@luc ~]# vim clone-vm7

#! /usr/bin/bash

# 定义变量
IMG_DIR=/var/lib/libvirt/images
BASEVM=rh7_template
NUM=`tr -dc '0-9a-f' < /dev/urandom  |head -c 2`

# 输入创建虚拟机的编号
read -p "Enter VM number: " VMNUM

# 判断输入编号
if [ -z "${VMNUM}" ]; then
    echo "You must input a number."
    exit 1
elif [ $(echo ${VMNUM}*1 | bc) = 0 ]; then
    echo "You must input a number."
    exit 2
elif [ ${VMNUM} -lt 1 -o ${VMNUM} -gt 99 ]; then
    echo "Input out of range"
    exit 3
fi

# 生成新的变量并判断文件是否存在
NEWVM=rh7_node${VMNUM}

if [ -e $IMG_DIR/${NEWVM}.img ]; then
    echo "File exists."
    exit 4
fi

# 创建新虚拟机的img文件
echo -en "Creating Virtual Machine disk image......\t"
qemu-img create -f qcow2 -b $IMG_DIR/.${BASEVM}.img $IMG_DIR/${NEWVM}.img &> /dev/null
echo -e "\e[32;1m[OK]\e[0m"

# 修改新虚拟机的xml文件
cat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xml

# 修改新虚拟机的主机名和uuid
sed -i "/<name>${BASEVM}/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml
sed -i "/uuid/s/<uuid>.*<\/uuid>/<uuid>$(uuidgen)<\/uuid>/" /tmp/myvm.xml

# 修改新虚拟机的使用的img路径
sed -i "/${BASEVM}\.img/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml

# 模板给4个网卡,修改每个网卡的mac地址
sed -i "/mac /s/a1/${NUM}/" /tmp/myvm.xml
sed -i "/mac /s/a2/${NUM}/" /tmp/myvm.xml
sed -i "/mac /s/a3/${VMNUM}/" /tmp/myvm.xml

sed -i "/mac /s/b1/${NUM}/" /tmp/myvm.xml
sed -i "/mac /s/b2/${NUM}/" /tmp/myvm.xml
sed -i "/mac /s/b3/${VMNUM}/" /tmp/myvm.xml

sed -i "/mac /s/c1/${NUM}/" /tmp/myvm.xml
sed -i "/mac /s/c2/${NUM}/" /tmp/myvm.xml
sed -i "/mac /s/c3/${VMNUM}/" /tmp/myvm.xml

sed -i "/mac /s/d1/${NUM}/" /tmp/myvm.xml
sed -i "/mac /s/d2/${NUM}/" /tmp/myvm.xml
sed -i "/mac /s/d3/${VMNUM}/" /tmp/myvm.xml

# 导入虚拟机配置
echo -en "Defining new virtual machine......\t\t"
virsh define /tmp/myvm.xml &> /dev/null
echo -e "\e[32;1m[OK]\e[0m"

创建虚拟机

[root@luc ~]# ./clone-vm7
Enter VM number: 1
Creating Virtual Machine disk image...... [OK]
Defining new virtual machine...... [OK]
linux下5秒创建rhel7虚拟机
注:用户名为root 密码为:123456 。 登陆结果如下:

linux下5秒创建rhel7虚拟机

在命令行输入init 5 直接可以进入图形界面模式
linux下5秒创建rhel7虚拟机

注:运行级别
init 0 关闭主机
init 3 多用户命令行模式
init 5 图形界面模式
init 6 重启主机
init 1和2 分别是单用户和多用户(没有NFS)
centos7设置命令:
systemctl isolate multi-user.target
systemctl isolate graphical.target
systemctl set-default 目标级别

原理

简单说:
一台正常的KVM虚拟机的组成:
主机箱和外部设备 -------> 配置文件xml文件(name,uuid,disk位置,网卡mac等)
磁盘------> 虚拟机的镜像文件img文件

虚拟机的配置的导出和导入操作
virsh dumpxml 虚拟机名称 > 文件名.xml (打印配置文件)
virsh define 文件名.xml (组装机器)

KVM相关的命令
virt-manager //打开虚拟×××管理器
virsh list --all //列出所有虚拟机
virsh start 虚拟机名称 //虚拟机开机
virsh destroy 虚拟机名称 //强制断电关机
virsh autostart 虚拟机名称 //虚拟机开机自启 --disable 取消开机自启
virsh console 虚拟机名 //不需要ip地址登陆虚拟机

virsh nodeinfo //查看虚拟机服务器的cpu信息
virsh dominfo 虚拟机名称 //查看虚拟机配置
virsh edit 虚拟机名称 //修改虚拟机额配置

共勉:I hear and I forget. I see and I remember. I do and I understand!