文章目录
-
- 写在开头的话
- 创建虚拟机、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 PC
、ISA-only PC
、Intel-Mac
等 -
-m megs
:设定虚拟机RAM
大小 -
-cpu model
:设定CPU
模型,如coreduo
、qemu64
等 -
-smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:
设定模拟的SMP
架构中cpu的个数、每个cpu的核心数及cpu的socket数目等,pc机上最多可以模拟255
颗CPU
,maxcpus
用于指定热插入的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:
定义如何使用物理机缓存来访问块数据,其可用值有none
、writeback
、unsafe
和writethrough
四个 -
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=no
和downscript=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=file
:BOOTP
文件名称,用于实现网络引导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
- 创建一个最大
10G
的qcow2
图像
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
驱动的步骤
- 在浏览器输入如下网址
http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
- 看到如下界面,然后点击对应的方框里面的链接
- 然后往下滑,看到如下界面,下面就是对应的
Windows
驱动
stable
代表稳定版本
latest
代表最新版本
2.4 在已经安装好的Windows
虚拟机上安装virtio
驱动
-
通过向导创建
VM
,默认磁盘为IDE
接口,网卡为rtl8139
,既全虚拟化驱动 -
一定要按以下步骤来进行操作,否则会错先蓝屏错误
- 关闭虚拟机。编辑虚拟机的配置,添加一个很小的
virtio
硬盘,一块virtio
网卡 - 虚拟光驱加载上传的
iso
文件 - 启动虚拟机,登录后。
Windows
会发现新的硬件 - 安装时使用手动搜索驱动.
- 最后,安装其他驱动如
balloon
、串口
- 关闭虚拟机。编辑虚拟机的配置,添加一个很小的
-
内存管理,气球机制
03. QEMU guest agent安装与配置
- 如果
VM
中安装了QEMU guest agent
,Host
就可以使用libvrt
向VM
发送命令,例如“冻结”、”释放“文件系统、虚拟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 client
,SPICE agent
使virt-manager
等图形应用程序更加流畅。例如: - 在
virt-manager
中调整窗口尺寸,SPICE agent
自动调整X
会话的分辨率 - 在
Host
与Guest
之间复制与粘贴 - 防止鼠标拖尾等
- 下载
http://www.spice-space.org/download
写在最后的话:
- 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
- 欢迎关注我的CSDN博客,IDYS’BLOG
- 持续更新内容:
linux基础 | 数据通信(路由交换,WLAN) | Python基础 | 云计算 - 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
- 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!