关于虚拟化技术

虚拟化是一种通过模拟计算机硬件,使一台计算机可以同时运行多个不同操作系统的技术。虚拟化极大地提高了硬件资源的利用率,同时降低了物理设备的成本和管理复杂性。

虚拟化软件的差别

qume 全虚拟化软件,特别慢但是兼容性特别好。
xen 半虚拟化软件,需要使用专门修改之后的内核,性能很高,兼容性很差。redhat在5.5的版本将xen替换成kvm
kvm 全虚拟化软件,它具有硬件支持cpu,内置在linux内核模块中,不需要使用专门的内核。性能好,兼容性好。
kvm的兼容性没有qume好,但是他比qume的性能好太多了
kvm的性能没有xen好,但是他比xen的兼容性好太多了

安装KVM

KVM全称:Kernel-based Virtual Machine
libvirt:因为KVM是基于内核的,linux用户是没办法直接操作内核的,这个软件包就是一个操作的工具。
virt-install:安装虚拟机用的。
qume-kvm:kvm是没有自己的虚拟磁盘技术的,所以直接兼容了qume的虚拟磁盘,这个包即兼容并优化了qume的磁盘。

yum install libvirt virt-install qemu-kvm -y
systemctl enable --now libvirtd

虚机管理

创建一个虚拟机

