内核虚拟模块(KVM)
系统设备仿真(QEMU)
虚拟机管理程序(LIBVIRT)
– xml配置文件(虚拟机描述文件):定义虚拟机的名称、UUID、CPU、内
存、虚拟磁盘、网卡等各种参数设置
位置:/etc/libvirt/qemu/
– 磁盘镜像文件:保存虚拟机的操作系统及文档数据,
镜像路径取决于xml配置文件中的定义
位置:/var/lib/libvirt/images/
– qemu-kvm :为 kvm 提供底层仿真支持
– libvirt-daemon :libvirtd 守护进程,管理虚拟机
– libvirt-client :用户端软件,提供客户端管理命令
– libvirt-daemon-driver-qemu :libvirtd 连接 qemu 的驱动
– virt-manager :图形管理工具
1.配置yum
https://blog.csdn.net/ck784101777/article/details/93750317
2.安装软件包
[root@svr7 ~]# yum -y install qemu-kvm
[root@svr7 ~]# yum -y install libvirt-daemon
[root@svr7 ~]# yum -y install libvirt-client
[root@svr7 ~]# yum -y install libvirt-daemon-driver-qemu
[root@svr7 ~]# yum -y install virt-manager
virsh命令工具介绍
• 提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 .. ..
– 格式:virsh 控制指令 [虚拟机名称] [参数]
1.常用命令
virsh nodeinfo #查看KVM节点(服务器)信息
virsh list --all #列出虚拟机
virsh net-list --all #列出虚拟网络
virsh dominfo 虚拟机名称 #查看指定虚拟机的信息
virsh autostart nsd01 #设置虚拟机开机自启动
virsh dominfo nsd01 #查看指定虚拟机的信息
virsh autostart --disable nsd01 #禁止虚拟机开机自启动
virsh start或reboot或shutdown 虚拟机名称 #开关机操作
virsh destroy 虚拟机名称 #强制关闭指定的虚拟机
virsh dumpxml vm-node1 #查看KVM虚拟机当前配置
virsh dumpxml vm-node1 > vm-node1.bak.xml #备份vm-node1虚拟机的xml文件,原文件默认路径/etc/libvirt/qemu/vm-node1.xml
virsh console 虚拟机名称 #连接虚拟机
virsh domiflist 虚拟机名称 #查看虚拟机网卡信息
virsh domblklist 虚拟机名称 #查看虚拟机硬盘信息
2.qemu-img命令
qemu-img是虚拟机的磁盘管理命令,支持非常多的磁盘格式,如raw,qcow2,vdi,vmdk
qemu-img命令格式:
qemu-img 命令 [参数] 块文件名 大小
常用命令:
- create 创建磁盘
- convet 转换磁盘格式
- info 查看磁盘信息
- resize 扩容磁盘空间
2.使用方式
交互式:输入virsh 进入管理界面
再次输入命令不需要加virsh
非交互式:virsh 控制指令 [虚拟机名称] [参数]
1)将被克隆的虚拟机CentOS7关机
右击选中的虚拟机CentOS7,选择“关机”-->“强制关机”(如图-11所示),根据提示确认即可。
2)执行克隆操作
右击已关闭的虚拟机CentOS7,选择“克隆”,在弹出对话框中指定名称,确认默认设置(如图-12所示),然后单击右下角的“克隆”按钮完成操作。
3)确认克隆结果
新克隆的虚拟机CentOS7-c1可以正常启动、登录,可以独立运行。
在“虚拟系统管理器”中也能够看到此虚拟机(图-13所示)。
KVM有两种磁盘镜像格式,RAW和QCOW2
Copy On Write,写时复制技术原理:
cow技术将磁盘分为原始盘(后端盘)和使用盘(前段盘),我们在使用虚拟机的使用都是用的前端盘,包括我们修改虚拟机的文件也是修改的前端盘,后端盘是只读的,你想修改也改不了.
那么为什么cow的优势在哪呢?
其实名字已经告诉你它在干嘛了,写时复制,前端盘一开始的大小其实是很小的,几M,而一个完整的镜像文件至少是有几百M.那为什么一个几M的文件可以做系统镜像呢?因为我们在使用前端盘的前期,特别是刚创建虚拟机的时候,我们使用的都是后端盘的内容,我们每次调用一次相关文件,都会将这个文件存到前端盘中,下一次使用时就直接读前端盘的内容
[磁盘文件和配置文件模板下载]https://github.com/ck784101777/MyHome
快建新虚拟机的基本思路:
步骤一:准备模板虚拟机
找一台已经装好CentOS7系统、配置好本地yum源、关闭SELinux的虚拟机,提取模板虚拟机磁盘、xml配置文件备用。
1)准备磁盘目录、模板虚拟机磁盘文件
一般的磁盘文件放置在/var/lib/libvirt/images这个路径下
- [root@kvmsvr ~]# qemu-img info /etc/libvirt/qemu/centos7_muban.qcow2 //查看一下虚拟磁盘信息
- image: /etc/libvirt/qemu/images/centos7_muban.qcow2
- file format: qcow2
- virtual size: 300G (322122547200 bytes) //虚拟机磁盘容量
- disk size: 3.2G //在KVM服务器占用容量
2)准备模板虚拟机配置文件
准备一个模板配置文件
- [root@kvmsvr ~]# cat /etc/libvirt/qemu/centos7_muban.xml
centos7.0 a1992150-5cc7-e19d-20df-cd5cea7d8aa2 2097152 - .. ..
步骤二:快建虚拟机svr7
1)为虚拟机svr7快速建立前端盘(复用模板机的磁盘数据)
需要放在在/var/lib/libvirt/images/下
qemu-img create -f 指定类型为qcow2 -b 模板文件 新文件 文件大小
- [root@kvmsvr ~]# qemu-img create -f qcow2 -b /var/lib/libvirt/images/centos7_muban.qcow2 /var/lib/libvirt/images/svr7.qcow2
- Formatting '/var/lib/libvirt/images/svr7.qcow2', fmt=qcow2 size=322122547200 backing_file='/var/lib/libvirt/images/centos7_muban.qcow2' encryption=off cluster_size=65536
或者,取决与你创建qcow2类型的还是img类型的镜像
- [root@kvmsvr ~]# qemu-img create -f qcow2 -b /var/lib/libvirt/images/centos7_muban.qcow2 /var/lib/libvirt/images/svr7.img
- Formatting '/var/lib/libvirt/images/svr7.qcow2', fmt=qcow2 size=322122547200 backing_file='/var/lib/libvirt/images/centos7_muban.qcow2' encryption=off cluster_size=65536
2)为虚拟机svr7准备xml配置
删除或修改这四条信息
1)虚拟机名称
2)虚拟机的UUID唯一标识 删除整行内容
3)虚拟机磁盘文件路径
4)虚拟机网卡信息
为什么要删除这些配置信息?
因为这四个配置信息使用来区分虚拟机的信息,并且就算你删除,它们也会在虚拟机被定义时自动生成
- [root@kvmsvr ~]# cp /etc/libvirt/qemu/centos7_muban.xml /etc/libvirt/qemu/svr7.xml //拷贝配置
- [root@kvmsvr ~]# vim /etc/libvirt/qemu/svr7.xml //修改配置
svr7 //新名称b20a1a1c-a2de-4b2f-bb03-91a3e36257c7 //删除这行- .. ..
- //改套接字路径
- .. ..
- //新磁盘路径,改成你之前创建的镜像文件名
- .. ..
- .. ..
//新MAC地址 - .. ..
3)定义新虚拟机svr7
- [root@room9pc00 ~]# virsh define /etc/libvirt/qemu/svr7.xml
- 定义域 svr7(从 /tmp/svr7.xml)
4)查看并运行虚拟机svr7
- [root@room9pc00 ~]# virsh list --all
- Id 名称 状态
----------------------------------------------------
- svr7 关闭
- [root@room9pc00 ~]# virsh start svr7
1.修改虚拟机名,CPU,内存大小
标签中<name>可以修改虚拟机名
<memory>为真实内存大小,若你真机上内存4G,你可以写小于4G的内,注意这里大小用kb表示
<currentMemory>为虚拟机虚拟机内存大小,不可超过真实内存大小
2.修改磁盘
找到
如果你想多加几个磁盘,需要将整个<disk>标签中的文件补齐
文件格式
3.修改网卡,网络资源
首先,你要确认自己的真机有几个网卡配置文件,这是我的网卡信息,路径为/etc/sysconfig/network-scripts/,很多都是虚拟网卡,我的真实网卡是ifup-eth这个,你需要知道自己的本机ip,命令行输入ifconfig查看
[student@room9pc01 network-scripts]$ ls
ifcfg-lo ifdown-ppp ifup-ib ifup-Team
ifcfg-有线连接_1 ifdown-routes ifup-ippp ifup-TeamPort
ifdown ifdown-sit ifup-ipv6 ifup-tunnel
ifdown-bnep ifdown-Team ifup-isdn ifup-wireless
ifdown-eth ifdown-TeamPort ifup-plip init.ipv6-global
ifdown-ib ifdown-tunnel ifup-plusb network-functions
ifdown-ippp ifup ifup-post network-functions-ipv6
ifdown-ipv6 ifup-aliases ifup-ppp
ifdown-isdn ifup-bnep ifup-routes
ifdown-post ifup-eth ifup-sit
你要确认哪个网卡配置文件是连接外网的,哪些是虚拟网卡或内网网卡,确认之后,你要去虚拟系统管理器中创建虚拟网卡
打开虚拟管理器(图形化界面),或者输入命令virt-manager打开
点击编辑,选择连接信息,选择虚拟网络,我已经创建了较多的网卡
点击+号,输入网卡名,下一步,可以看到有隔离虚拟网络和转发到物理网络,隔离虚拟网络是封闭的,如果你想虚拟机连网,需要选择转发到物理网络,选择转发到真实网卡,你就可以连网了
介绍了创建虚拟网卡后,我们再来看这个配置文件,首先我们要确定网卡类型
• Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘
– 对前端盘的修改不回写到原始盘
– 原始盘的数据不能做修改
快速创建qcow前端盘
• qemu-img 通过 -b 选项复用指定原始盘
– qemu-img create -f qcow2 -b 原始盘 前端盘 大小
1.命令手动创建虚拟机磁盘文件
]$ cd /var/lib/libvirt/images/
]$ qemu-img create -f qcow2 -b .node_base.qcow2 nsd05.qcow2 5G #通过原始盘产生前端盘
]$ qemu-img info nsd05.qcow2 #查看虚拟磁盘文件信息
virtual size: 5.0G (5368709120 bytes) #虚拟大小
disk size: 196K #实际占用空间大小
backing file: .node_base.qcow2 #原始盘
2.建立xml文件
]$ virsh dumpxml nsd01 > /tmp/nsd05.xml #导出虚拟机信息
]$ vim /tmp/nsd05.xml #修改 虚拟机名 UUID 磁盘路径 网卡MAC
]$ virsh define /tmp/nsd05.xml //定义新文件
我先看一个配置案例,我再来讲解每个命令的使用方式
首先执行virsh blockresize --path [绝对路径] --size 大小 虚拟机名
这条命令是扩充磁盘大小
然后我们进到虚拟机,虽然我们磁盘已经扩充了大小,但是分区并没有扩容,执行命令/usr/bin/growpart /dev/vda 1扩容,注意1要空格.如果执行失败输入LANG=C,然后执行/usr/sbin/xfs_growfs / ,最后输入lsblk查看根分区大小,与磁盘大小一致则成功
案例:
使用到的命令:
virsh blockresize --path /var/lib/libvirt/images/openstack.img --size 100G openstack
LANG=C
/usr/bin/growpart /dev/vda 1
/usr/sbin/xfs_growfs /
这里提供一个脚本通过命令的形式创建虚拟机
[脚本和镜像文件配置系统下载地址]https://github.com/ck784101777/MyHome/tree/master
下载到本地后会有一个clone-vm7的脚本,把它放到/usr/local/bin/下
还有一个镜像文件和配置文件,把镜像文件放到/var/lib/libvirt/images下
把配置文件放在/etc/libvirt/qemu/下
然后执行命令,输入虚拟机的编号,输入大于0的整数即可
]#clone-vm7
Enter VM number: