KVM综合实验

基础kvm安装和创建一台kvm虚拟机
实验结构 一台
|centos7.9,10G,6vcpu。| ip 192.168.5.160/24 |
|----------------------------------------|

[root@kvm ~]# uname -a
Linux kvm.example.com 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

基础知识网上一堆,自己搜一下就有了 。kvm(全称基于内核的虚拟机)。
单纯记录自己的实验操作和自己的备忘录所用。

kvm软件安装
检查cpu 是否支持虚拟化
[root@kvm ~]# cat /proc/cpuinfo | grep -E ‘vmx|svm’
安装软件
[root@kvm ~]# yum install qemu-kvm qemu-img virt-manager libvirt
qemu-kvm:主包
libvirt : api接口
virt-manager: 图形管理程序
启动服务
[root@kvm ~]# systemctl start libvirtd

[root@kvm ~]# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
Active: active (running) since 四 2022-12-29 17:13:01 CST; 19h ago
Docs: man:libvirtd(8)
https://libvirt.org
Main PID: 1198 (libvirtd)
Tasks: 20 (limit: 32768)
CGroup: /system.slice/libvirtd.service
├─1198 /usr/sbin/libvirtd
├─1752 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/defa…
└─1753 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/defa…

12月 29 20:19:33 kvm.example.com dnsmasq-dhcp[1752]: DHCPREQUEST(virbr0) 192…
12月 29 20:19:33 kvm.example.com dnsmasq-dhcp[1752]: DHCPACK(virbr0) 192.168…
12月 29 20:42:59 kvm.example.com dnsmasq-dhcp[1752]: DHCPREQUEST(virbr0) 192…
12月 29 20:42:59 kvm.example.com dnsmasq-dhcp[1752]: DHCPACK(virbr0) 192.168…
12月 29 21:09:40 kvm.example.com dnsmasq-dhcp[1752]: DHCPREQUEST(virbr0) 192…
12月 29 21:09:40 kvm.example.com dnsmasq-dhcp[1752]: DHCPACK(virbr0) 192.168…
12月 30 12:53:04 kvm.example.com dnsmasq[1752]: no servers found in /etc/re…y
12月 30 12:53:04 kvm.example.com dnsmasq[1752]: stopped listening on virbr0…1
12月 30 12:53:05 kvm.example.com dnsmasq[1752]: reading /etc/resolv.conf
12月 30 12:53:05 kvm.example.com dnsmasq[1752]: using nameserver 192.168.5.2#53
Hint: Some lines were ellipsized, use -l to show in full.

加载kvm模块。
前提需要开启cpu虚拟化。硬件机器就是在bios开启vt,或者找到Virtual 开启。虚拟机就虚拟化引擎全部勾选。

kvm安装一台虚拟机

调出图形化管理工具
这里需要安装了桌面的。也可以使用vnc远程连接
image-1672377739256

新建虚拟机

image-1672377991398
选择镜像,选择存储卷,选择内存和存储卷,就不截图了,和vmware装一台虚拟机一样。
安装完毕。
虚拟机组成部分
1,默认虚拟机配置文件

[root@kvm ~]# cd /etc/libvirt/qemu/
[root@kvm qemu]# ls
networks vm1.xml
[root@kvm qemu]#

默认虚拟机存储,但是我的硬件存储只有20个G所以我后面新加了一块100G磁盘新定义了一个、/kvm-data、的存储池。后续存储池有写
[root@kvm qemu]# cd /var/lib/libvirt/images/

/kvm-data,为我的默认存储目录

修改配置文件新建机器vm2

利用配置文件生成虚拟机

拷贝虚拟机存储介质

[root@kvm vmfs]# cp vm1.qcow2 vm2.qcow2
[root@kvm vmfs]# pwd
/kvm-data/vmfs

修改配置文件

拷贝配置文件并修改,主要修改主机名,内存和cpu应实际改,uuid,mac地址只可修改后面三个段,不然开机也不能用,还有存储。

