linux-kvm
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远程连接
新建虚拟机
选择镜像,选择存储卷,选择内存和存储卷,就不截图了,和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
这台机器vm2和vm1是相同的。
这些操作都可以通过图形化界面点点完成。添加磁盘克隆,快照等等操做。
利用配置文件新加磁盘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 ~]#
创建存储池
默认存储池/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,为桥接网络接口,相对于一个虚拟接口,把物理网卡和虚拟机网卡相连。
虚拟交换机管理接口,
virbr0 ,
虚拟交换机管理网卡,
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
更改虚拟机硬件信息
启动虚拟机查看网络
配置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
更改虚拟机硬件信息
启动虚拟机查看网络
配置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标记为自动启动
更改虚拟机硬件信息
启动虚拟机查看网络
总结:
这里我是在b站上看的教程
教程链接:哔哩哔哩
1,这里的配置文件目录和存储镜像目录都可以做持久化,用nfs或者其他的存储手段。
2,上面的操作大多数都可采用鼠标点点的方式实现。如果没有安装桌面,可以结合vnc。
3,qcow2,支持快照,raw, 不支持,性能更强,还有有些镜像文件可以转换,网络上你下载的.img,也可以使用qemu-img转换为所需要的镜像格式,例:openwrt。
4,上述操作都是个人的实验记录,和自己备忘录。
5,上面所需要掌握的知识点较多,可以拆分为多个细嚼慢咽