[root@template ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
Starting install...
Allocating 'centos.raw'                   |  10 GB  00:00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.

要注意的是--cdrom参数,镜像不要放在root目录下会报权限相关的问题,建议丢到一个公共的位置,例如/opt下,然后操控的用户和用户组都是qemu
创建好之后可以通过vnc来连接,这里设置离连接方式是vnc,并且监听的位置是0.0.0.0
VNC

管理命令

主要使用virsh来管理KVM虚拟机

列出虚机

virsh list

这条命令默认是列出所有运行的虚机,如果虚机在关闭状态则不会列出,想要列出所有状态的虚机需要添加--all参数

关机

virsh shutdown 虚机名

关机的话系统必须装好,否则没用

开机

virsh start 虚机名

强制关机

virsh destroy 虚机名

这相当于拔掉虚机的电源

重启

virsh reboot 虚机名

重启的话系统必须装好,否则没用

导出配置

virsh dumpxml 虚机名

导出对应虚机的配置文件

取消定义

这里是把对应的虚拟机移除kvm的管理里,相当于从kvm中删除,配置文件也会被删除,但是实际的镜像文件还是会保留。

virsh undefine 虚机名

导入配置

virsh define xml配置文件

修改配置

virsh edit 虚机名

挂起

virsh suspend 虚机名

锁定当前状态

恢复

virsh resume 虚机名

开机自启

virsh autostart 虚机名

可以添加参数--disable来取消开机自启

列出所有开机自启主机

virsh list --autostart --all

不加参数--all参数的话,只会列出开机的主机。

控制台

virsh console 虚机名

想要通过console直接连接控制虚机,需要提前在虚拟机中执行下面命令让其支持(执行完请重启虚机)

grubby --update-kernel=ALL --args="console=ttyS0,115200n8"

磁盘管理

关于磁盘格式

  • RAW:原始格式,也叫野格式,不支持快照功能,不方便传输,读写性能较好。
  • qcow2:qcow2(copy on write)写时复制(动态占用空间),占用空间小,支持快照,性能比raw差一点,方便传输。

    管理命令

    主要使用qemu-img来管理KVM虚拟机

    磁盘信息

    qemu-img info 虚拟磁盘

    创建磁盘

    qemu-img create -f qcow2 位置 大小

    例如

    qemu-img create -f qcow2 /opt/test.qcow2 1G

    /opt/test.qcow2位置创建一个1G大小的磁盘

    调整容量

    qemu-img resize /opt/test.qcow2 +1G

    给test.qcow2添加1G
    后面是容量指令,具体格式参考如下

  • 5G 大小调整到5G
  • +1G 大小增加1G
  • -1G 大小减小1G

    RAW转换QCOW2

    qemu-img convert -f raw -O qcow2 xxx.raw xxx.qcow2

    这个操作请在虚拟机关闭的状态下执行,执行之后会保留之前的文件然后生成新的qcow2文件。
    然后转换之后如果想开机时使用QCOW2的镜像需要edit一下虚机的配置文件

    qemu-img convert -f raw -O qcow2 centos.raw centos.qcow2
    virsh edit centos7

    大概在35行左右,原文如下

      <disk type='file' device='disk'>
        <driver name='qemu' type='raw'/>
        <source file='/opt/centos.raw'/>
        <target dev='vda' bus='virtio'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
      </disk>

    修改成下面这种效果

      <disk type='file' device='disk'>
        <driver name='qemu' type='qcow2'/>
        <source file='/opt/centos.qcow2'/>
        <target dev='vda' bus='virtio'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
      </disk>

    其他功能

快照

创建快照

virsh snapshot-create centos7 --atomic --disk-only

这里我们为虚拟机 centos7 创建了一个快照,使用了 --atomic表示如果失败则完全回滚,--disk-only 表示仅对磁盘创建快照。

查看快照

virsh snapshot-list centos7

恢复快照

virsh snapshot-revert centos7 snapshot1

删除快照

virsh snapshot-delete centos7 snapshot1

其他

在创建和管理快照时,可以添加选项控制快照类型(disk-only、system-checkpoint等)、是否包含内存状态等,灵活控制快照行为。

克隆

完整克隆

被克隆的主机一定要处于被挂起或者关闭的状态下
使用virt-clone工具

[root@template opt]# virt-clone --auto-clone -o centos7 -n centos7-2
Allocating 'centos-clone.qcow2'                      |  10 GB  00:00:09     
Clone 'centos7-2' created successfully.

手动克隆

qemu-img convert -f qcow2 -O qcow2 -c centos.qcow2 centos2.qcow2
virsh dumpxml centos7 > centos7-2.xml

编辑导出的xml,主要修改下面几个字段

修改 domain.name # 名字
删除 domain.uuid # uuid
删除 domain.devices.interface.mac # mac地址
修改 domain.devices.disk.source-file # 虚拟磁盘文件指定为新手动复制的。

编辑好之后导入虚机

virsh define centos7-2.xml

链接克隆

连接克隆要注意的是不能使用RAW格式的磁盘,他是不支持的。
创建引用磁盘

qemu-img create -f qcow2 -b centos.qcow2 centos3.qcow2

此时去查看centos3.qcow2的信息如下

[root@template opt]# qemu-img info centos3.qcow2              
image: centos3.qcow2                                          file format: qcow2                                            virtual size: 10G (10737418240 bytes)                         disk size: 196K                                               cluster_size: 65536                                           backing file: centos.qcow2                                    
Format specific information:                                      compat: 1.1                                                   lazy refcounts: false

会发现这个字段backing file: centos.qcow2
导出xml

virsh dumpxml centos7 > centos7-3.xml

编辑导出的xml,主要修改下面几个字段

修改 domain.name # 名字
删除 domain.uuid # uuid
删除 domain.devices.interface.mac # mac地址
修改 domain.devices.disk.source-file # 虚拟磁盘文件指定为新手动复制的。

编辑好之后导入虚机

virsh define centos7-3.xml

网络

桥接网卡

如果想要将主机桥接到某个网络中则需要搞一个桥接网卡,可以通过下面命令进行桥接

virsh iface-bridge ens33 br0

ens33是被桥接的网卡,br0是桥接之后的网卡,桥接的过程中可能会出现很多问题,我出现的问题是断网,然后开启网卡开启失败具体可以参考文章

取消桥接

virsh iface-unbridge br0

创建虚机指定网卡

参数--network network=default是NAT模式,全部参数可以参考下面

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

参数--network bridge=br0是桥接模式,全部参数可以参考下面

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

已有虚机更换网卡

通过下面命令编辑配置

virsh edit 虚机名

修改domain.devices.interface字段,默认值如下

    <interface type='network'>
      <mac address='52:54:00:25:a6:67'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

修改成下面这样

    <interface type='bridge'>
      <mac address='52:54:00:25:a6:67'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

主要是interfacetype字段和interface.source的字段。

注意

每次桥接和取消桥接都会永久性的修改网卡的配置文件,这个需要注意。

关于KVM创建的虚拟机

KVM虚拟机主要有两部分组成,一部分是磁盘文件,在创建的时候通过下面命令已经指定
--disk /opt/centos.raw,format=raw,size=10
另外一部分是配置文件,配置文件默认位置在/etc/libvirt/qemu中,一般采用dumpxml来导出,只要拥有xml和镜像文件就可以恢复虚机。

最后修改:2024 年 12 月 27 日
如果觉得我的文章对你有用,请随意赞赏