[root@kvm qemu]# cp vm1.xml vm2.xml
[root@kvm qemu]# vim vm2.xml

sds

<domain type='kvm'>
  <name> vm2	</name>   #	虚拟机名称
  <uuid>ca25689c-50d5-4a58-86c1-bd7b39928406</uuid>  # 唯一标示符uuid,更改一位就行
  <memory unit='KiB'>2097152</memory>     #内存
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>1</vcpu>    #cpu
    <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='custom' match='exact' check='partial'>
    <model fallback='allow'>Opteron_G2</model>
    <feature policy='require' name='ibpb'/>
  </cpu>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/kvm-data/vmfs/vm2.qcow2'/>    #存储目录
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:10:92:d8'/>     #mac地址
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'>
      <listen type='address'/>
      <image compression='off'/>
    </graphics>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
    <rng model='virtio'>
      <backend model='random'>/dev/urandom</backend>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </rng>
  </devices>
</domain>

定义机器,重启服务

[root@kvm ~]# virsh define /etc/libvirt/qemu/vm2.xml
定义域 vm2(从 /etc/libvirt/qemu/vm2.xml)

[root@kvm ~]# systemctl restart libvirtd

image-1672380005122
这台机器vm2和vm1是相同的。
image-1672381644798
这些操作都可以通过图形化界面点点完成。添加磁盘克隆,快照等等操做。

利用配置文件新加磁盘vm2

编辑配置文件

主机必须为关机状态才能添加磁盘
添加配置文件段,#号字段为新加 devices下的disk字段,配置段成对出现

  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>    
      <source file='/kvm-data/vmfs/vm2.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
	#    <disk type='file' device='disk'>
	#     <driver name='qemu' type='qcow2'/>     #磁盘类型
	#     <source file='/kvm-data/vmfs/vm2-1.qcow2'/> #vm2-1.qcow2磁盘名称
	#    <target dev='vdb' bus='virtio'/>   #设备名vdb
	#    <address type='pci' domain='0x0000' bus='0x10' slot='0x17'   #修改插槽 function='0x0'/>
	#    </disk>

创建空磁盘卷给vm2

[root@kvm vmfs]# qemu-img create -f qcow2 /kvm-data/vmfs/vm2-1.qcow2 2G
Formatting ‘/kvm-data/vmfs/vm2-1.qcow2’, fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off

重新定义vm2

[root@kvm vmfs]# virsh  define /etc/libvirt/qemu/vm2.xml                    
定义域 vm2(从 /etc/libvirt/qemu/vm2.xml)

启动机器 查看磁盘

