Linux虚拟化————KVM

devtools/2024/10/19 7:35:36/

1、安装kvm虚拟化套件

[root@bogon ~]# yum -y install virt*

2、启动服务

[root@bogon ~]# systemctl start libvirtd
[root@bogon ~]# systemctl status libvirtd
● libvirtd.service - Virtualization daemonLoaded: loaded (/usr/lib/systemd/system/libvirtd.service; disabled; preset: disabled)Active: active (running) since Fri 2024-03-15 18:27:06 CST; 1s ago
......

libvirtd:可以管理虚拟化

3、命令行删除默认的Linux bridge

查看虚拟网桥,这个网桥是在安装虚拟化软件之后会自动创建出来的

[root@bogon ~]# ip a show virbr0 
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:2d:af:d0 brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever

安装管理libvirt-client,可以使用这个来管理提供的网桥

[root@bogon ~]# yum -y install libvirt-client
[root@bogon ~]# virsh net-list --allName      State    Autostart   Persistent
--------------------------------------------default   active   yes         yess

清理网桥

[root@bogon ~]# virsh net-undefine default 
Network default has been undefined[root@bogon ~]# virsh net-list --allName      State    Autostart   Persistent
--------------------------------------------default   active   no          no

4、通过nmcli创建Linux bridge

[root@bogon ~]# nmcli connection add con-name vm-bridge ifname vm-bridge type bridge ipv4.method disabled ipv6.method ignore 

5、关闭selinux和防火墙

[root@bogon ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 
[root@bogon ~]# setenforce 0
[root@bogon ~]# systemctl disable firewalld.service --now

6、使用cloud镜像

KVM虚拟化创建的虚拟机,虚拟磁盘的后缀名叫做qcow2,当你通过图形创建了一个虚拟机之后,将会生成一个qcow2的虚拟机磁盘文件,里面就有你安装的操作系统,但是作为一个运维人员不可能每次都装系统,一般多多少少都会偷点懒,所以就出现了一个叫做模板化部署虚拟机的方法

无论是ubuntu还是centos还是fedora还是debian这类主流的linux发行版本,官方都会给你qcow2的模板

AlmaLinux:Generic Cloud (Cloud-init) | AlmaLinux Wiki

centos-steam:CentOS Cloud images

rocky:Cloud Images | Rocky Linux

7、下载cloud镜像

[root@bogon ~]# wget https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2

8、创建虚拟机

通过cloud image使用命令行创建虚拟机

下载virt-install

[root@bogon ~]# yum -y install virt-install
[root@bogon ~]# mkdir /opt/image_qcow2 -p
[root@bogon ~]# mv AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2 /opt/image_qcow2/

创建虚拟机

[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING  KVM acceleration not available, using 'qemu'
WARNING  Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9Starting install...
Creating domain...                                                                    |         00:00:00     
Domain creation completed.
[root@bogon ~]# virsh listId   Name          State
-----------------------------1    AlmaLinux-1   running
  • --memory:虚拟机内存

  • --vcpus:虚拟机cpu

  • --import:将现有虚拟机导入

  • --os-variant:虚拟机类型

  • --disk:磁盘路径

  • bus=virtio:设置驱动磁盘类型可以识别成为vda,vdb等,如果不加,就会识别成sda,sdb

  • --network:设置网卡

  • model=virtio:设置网卡驱动,使用virtio

  • --noautoconsole:设置命令行启动

进入控制台

[root@bogon ~]# virsh console AlmaLinux-1
Connected to domain 'AlmaLinux-1'
Escape character is ^] (Ctrl + ])

Ctrl + ]可以退出控制台

已经创建了虚拟机,我们也能访问到虚拟机的控制台,但是我们进不去,我们只能在外面蹭蹭,所以呢,究极难受,因为我们不知道root用户的密码

9、删除虚拟机

virsh destroy [name]:关机

virsh undefine [name]:删除

[root@bogon ~]# virsh listId   Name          State
-----------------------------1    AlmaLinux-1   running
[root@bogon ~]# virsh destroy AlmaLinux-1
Domain 'AlmaLinux-1' destroyed
[root@bogon ~]#  virsh undefine AlmaLinux-1
Domain 'AlmaLinux-1' has been undefined
[root@bogon ~]# virsh listId   Name   State
--------------------

10、自定义cloud image

qcow2文件是可以修改的,但是需要工具,这个工具的名字叫做libguestfs

下载libguestfs

[root@bogon ~]# yum -y install libguestfs libguestfs-tools-c

修改qcow2密码

[root@bogon ~]# virt-customize -a /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2 --root-password password:000000  --selinux-relabel
[   0.0] Examining the guest ...
[  55.5] Setting a random seed
[  55.6] Setting the machine ID in /etc/machine-id
[  55.6] Setting passwords
[  70.1] SELinux relabelling
[ 183.0] Finishing off

拉起虚拟机

