当前位置: 代码迷 >> 综合 >> 虚拟化kvm - 创建虚拟机、virtio、QEMU Guest Agent
  详细解决方案

虚拟化kvm - 创建虚拟机、virtio、QEMU Guest Agent

热度:48   发布时间:2024-03-08 10:50:40.0

文章目录

    • 写在开头的话
  • 创建虚拟机、virtio、QEMU Guest Agent
    • 00. 使用virt-manager创建虚拟机
      • 0.1 实验的环境准备
    • 01. 使用virt-install创建虚拟机
      • 1.1 命令参数
      • 1.2 `qemu.img`用法
      • 1.3 `kickstart`安装
      • 1.4 网络安装
      • 1.5 pxe安装
    • 02. 半虚拟化驱动virtio
      • 2.1 半虚拟化驱动virtio 原理概述
      • 2.2 半虚拟化设备统一接口
      • 2.3 获得virtio驱动程序
      • 2.4 在已经安装好的`Windows`虚拟机上安装`virtio`驱动
    • 03. QEMU guest agent安装与配置
      • 3.1 通过libvirt 来使用`QEMU guest agent`
      • 3.2 SPICE agent 安装与配置
    • 写在最后的话:


这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/109291846
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!


写在开头的话

  • 请记住:实践是掌握知识的最快方法
  • 如果你只是怀着看看的态度去快速浏览文章,而不去认认真真的把文章里面讲的任何一个知识点去实践一遍,那么你永远也掌握不了它
  • 生命不息,折腾不止!

创建虚拟机、virtio、QEMU Guest Agent

00. 使用virt-manager创建虚拟机

0.1 实验的环境准备

  • 添加一块80G的硬盘
  • 执行以下命名,让CentOS 7检测出新添加的硬盘
[root@idys1 ~] echo "- - -" >> /sys/class/scsi_host/host1/scan        
[root@idys1 ~] echo "- - -" >> /sys/class/scsi_host/host2/scan  
[root@idys1 ~] echo "- - -" >> /sys/class/scsi_host/host0/scan
  • 查看是否检测出新的硬盘
[root@idys1 ~] fdisk -l磁盘 /dev/sdb:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
**********
# 可以看到已经检测出新的硬盘了
  • 对磁盘创建分区,同时更改其标识为lvm