[root@localhost ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom  
vda             252:0    0   10G  0 disk 
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0    9G  0 part 
  ├─centos-root 253:0    0    8G  0 lvm  /
  └─centos-swap 253:1    0    1G  0 lvm  [SWAP]
vdb             252:16   0    2G  0 disk 
[root@localhost ~]# 

image-1672385334106

创建存储池

默认存储池/var/lib/libvirt/images
创建一个新的存储池
创建池,这里我是一个100G的磁盘分区70G来挂载至/kvm-data做为新的存储池,可以使用lvm逻辑卷。或者存储设备上挂载一个目录,可以扩大
更好迁移和管理

挂载裸磁盘

[root@kvm ~]# mount /dev/sdb1 /kvm-data/
[root@kvm ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  4.8G     0  4.8G    0% /dev
tmpfs                   tmpfs     4.8G     0  4.8G    0% /dev/shm
tmpfs                   tmpfs     4.8G   13M  4.8G    1% /run
tmpfs                   tmpfs     4.8G     0  4.8G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  9.7G  7.4G   57% /
/dev/sda1               xfs      1014M  238M  777M   24% /boot
tmpfs                   tmpfs     982M   36K  982M    1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1               ext4       69G   53M   66G    1% /kvm-data

定义池

[root@kvm ~]# virsh  pool-define-as vmdisk --type dir --target  /kvm-data/vmfs
定义池 vmdisk

构建池

[root@kvm ~]# virsh  pool-build  vmdisk 
构建池 vmdisk

检查池

[root@kvm ~]# virsh pool-list --all
 名称               状态     自动开始
 default              活动     是       
 vmdisk               不活跃  否       

[root@kvm ~]# virsh pool-start  vmdisk
池 vmdisk 已启动

[root@kvm ~]# virsh  pool-autostart vmdisk 
池 vmdisk 标记为自动启动

[root@kvm ~]# virsh  vol-create-as  vmdisk vm1.qcow2 10G --format qcow2
创建卷 vm1.qcow2 
```

存储池删除命令

删除存储卷
virsh vol-deleta --pool 池名 卷名
取消激活存储池 
virsh pool-destroy  池名
删除存储池目录
virsh pool-delete 池名
取消定义存储池 
virsh pool-undefine 池名

磁盘镜像

磁盘镜像格式

raw 性能强,即可分配空间
qcow 性能不如前者
qcow2 性能不如raw,但是支持快照 用多少给多少
磁盘文件创建

[root@kvm vmfs]# qemu-img create -f qcow2 123.qcow2 1G
-f文件格式 raw ,qcow2

镜像格式转换

文件格式可以使用info 查看。。。有很多工具都可以。vmware-vdiskmanager也是一个一种方式。这里我想用自己的虚拟机搭建一个openwrt的旁路由。也记录一下。。
raw 转换为vmdk

qemu-img  convert -f  ‘文件格式’  -O vmdk '源文件'   ‘目标文件’

[root@rysnc-server 下载]# qemu-img convert -f raw  -O vmdk bleach-mini-20230328-openwrt-x86-64-generic-squashfs-combined-efi.img  bleach-mini-20230328-openwrt-x86-64-generic-squashfs-combined-efi.vmdk
[root@rysnc-server 下载]# ls
bleach-mini-20230328-openwrt-x86-64-generic-squashfs-combined-efi.img  bleach-mini-20230328-openwrt-x86-64-generic-squashfs-combined-efi.vmdk
[root@rysnc-server 下载]# 

guestmount 使用 磁盘保护

想象一下,如果kvm里面的虚拟机崩了,而一些重要文件存放在系统当中,这时候我们就可以借助libguestfs-tools这个工具把系统盘挂载到本地,而取出里面有用的数据

安装软件包

  [root@kvm ~]# rpm -qa libguestfs
   libguestfs-1.40.2-10.el7.x86_64
  [root@kvm ~]# yum list libguestfs
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * centos-qemu-ev: mirrors.aliyun.com
 * epel: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
已安装的软件包
libguestfs.x86_64  
[root@kvm ~]# yum install libguestfs-tools 

查看磁盘分区详情

[root@kvm ~]# virt-df -h -d vm1
文件系统                            大小 已用空间 可用空间 使用百分比%
vm1:/dev/sda1                            1014M       151M       863M   15%
vm1:/dev/centos/root                      8.0G       4.7G       3.3G   59%

这里centos/root这个卷才是我们的系统盘

挂载磁盘镜像分区到/mnt

[root@kvm ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  4.8G     0  4.8G    0% /dev
tmpfs                   tmpfs     4.8G     0  4.8G    0% /dev/shm
tmpfs                   tmpfs     4.8G   13M  4.8G    1% /run
tmpfs                   tmpfs     4.8G     0  4.8G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G   10G  7.0G   59% /
/dev/sdb1               ext4       69G   11G   56G   16% /kvm-data
/dev/sda1               xfs      1014M  239M  776M   24% /boot
tmpfs                   tmpfs     982M   32K  982M    1% /run/user/0
[root@kvm ~]# virt-filesystems  -d vm1
/dev/sda1
/dev/centos/root
[root@kvm ~]# guestmount  -d vm1 -m /dev/centos/root --rw /mnt/
fuse: mountpoint is not empty
fuse: if you are sure this is safe, use the 'nonempty' mount option
libguestfs: error: fuse_mount failed: /mnt/, see error messages above  #这里报错,根据提示添加-o nonempty 解决。
[root@kvm ~]# guestmount  -d vm1 -m /dev/centos/root --rw /mnt/ -o nonempty
[root@kvm ~]# cd /mnt/  
#这里就是vm1这台虚拟机存储 例如:重要的一些配置文件/etc/我们可以直接拷贝出来。
[root@kvm mnt]# ls 
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@kvm mnt]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  4.8G     0  4.8G    0% /dev
tmpfs                   tmpfs     4.8G     0  4.8G    0% /dev/shm
tmpfs                   tmpfs     4.8G   13M  4.8G    1% /run
tmpfs                   tmpfs     4.8G     0  4.8G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G   10G  7.0G   59% /
/dev/sdb1               ext4       69G   11G   56G   16% /kvm-data
/dev/sda1               xfs      1014M  239M  776M   24% /boot
tmpfs                   tmpfs     982M   32K  982M    1% /run/user/0
/dev/fuse               fuse      8.0G  4.8G  3.3G   60% /mnt
[root@kvm mnt]# 

拖挂载

拖挂载时,使用guestunmount ,这里如果报错 使用fusermount -zu /mnt 解决,还有不能在挂载目录拖挂载,会提示设备正在使用。

[root@kvm ~]# guestunmount /mnt/

KVM基本操作

基础命令

查看虚拟机

    [root@kvm ~]# virsh  list
     Id    名称                         状态
    ----------------------------------------------------
     9     vm1                            running
     13    vm2                            running

[root@kvm ~]# virsh  list  --all

     Id    名称                         状态
    ----------------------------------------------------
     9     vm1                            running
     13    vm2                            running

,

关闭虚拟机 重启,重置

virsh shutdown vm1 关闭
virsh reboot vm1  重启
virsh suspend vm1 挂起
virsh resume vm1 恢复
virsh reset vm1  重置
virsh undefine vm1 删除机器 开机无法删除,只删除配置文件,未删除磁盘配置文件,需手动删除。执行virsh destroy  会直接删除
virsh autostart vm1 开机自启虚拟机
默认会在/etc/libvirt/qemu/autostart/下为虚拟机的配置文件。
virsh autostart --disable vm1 关闭开机自启

kvm虚拟机克隆

安装软件包

需手动安装包
yum install virt-clone virt-viewer

利用vm1 克隆vm3

克隆vm1 为自动clone vm3
[root@kvm ~]# virt-clone  -o vm1 -n  vm3 --auto-clone
#这个方式克隆会拷贝一个原来的vm1 磁盘配置文件为vm3 的磁盘文件
[root@kvm ~]# virt-clone  -o vm1 -n  vm3 --auto-clone -f /kvm-data/vmfs/vm3.qcow2 
#-f 指定新的磁盘文件

克隆每一个新的机器都会产生新的配置文件

检验配置文件

可以看下配置文件变化

[root@kvm ~]# cd /etc/libvirt/qemu/
[root@kvm qemu]# ls
autostart  networks  vm1.xml  vm2.xml  vm2.xml.20221230  vm3.xml
[root@kvm qemu]# diff vm1.xml  vm3.xml 
4c4

< virsh edit vm1

>   virsh edit vm3
9,10c9,10
<   <name>vm1</name>
<   <uuid>ca25689c-50d5-4a38-86c1-bd7b39928406</uuid>

>   <name>vm3</name>
>   <uuid>9976446b-f72d-4f7e-8ce6-e0a5c0ac33a9</uuid>
42c42
<       <source file='/kvm-data/vmfs/vm1.qcow2'/>
>       <source file='/kvm-data/vmfs/vm3.qcow2'/>
75c75
	  <mac address='52:54:00:10:90:d8'/>
>       <mac address='52:54:00:db:74:47'/>
[root@kvm qemu]# 
克隆的磁盘大小也一致
[root@kvm vmfs]# du -h vm3.qcow2 
5.1G    vm3.qcow2
[root@kvm vmfs]# du -h vm1.qcow2  
5.1G    vm1.qcow2

增量镜像

基于一个基本镜像,来创建一个个的增量镜像,虚拟机镜像中的操作变化都存储在增量镜像中,节约了磁盘利用空间。可快速新建虚拟机
增量镜像,基于vm1的基础镜像创建vm4虚拟机

利用vm1生成vm4磁盘镜像

[root@kvm vmfs]# qemu-img create -b vm1.qcow2  -f qcow2 vm4.img
Formatting 'vm4.img', fmt=qcow2 size=10737418240 backing_file='vm1.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
[root@kvm vmfs]# qemu-img  info vm4.img 
image: vm4.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: vm1.qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
[root@kvm vmfs]# cd /etc/libvirt/qemu/
[root@kvm qemu]# ls
autostart  networks  vm1.xml  vm2.xml  vm2.xml.20221230  vm3.xml
[root@kvm qemu]# cp vm1.xml  vm4.xml

查看配置文件

[root@kvm qemu]# cat vm4.xml

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit vm1
or other application using the libvirt API.
-->

<domain type='kvm'>
  <name>vm4</name> #名字
  <uuid>ca25689c-50d5-4a38-86c1-bd7b39929406</uuid>  #uuid
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='custom' match='exact' check='partial'>
    <model fallback='allow'>Opteron_G2</model>
    <feature policy='require' name='ibpb'/>
  </cpu>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/kvm-data/vmfs/vm4.img'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:10:91:d8'/>  #mac地址
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'>
      <listen type='address'/>
      <image compression='off'/>
    </graphics>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
    <rng model='virtio'>
      <backend model='random'>/dev/urandom</backend>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </rng>
  </devices>
</domain>

校验磁盘空间

查看下磁盘

[root@kvm vmfs]# du -h vm1.qcow2 
5.3G    vm1.qcow2
[root@kvm vmfs]# du -h vm4.img 
14M     vm4.img

kvm虚拟机快照

创建快照

[root@kvm vmfs]# virsh  snapshot-create-as vm3 vm3.snap
已生成域快照 vm3.snap

[root@kvm vmfs]# virsh  snapshot-list  vm3
 名称               生成时间              状态
------------------------------------------------------------
 vm3.snap             2023-01-05 15:47:47 +0800 shutoff


删除快照

[root@kvm vmfs]# virsh  snapshot-delete  --snapshotname  vm3.snap vm3
已删除域快照 vm3.snap

[root@kvm vmfs]# virsh  snapshot-list  vm3
 名称               生成时间              状态
------------------------------------------------------------

kvm网络

kvm网络概述

默认为两种网络模式nat,isolated和一个网络接口,birdge,
nat为默认网络模式,虚拟机安装完成之后自动选用nat网络模式,支持主机和虚拟机互访,切访问外网,相当于vmware虚拟机vmnet8网卡
isolated为仅主机网卡,主机和虚拟机互访,但是不能访问外网,,相当于vmware虚拟机vmnet1网卡
birdge,为桥接网络接口,相对于一个虚拟接口,把物理网卡和虚拟机网卡相连。
虚拟交换机管理接口,
image
virbr0 ,
虚拟交换机管理网卡,
image-1672905796055
virbr0-nic
从交换机上把vnet⽹卡删除:
brctl delif virbr0 vnet0
从交换机上把vnet⽹卡添加:
brctl addif virbr0 vnet0
查看详细信息
brctl show

配置kvm桥接网络

添加桥接网卡

[root@kvm network-scripts]# cat ifcfg-br0 
TYPE=Bridge
 NAME=br0
 DEVICE=br0
 ONBOOT="yes"
 BOOTPROTO=static
 IPADDR=192.168.5.160
 GATEWAY=192.168.5.2
 NETMASK=255.255.255.0
 DNS1=192.168.5.2
 DNS2=8.8.8.8

更改物理网卡为桥接至br0

[root@kvm network-scripts]# cat ifcfg-ens33
DEVICE="ens33"
ONBOOT="yes"
BRIDGE=br0

重启网络和libvirtd

systemctl restart libvirtd
systemctl restart network

更改虚拟机硬件信息
image-1672907777520
启动虚拟机查看网络
image-1672907832154

配置kvm nat网络

更改网络配置文件

root@kvm networks]# ls
autostart  default.xml
[root@kvm networks]# cp default.xml  nat1.xml
[root@kvm networks]# vim nat1.xml 
<network>
  <name>nat1</name>    #名字修改
  <uuid>6fb33a58-0185-4a23-928c-8a831a952890</uuid>  #uuid修改
  <forward mode='nat'/> 
  <bridge name='virbr1' stp='on' delay='0'/>  #接口修改
  <mac address='52:54:00:53:b9:4e'/>   #mac修改
  <ip address='192.168.125.1' netmask='255.255.255.0'>  #ip地址修改
    <dhcp>
      <range start='192.168.125.2' end='192.168.125.254'/>   #dhcp地址池
    </dhcp>
  </ip>
</network>

~

重启网络和libvirtd

systemctl restart libvirtd
systemctl restart network

更改虚拟机硬件信息
image-1672909235897
启动虚拟机查看网络
image-1672909204408

配置kvm isolated 网络,仅主机,

更改配置文件

/etc/libvirt/qemu/network

[root@kvm networks]# cp default.xml  isolated2.xml 
[root@kvm networks]# vim isolated2.xml 
  <forward mode='nat'/>
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh net-edit default
or other application using the libvirt API.
-->

<network>
  <name>isolated2</name>
  <uuid>6fb33a58-0185-4a23-918c-8a831a953890</uuid>
  <bridge name='virbr2' stp='on' delay='0'/>
  <mac address='52:54:00:53:b9:9e'/>
  <ip address='192.168.126.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.126.2' end='192.168.126.254'/>
    </dhcp>
  </ip>
</network>

重启网络和libvirtd

systemctl restart libvirtd
systemctl restart network

启动isolated网络

[root@kvm networks]# virsh  net-list 
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              活动     是           是
 nat1                 活动     否           是

[root@kvm networks]# virsh  net-list 
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              活动     是           是
 nat1                 活动     否           是

[root@kvm networks]# virsh  net-start isolated2 
网络 isolated2 已开始

[root@kvm networks]# virsh  net-list 
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              活动     是           是
 isolated2            活动     否           是
 nat1                 活动     否           是

网络开机自启

可更改为自动启动

[root@kvm networks]# virsh  net-autostart  nat1 
网络nat1标记为自动启动

[root@kvm networks]# virsh  net-autostart  isolated2 
网络isolated2标记为自动启动

更改虚拟机硬件信息
image-1672910169212
启动虚拟机查看网络
image-1672910626300

总结:

这里我是在b站上看的教程
教程链接:哔哩哔哩
1,这里的配置文件目录和存储镜像目录都可以做持久化,用nfs或者其他的存储手段。
2,上面的操作大多数都可采用鼠标点点的方式实现。如果没有安装桌面,可以结合vnc。
3,qcow2,支持快照,raw, 不支持,性能更强,还有有些镜像文件可以转换,网络上你下载的.img,也可以使用qemu-img转换为所需要的镜像格式,例:openwrt。
4,上述操作都是个人的实验记录,和自己备忘录。
5,上面所需要掌握的知识点较多,可以拆分为多个细嚼慢咽

文章作者: emporer
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Emporer-Linux
linux kvm
喜欢就支持一下吧