[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING  KVM acceleration not available, using 'qemu'
WARNING  Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9Starting install...
Creating domain...                                                                    |         00:00:00     
Domain creation completed.

进入虚拟机

...
localhost login: root
Password: 
[root@localhost ~]#

11、配置网络

配置虚拟机AlmaLinux-1的网络

[root@localhost ~]# nmcli con add con-name static-eth0 type ethernet ipv4.address 172.24.10.20/24 ipv4.method man
[root@localhost ~]# ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 52:54:00:78:34:cc brd ff:ff:ff:ff:ff:ffaltname enp1s0inet 172.24.10.20/24 brd 172.24.10.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::4613:29fd:e79:e20a/64 scope link noprefixroute valid_lft forever preferred_lft forever

配置host的网络

[root@bogon ~]# nmcli connection modify vm-bridge ipv4.address 172.24.10.3/24 ipv4.method manual 
[root@bogon ~]# nmcli connection up vm-bridge 
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
[root@bogon ~]# ip a show vm-bridge 
3: vm-bridge: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ffinet 172.24.10.3/24 brd 172.24.10.255 scope global noprefixroute vm-bridgevalid_lft forever preferred_lft forever

由于网桥是十分脆弱的,当改了网桥之后,就需要重新桥接上去

简单的方式,重启

[root@bogon ~]# virsh destroy AlmaLinux-1
[root@bogon ~]# virsh start AlmaLinux-1

12、重新拉起虚拟机,配置额外的磁盘空间

创建lv

[root@bogon ~]# pvcreate /dev/sda Physical volume "/dev/sda" successfully created.
[root@bogon ~]# vgcreate data /dev/sda Volume group "data" successfully created
[root@bogon ~]# lvcreate -n data -L 9G dataLogical volume "data" created.

重新拉起虚拟机

[root@bogon ~]# virsh destroy AlmaLinux-1
Domain 'AlmaLinux-1' destroyed
[root@bogon ~]# virsh undefine AlmaLinux-1 
Domain 'AlmaLinux-1' has been undefined
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --disk path=/dev/data/data,bus=virtio --disk path=/dev/sdb,bus=virtio  --network bridge=vm-bridge,model=virtio --noautoconsole
data
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --disk path=/dev/data/data,bus=virtio --disk path=/dev/sdb,bus=virtio  --network bridge=vm-bridge,model=virtio --noautoconsole
data
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --disk path=/dev/data/data,bus=virtio --disk path=/dev/sdb,bus=virtio  --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING  Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9Starting install...
Creating domain...                                                                    |         00:00:00     
Domain creation completed.

13、将cloud镜像文件的根分区扩大

因为根分区是标准的分区,所以没办法使用逻辑卷的方法进行扩容,所以我们要用到一个工具叫做virtresize

删除虚拟机

[root@bogon ~]# virsh destroy AlmaLinux-1 
Domain 'AlmaLinux-1' destroyed[root@bogon ~]#  virsh undefine AlmaLinux-1
Domain 'AlmaLinux-1' has been undefined

查看qcow2的磁盘情况

[root@bogon ~]# virt-filesystems --long -h --all -a /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2 
Name       Type        VFS      Label  MBR  Size  Parent
/dev/sda1  filesystem  unknown  -      -    1.0M  -
/dev/sda2  filesystem  vfat     -      -    200M  -
/dev/sda3  filesystem  xfs      -      -    448M  -
/dev/sda4  filesystem  xfs      -      -    9.2G  -
/dev/sda1  partition   -        -      -    1.0M  /dev/sda
/dev/sda2  partition   -        -      -    200M  /dev/sda
/dev/sda3  partition   -        -      -    512M  /dev/sda
/dev/sda4  partition   -        -      -    9.3G  /dev/sda
/dev/sda   device      -        -      -    10G   -

创建一个19G的qcow2文件,用来“夺舍”

[root@bogon ~]# qemu-img create -f qcow2 /opt/os_qcow2/os.qocow2 19G
Formatting '/opt/os_qcow2/os.qocow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=20401094656 lazy_refcounts=off refcount_bits=16

查看创建的这个qcow2文件

[root@bogon ~]# qemu-img info /opt/os_qcow2/os.qcow2 
image: /opt/os_qcow2/os.qcow2
file format: qcow2
virtual size: 19 GiB (20401094656 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:compat: 1.1compression type: zliblazy refcounts: falserefcount bits: 16corrupt: falseextended l2: false
Child node '/file':filename: /opt/os_qcow2/os.qcow2protocol type: filefile length: 192 KiB (197120 bytes)disk size: 196 KiBFormat specific information:extent size hint: 1048576

使用新创建的9G的qcow2文件来替换原来的qcow2文件,这里的磁盘是指qcow2里的磁盘

[root@bogon ~]# virt-resize --expand /dev/sda1 /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2  /opt/os_qcow2/os.qcow2 
[   0.0] Examining /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
**********Summary of changes:virt-resize: /dev/sda1: This partition will be resized from 1.0M to 9.0G.virt-resize: /dev/sda2: This partition will be left alone.virt-resize: /dev/sda3: This partition will be left alone.virt-resize: /dev/sda4: This partition will be left alone.**********
[  21.2] Setting up initial partition table on /opt/os_qcow2/os.qcow2
[  35.6] Copying /dev/sda1
[  35.6] Copying /dev/sda2
[  36.8] Copying /dev/sda3100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[  40.7] Copying /dev/sda4100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00virt-resize: Resize operation completed with no errors.  Before deleting 
the old disk, carefully check that the resized disk boots and works 
correctly.

查看新的文件,可以看到虚拟磁盘变大了

[root@bogon ~]# virt-filesystems --long -h --all -a /opt/os_qcow2/os.qcow2 
Name       Type        VFS      Label  MBR  Size  Parent
/dev/sda1  filesystem  unknown  -      -    9.0G  -
/dev/sda2  filesystem  vfat     -      -    200M  -
/dev/sda3  filesystem  xfs      -      -    448M  -
/dev/sda4  filesystem  xfs      -      -    9.2G  -
/dev/sda1  partition   -        -      -    9.0G  /dev/sda
/dev/sda2  partition   -        -      -    200M  /dev/sda
/dev/sda3  partition   -        -      -    512M  /dev/sda
/dev/sda4  partition   -        -      -    9.3G  /dev/sda
/dev/sda   device      -        -      -    19G   -

使用新的qcow2拉起虚拟机

[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/os_qcow2/os.qcow2,bus=virtio --disk path=/dev/data/kvm,bus=virtio   --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING  Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9Starting install...
Creating domain...                                                                    |         00:00:00     
Domain creation completed.

14、XML文件

[root@bogon ~]# ll /etc/libvirt/qemu/AlmaLinux-1.xml 
-rw------- 1 root root 7110 Apr 11 08:26 /etc/libvirt/qemu/AlmaLinux-1.xml

如果virsh destory之后再virsh undefine虚拟机,这个文件就会消失。

如果你的xml文件做过高度定制化修改,那么一定要备份,下次拉起虚拟机就应该是用virsh define/path/xxx.xml,因为有一些xml文件支持的高级部分并不被virt-install的所有参数所支持。


http://www.ppmy.cn/devtools/11491.html

相关文章

数字化校园引领未来

在当今科技日新月异的时代&#xff0c;数字化转型已成为各行各业的必然趋势&#xff0c;教育领域也不例外。随着信息技术的迅猛发展&#xff0c;数字化已经成为推动教育变革的重要力量&#xff0c;它不仅重塑了传统的教育模式&#xff0c;还为学生、教师以及整个教育生态系统带…

【Unity学习笔记】第十三 · tag与layer(运行时创建tag和layer)

参考&#xff1a; Unity手册 标签Unity手册 LayersIs it possible to create a tag programmatically?脚本自动添加tag和Layer 注&#xff1a;本文使用Unity版本是2022.3.23f1 转载引用请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/de…

实现游戏地图读取与射击运行

射击代码来源自2D 横向对抗射击游戏&#xff08;by STF&#xff09; - CodeBus 地图读取改装自 瓦片地图编辑器 解决边界检测&#xff0c;实现使用不同像素窗口也能移动不闪退-CSDN博客 // 程序&#xff1a;2D RPG 地图编辑器改游戏读取器 // 作者&#xff1a;民用级脑的研发…

平衡二叉树(AVLTree)

AVLTree 1、树的分类2、平衡二叉树2.1、构建一个平衡二叉树2.2、删除节点2.3、搜索方式2.3.1、广度优先搜索&#xff08;BFS&#xff09;2.3.2、深度优先搜索&#xff08;DFS&#xff09; 1、树的分类 树形结构是编程当中特别常见的一种数据结构。比如电脑中的文件管理系统就大…

STM32的GPIO端口的八种模式解析

目录 STM32的GPIO端口的八种模式解析 一、上拉输入模式 二、下拉输入模式 三、浮空输入模式 四、模拟输入模式 五、推挽输出模式 六、开漏输出模式 七、复用推挽输出模式 八、复用开漏输出模式 STM32的GPIO端口的八种模式解析 在学习STM32的过程中&#xff0c;GPIO端口…

软考130-上午题-【软件工程】-系统维护

一、系统维护概述 软件维护是软件生命周期中的最后一个阶段&#xff0c;处于系统投入生产性运行以后的时期中&#xff0c;因此不属于系统开发过程。 软件维护是在软件已经交付使用之后为了改正错误或满足新的需求而修改软件的过程&#xff0c;即软件在交付使用后对软件所做的一…

聚道云软件连接器助力企业实现滴滴出差报销自动化

一、客户介绍 某机械有限公司是一家在机械设备制造领域拥有深厚底蕴和卓越实力的企业。自公司成立以来&#xff0c;该公司始终秉承创新、务实、高效的发展理念&#xff0c;专注于机械设备的研发、生产和销售。经过多年的发展&#xff0c;公司已成为国内机械行业的佼佼者&#…

Java Future模式

前言 Future模式是并发编程的一个重要的设计模式。比如有个方法需要很长的时间才能得到结果&#xff0c;不会让调用的程序一直等待&#xff0c;而是先返回给它一张“提货卡”。其实相当于消息队列&#xff0c;当你下了订单之后&#xff0c;在并发情况下&#xff0c;实际不是即时…