[root@idys1 /]  fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。Device does not contain a recognized partition table
使用磁盘标识符 0x7816e4c9 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助):m
命令操作a   toggle a bootable flagb   edit bsd disklabelc   toggle the dos compatibility flagd   delete a partitiong   create a new empty GPT partition tableG   create an IRIX (SGI) partition tablel   list known partition typesm   print this menun   add a new partitiono   create a new empty DOS partition tablep   print the partition tableq   quit without saving changess   create a new empty Sun disklabelt   change a partition's system idu   change display/entry unitsv   verify the partition tablew   write table to disk and exitx   extra functionality (experts only)命令(输入 m 获取帮助):p磁盘 /dev/sdb:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7816e4c9设备 Boot      Start         End      Blocks   Id  System命令(输入 m 获取帮助):n         # 添加分区
Partition type:p   primary (0 primary, 0 extended, 4 free)e   extended
Select (default p): p     #选择为主分区
分区号 (1-4,默认 1):
起始 扇区 (2048-167772159,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{
    K,M,G} (2048-167772159,默认为 167772159):
将使用默认值 167772159
分区 1 已设置为 Linux 类型,大小设为 80 GiB命令(输入 m 获取帮助):p             #打印磁盘 /dev/sdb:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7816e4c9设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   167772159    83885056   83  Linux命令(输入 m 获取帮助):t    # 修改 分区标识 
已选择分区 1
Hex 代码(输入 L 列出所有代码):L0  空              24  NEC DOS         81  Minix / 旧 Linu bf  Solaris        1  FAT12           27  隐藏的 NTFS Win 82  Linux 交换 / So c1  DRDOS/sec (FAT-2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-3  XENIX usr       3c  PartitionMagic  84  OS/2 隐藏的 C:  c6  DRDOS/sec (FAT-4  FAT16 <32M      40  Venix 80286     85  Linux 扩展      c7  Syrinx         5  扩展            41  PPC PReP Boot   86  NTFS 卷集       da  非文件系统数据 6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 纯文本    de  Dell 工具      8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt         9  AIX 可启动      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 访问       a  OS/2 启动管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs        e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            f  W95 扩展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC  
11  隐藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq 诊断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  隐藏的 FAT16 <3 61  SpeedStor       ab  Darwin 启动     f2  DOS 次要       
16  隐藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  隐藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自动
1b  隐藏的 W95 FAT3 70  DiskSecure 多启 bb  Boot Wizard 隐  fe  LANstep        
1c  隐藏的 W95 FAT3 75  PC/IX           be  Solaris 启动    ff  BBT            
1e  隐藏的 W95 FAT1 80  旧 Minix       
Hex 代码(输入 L 列出所有代码):8e   # 将其修改为 8e
已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):p磁盘 /dev/sdb:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7816e4c9设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   167772159    83885056   8e  Linux LVM命令(输入 m 获取帮助):w
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盘。
  • 格式化物理卷,创建PV
[root@idys1 /] pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
  • 创建VG,并且起名为VMVG
[root@idys1 /] vgcreate vmvg /dev/sdb1Volume group "vmvg" successfully created
  • 查看vg信息
[root@idys1 /] vgdisplay --- Volume group ---VG Name               centosSystem ID             Format                lvm2Metadata Areas        1Metadata Sequence No  3VG Access             read/writeVG Status             resizableMAX LV                0Cur LV                2Open LV               2Max PV                0Cur PV                1Act PV                1VG Size               <19.51 GiBPE Size               4.00 MiBTotal PE              4994Alloc PE / Size       4984 / <19.47 GiBFree  PE / Size       10 / 40.00 MiBVG UUID               WwZsc5-SuKB-xPSu-Uzoe-4oFf-Vf4K-U8ttIy--- Volume group ---VG Name               vmvgSystem ID             Format                lvm2Metadata Areas        1Metadata Sequence No  1VG Access             read/writeVG Status             resizableMAX LV                0Cur LV                0Open LV               0Max PV                0Cur PV                1Act PV                1VG Size               <80.00 GiBPE Size               4.00 MiBTotal PE              20479Alloc PE / Size       0 / 0   Free  PE / Size       20479 / <80.00 GiBVG UUID               utIf4m-KkLZ-ePE7-Igfb-czt5-ym6C-5VZJMa
  • 创建VG
[root@idys1 /] lvcreate -n lvvm1 -l 20479 vmvg               # -l 后面指定 PE数量Volume group "vmvg" has insufficient free space (20479 extents): 20497 required.
  • 查看lv信息
[root@idys1 /] lvscan ACTIVE            '/dev/centos/swap' [2.00 GiB] inheritACTIVE            '/dev/centos/root' [<17.47 GiB] inheritACTIVE            '/dev/vmvg/lvvm1' [<80.00 GiB] inherit
  • /dev/vmvg/lvvm1创建文件系统
[root@idys1 /] mkfs.ext4 /dev/vmvg/lvvm1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
5242880 inodes, 20970496 blocks
1048524 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2168455168
640 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成   
  • 创建挂载点
[root@idys1 /] mkdir /vm
  • 更改磁盘挂载文件,添加如下内容
[root@idys1 /] vim /etc/fstab 
/dev/vmvg/lvvm1        /vm                      ext4    defaults        0 0
  • 重新挂载
[root@idys1 /] mount /vm
  • 创建目录,用于存放iso文件
[root@idys1 /] mkdir /iso
  • winscp工具,上传iso文件到/iso目录
[root@idys1 /] ls /iso
CentOS-6.10-i386-bin-DVD1.iso  CentOS-6.10-i386-bin-DVD2.iso  Windows Server 2003 Enterprise.iso
  • 创建虚拟机
[root@idys1 /] virt-manager
  • 点击文件

在这里插入图片描述

  • 点击新建虚拟机

在这里插入图片描述

  • 选择本地安装介质

在这里插入图片描述

  • 选择浏览-> 本地浏览 -> 选择对应的iso文件
  • 分配2GB内存,1核心cpu
  • 分配10GB磁盘空间

01. 使用virt-install创建虚拟机

1.1 命令参数

  • -name NAME:设定虚拟机名称

  • -M machine:指定要模拟的主机类型,如Stand PCISA-only PCIntel-Mac

  • -m megs:设定虚拟机RAM大小

  • -cpu model:设定CPU模型,如coreduoqemu64

  • -smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:设定模拟的SMP架构中cpu的个数、每个cpu的核心数及cpu的socket数目等,pc机上最多可以模拟255CPUmaxcpus用于指定热插入的CPU个数上限

  • -numa opts:指定模拟多节点的numa设备

  • -fda file

  • -fdb file:使用指定文件(file)作为软盘镜像,file/dev/fd0表示使用物理软驱

  • -hd{a,b,c} file

  • hdd file:使用指定file作为硬盘镜像

  • -cdrom file:使用指定file作为CD-ROM镜像,需要注意的是-cdrom-hdc不能同时使用:将file指定为/dev/cdrom可以直接使用物理光驱

  • -drive option [,option [option[....]]]:定义一个硬盘,可用子选项有很多。file=/path/to/somefile:硬件映像文件路径if=interface:指定硬盘设备所连接的接口类型,即控制器类型,如ide、scsi、sd、mtd、floppy、pflash及virtio

  • index=index:设定同一控制器类型中不同设备的索引号,即标识号

  • media=media:定义介质类型为硬盘(disk)还是光盘(cdrom)

  • snapshot=snapshot:指定当前硬盘设备是否支持快照功能:on或者off

  • cache=cache:定义如何使用物理机缓存来访问块数据,其可用值有nonewritebackunsafewritethrough四个

  • format=format:指定映像文件的格式,具体格式可参见qemu-img命令

  • -boot[order=drives][,once=drives][,menu=on|off]:定义启动设备的引导次序,每种设备使用一个字符表示;不同的架构所支持的设备及其表示字符不尽相同,在X86 PC架构上,a、b表示软驱、c表示第一块硬盘,d表示第一个光驱设备,n-p表示网络适配器,默认为硬盘设备;-boot order=dc.once=d

  • -net nic [,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]:创建一个新网卡设备并且连接至vlan中;macaddr用于为其指定mac地址,name用于指定一个在监控时显示的网上设备名称;emu可以模拟多个类型的网卡设备

  • -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]:通过物理机的TAP网络接口连接至VLAN N中,使用script=file指定的脚本(默认为/etc/qemu-ifup)来配置当前网络接口,并使用downscript=file指定的脚本(默认为/etc/qemu-ifdown)来撤销接口配置;使用scrpit=nodownscript=no可分别用来禁止执行脚本

  • -net user[,option][,option][,....]:在用户模式配置网络栈,其不依赖于管理权限;有效选项有:

    • vlan=n:连接至vlan n,默认n=0
    • name=name:指定接口的显示名称,常用于监控模式中
    • net=addr[/mask]:设定GuestOS可见的ip网络,掩码可选,默认为10.0.2.0/8
    • host=addr:指定GuestOS中看到的物理机的IP地址,默认为指定网络中的第二个,即x.x.x.2
    • dhcpstart=addr:指定dhcp服务地址池中16个地址的起始IP,默认为第16个至第31个,即xxx.16-xxx.31
    • dns=addr:指定GuestOS可见的dns服务器地址;默认为GuestOS网络中的第三个地址,即x.x.x.3
    • tftp=dir:激活内置的TFTP服务器,并使用指定的dir作为tftp服务器的默认根目录
    • bootfile=fileBOOTP文件名称,用于实现网络引导GuestOS;如qemu-hda linux.img-boot n -net user,tftp=/tftpserver/pub,bootfile=/pxelinux.0

1.2 qemu.img用法

  • 创建镜像
    • meu-img创建的镜像是一个稀疏文件,也就是说刚创建出来的文件并没有10G,它会随着数据的增多慢慢增加,直到10G
qemu-img create -f raw -o /home/image/kvm104.raw size=10G
  • 转换镜像文件格式
qemu-img convert -f raw /home/image/kvm104.raw -O qcow2 /home/image/kvm104.qcow2
  • 创建一个最大10Gqcow2图像
qemu-img create -f qcow2 /var/lib/libvirt/images/disk1.img 10G
  • 查看属性
qemu-img info /var/lib/libvirt/images/disk1.img
  • 给磁盘扩容
qemu-img resize /var/lib/libvirt/images/disk1.img 20G

  • 通过本地iso文件来进行安装
qemu-img create -f qcow2 vml-disk1.qcow2 10G
virt-install \
--name=vml \
--disk path=/vm/vm1-disk1.qcow2 \
--vcpus=1 --ram=1024 \
--cdrom=/iso/CentOS-6.4-i386-bin-DVD1.iso \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--os-type=linux \
--os-variant=rhel6
  • 创建一块磁盘
[root@idys1 /vm] qemu-img create -f qcow2 CentOS-disk1.qcow2 10G
Formatting 'CentOS-disk1.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off 
[root@idys1 /vm] ls -lh
总用量 1.3G
-rw------- 1 root root 8.1G 10月 22 00:37 centos6-disk0.qcow2
-rw-r--r-- 1 root root 193K 10月 22 23:30 CentOS-disk1.qcow2
drwx------ 2 root root  16K 10月 21 17:01 lost+found

1.3 kickstart安装

  • kickstart是一种无人值守的安装方式
  • 如果在安装过程中出现要填写参数的情况,安装程序首先会去查找kickstart生成的文件,如果找到合适的参数,就采用所找到的参数,如果没有找到合适的参数,便需要安装者手工干预了
  • 关闭虚拟机,前提是安装acpid
[root@idys1 /vm] yum -y install acpid
[root@idys1 /vm] virsh shutdown CentOS6-32-virt-test
  • 查看正在运行的虚拟机
[root@idys1 /vm] virsh listId    名称                         状态
----------------------------------------------------
  • 查看所有虚拟机
[root@idys1 /vm] virsh list --allId    名称                         状态
-----------------------------------------------------     CentOS6-32-virt-test           关闭-     centos6.10                     关闭-     win2k3a                        关闭
  • 挂起虚拟机
[root@idys1 ~] virsh suspend CentOS6-32-virt-test
域 CentOS6-32-virt-test 被挂起
  • 重新恢复虚拟机
[root@idys1 ~] virsh resume CentOS6-32-virt-test
域 CentOS6-32-virt-test 被重新恢复
  • 删除虚拟机
[root@idys1 ~] virsh destroy CentOS6-32-virt-test
域 CentOS6-32-virt-test 被删除
  • 彻底删除虚拟机
[root@idys1 ~] virsh undefine CentOS6-32-virt-test 
域 CentOS6-32-virt-test 已经被取消定义
  • 开启虚拟机随物理机启动而启动
virsh autostart CentOS6-32-virt-test 
  • 取消虚拟机随物理机启动而启动
virsh autostart --disable CentOS6-32-virt-test 
  • 启动虚拟机并连接虚拟机
virsh start CentOS6-32-virt-test --console
  • 启动虚拟机
virsh start CentOS6-32-virt-test

  • kickstart安装方式的配置文件
virt-install \
--name=CentOS6-32-virt-kickstart-test \
--disk path=/vm/CentOS-disk1.qcow2 \
--vcpus=1 --ram=1024 \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--os-type=linux \
--os-variant=rhel6 \
--location /iso/CentOS-6.10-i386-bin-DVD1.iso \
--extra-args="ks=http://192.168.1.170/kick.cfg"

1.4 网络安装

  • 我们也可以指定安装介质文件位置在网络上
--location=http://192.168.1.18/os/centos64i386/
  • 如果web服务器是Windows,有可能会出现错误

1.5 pxe安装

  • 安装配置
virt-install --hvm --connect qemu://system \
--network=bridge:br0 --pxe --graphics spice \
--name=rhel6-machine --ram=756 --vcpus=4
--os-type=linux --os-variant=rhel6 \
--disk path=/var/lib/libvirt/images/rhel6-machine.img,size=10

02. 半虚拟化驱动virtio

2.1 半虚拟化驱动virtio 原理概述

  • 为了提高内存、硬盘、网络的性能,需要支持半虚拟化
  • 没有virtio时工作的图

在这里插入图片描述

  • 带有virtio的原理图

在这里插入图片描述


2.2 半虚拟化设备统一接口

  • 通过不同的接口virtio以支持多种硬件设备
    • 不同的虚拟设备和不同的虚拟机可以有不同的前端驱动
    • 不同的硬件设备可以有不同的后端驱动
    • 两者之间的交互遵循virtio的标准

2.3 获得virtio驱动程序

  • 红帽RHEL 4.8之后自动加载和安装virtio驱动
  • Windows操作系统需要额外安装virtio的驱动

在这里插入图片描述


  • Windows获得virtio驱动的步骤
  1. 在浏览器输入如下网址
http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
  1. 看到如下界面,然后点击对应的方框里面的链接

在这里插入图片描述

  • 然后往下滑,看到如下界面,下面就是对应的Windows驱动

在这里插入图片描述

stable代表稳定版本

latest代表最新版本

2.4 在已经安装好的Windows虚拟机上安装virtio驱动

  • 通过向导创建VM,默认磁盘为IDE接口,网卡为rtl8139,既全虚拟化驱动

  • 一定要按以下步骤来进行操作,否则会错先蓝屏错误

    • 关闭虚拟机。编辑虚拟机的配置,添加一个很小的virtio硬盘,一块virtio网卡
    • 虚拟光驱加载上传的iso文件
    • 启动虚拟机,登录后。Windows会发现新的硬件
    • 安装时使用手动搜索驱动.
    • 最后,安装其他驱动如balloon、串口
  • 内存管理,气球机制


03. QEMU guest agent安装与配置

  • 如果VM中安装了QEMU guest agentHost就可以使用libvrtVM发送命令,例如“冻结”、”释放“文件系统、虚拟CPU的热添加及移除等。
  • RHEL/CENTOS7中有相应的安装包,qemu-guest-agent-xxx.rpm
  • Windows需要手工安装

3.1 通过libvirt 来使用QEMU guest agent

  • 安装QEMU guest agent后,对libvirt命令有如下的增强

  • virsh shutdown --mode=agent:比--mode=acpi更加安全地关闭操作系统

  • virsh snapshot-create -quiesce:在创建快照之前面,将缓存的内容刷入到磁盘

  • virsh domfsfreeze:静默文件系统

  • virsh domfsthaw:恢复静默的文件系统

  • virsh domfstrim:让虚拟机trim文件系统

  • virsh domtime:获得虚拟机的时间

  • virsh setvcpus:配置虚拟机的vCPU

  • virsh domifaddr --source agent:查询虚拟机的IP地址

  • virsh domfsinfo:显示虚拟机的文件系统列表

  • virsh set-user-password:设置虚拟机用户的密码


3.2 SPICE agent 安装与配置

  • 通过在VM操作系统中安装SPICE clientSPICE agent使virt-manager等图形应用程序更加流畅。例如:
  • virt-manager中调整窗口尺寸,SPICE agent自动调整X会话的分辨率
  • HostGuest之间复制与粘贴
  • 防止鼠标拖尾等
  • 下载
    • http://www.spice-space.org/download


写在最后的话:

  • 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
  • 欢迎关注我的CSDN博客,IDYS’BLOG
  • 持续更新内容
    linux基础 | 数据通信(路由交换,WLAN) | Python基础 | 云计算
  • 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
  • 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!

  相关解决方案