当前位置: 首页 > news >正文

ubuntu2204安装kvm

ubuntu2204安装kvm

  • 前言
  • 一、检测硬件是否支持
  • 二、安装软件
  • 三、创建/管理虚拟机
    • 1、创建存储池
    • 2、qemu创建镜像
    • 3、xml文件运行虚拟机
      • 1、范文
      • 2、xml文件创建虚机
      • 3、创建虚机
    • 4、克隆虚机
    • 5、创建快照
    • 6、脚本创建
    • VNC连接
  • 四、创建集群
    • 1、安装glusterfs
    • 2、加入集群
      • 删除节点
    • 3、 创建卷
    • 3、kvm挂载目录
    • 图形化创建
    • 五、虚拟机迁移
      • 同一宿主机内迁移
      • 不同宿主机内迁移


前言

##虚拟机开启虚拟化
在这里插入图片描述
VNC下载链接


一、检测硬件是否支持

##非零即可
root@kvm:~# egrep -c ‘(svm|vmx)/proc/cpuinfo  
##检查是否启用虚拟化
root@kvm:~# apt install cpu-checkerroot@kvm:~# kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

二、安装软件

root@kvm:~# apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-managerroot@kvm:~#  systemctl start libvirtd
root@kvm:~#  systemctl enable libvirtdroot@kvm:~# usermod -aG libvirt $USER
root@kvm:~# lsmod | grep kvm
kvm_intel             368640  0
kvm                  1032192  1 kvm_intel

三、创建/管理虚拟机

1、创建存储池

##创建一个存储池来存放虚拟机的磁盘镜像文件
root@kvm:~# mkdir -p /data/kvm/poolvirsh pool-define-as --name kvm_test --type dir --target /data/kvm/pool/virsh pool-start kvm_testvirsh pool-autostart kvm_test

2、qemu创建镜像

qemu-img create -f qcow2 /data/kvm/qcow/vm_test.qcow2 20G
1. 使用 qcow2 格式创建镜像
qcow2 是 QEMU 推荐的磁盘格式,支持动态扩展、快照和压缩。
qemu-img create -f qcow2 /data/kvm/qcow/vm_test.qcow2 20G
-f qcow2: 指定镜像格式为qcow2。
/data/kvm/qcow/vm_test.qcow2: 镜像文件保存路径及文件名。
20G: 分配给虚拟机的磁盘大小(可根据需求调整)。
2. 使用 raw 格式创建镜像
raw 格式是未压缩的磁盘格式,性能较好,但不支持快照等高级功能。
qemu-img create -f raw /data/kvm/qcow/vm_test.raw 20G####常见 qemu-img 命令
1. 查看镜像信息
##可以使用 qemu-img info 命令查看镜像文件的详细信息:
qemu-img info /data/kvm/qcow/vm_test.qcow2
2. 转换镜像格式
##将现有镜像转换为另一种格式:
qemu-img convert -f qcow2 -O raw /data/kvm/qcow/source_image.qcow2 /data/kvm/qcow/target_image.raw
-f qcow2: 源镜像格式。
-O raw: 目标镜像格式。
/data/kvm/qcow/source_image.qcow2: 源镜像文件。
/data/kvm/qcow/target_image.raw: 目标镜像文件。
3. 创建包含快照的镜像
##通过创建一个依赖于原始镜像的快照镜像,可以节省磁盘空间:qemu-img create -f qcow2 -b /path/to/base_image.qcow2 /path/to/snapshot_image.qcow2
-b /path/to/base_image.qcow2: 基础镜像路径。
4. 扩展镜像大小
##如果需要扩大已经创建的镜像,可以使用以下命令:qemu-img resize /data/kvm/qcow/vm_test.qcow2 +10G
这将把镜像的大小增加10GB。
5. 启动虚拟机
##创建完镜像后,可以使用qemu-system命令启动虚拟机。例如:qemu-system-x86_64 -hda /data/kvm/qcow/vm_test.qcow2 -m 2G -smp 2 -boot d
-hda: 指定硬盘镜像文件。
-m 2G: 分配2GB内存。
-smp 2: 分配2个虚拟CPU。
-boot d: 指定从光驱(或者ISO镜像)启动。

3、修改qcow文件

##加载 NBD 模块(如果未加载):

modprobe nbdqemu-nbd --connect=/dev/nbd0 /data/kvm/qcow/vm_test.qcow2 
fdisk -l /dev/nbd0
mount /dev/nbd0 /mnt/mount -o loop /dev/nbd0 /mnt/mount -o iso /dev/nbd0 /mnt/
检查文件头和内容
如果 file 命令无法识别文件类型,使用 hexdump 或 xxd 查看文件头部分来识别文件结构:
file -s /dev/nbd0 hexdump -C /path/to/datafile.data | head/dev/nbd0: dataparted /dev/nbd0 print
Model: Unknown (unknown)                                                  
Disk /dev/nbd0: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags: 
root@kvm:/data/kvm/vm# sysctl -a | grep overcommitvm.nr_overcommit_hugepages = 0vm.overcommit_kbytes = 0vm.overcommit_memory = 0vm.overcommit_ratio = 50vm.overcommit_memory = 1

3、xml文件运行虚拟机

1、范文

<domain type='kvm'><!-- 虚拟机名称 --><name>example_vm</name><!-- UUID是虚拟机的唯一标识符 --><uuid>d759a4f4-3f3d-499e-8431-123456789abc</uuid><!-- 内存配置:设置虚拟机的最大和初始内存 --><memory unit='KiB'>8388608</memory> <!-- 8 GB --><currentMemory unit='KiB'>8388608</currentMemory> <!-- 初始内存也是8 GB --><!-- CPU配置 --><vcpu placement='static'>4</vcpu> <!-- 分配4个虚拟CPU --><!-- 操作系统设置 --><os><type arch='x86_64' machine='pc-i440fx-2.11'>hvm</type><boot dev='hd'/> <!-- 从硬盘启动 --><bootmenu enable='yes'/> <!-- 启用启动菜单 --></os><!-- 时钟设置 --><clock offset='utc'><timer name='rtc' tickpolicy='catchup'/><timer name='pit' tickpolicy='delay'/><timer name='hpet' present='no'/></clock><!-- CPU模式和特性 --><cpu mode='host-passthrough'><topology sockets='1' cores='2' threads='2'/><!-- 禁用虚拟化功能SVM (AMD) --><feature policy='disable' name='svm'/></cpu><!-- 设备设置 --><devices><!-- 磁盘配置 --><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/example_vm.qcow2'/><target dev='vda' bus='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/></disk><!-- CD-ROM驱动器 --><disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/var/lib/libvirt/images/example.iso'/><target dev='hda' bus='ide'/><readonly/><address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/></disk><!-- 网络接口配置 --><interface type='network'><mac address='52:54:00:aa:bb:cc'/><source network='default'/><model type='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/></interface><!-- 图形设备配置 --><graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'><listen type='address' address='0.0.0.0'/></graphics><!-- 声卡设备 --><sound model='ich9'><address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/></sound><!-- 输入设备 --><input type='mouse' bus='ps2'/><input type='keyboard' bus='ps2'/><!-- 显卡设备 --><video><model type='cirrus' vram='16384' heads='1'/><address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/></video><!-- 串口控制台 --><console type='pty'><target type='serial' port='0'/></console><!-- 通用USB设备 --><hub type='usb'/></devices><!-- 特权设置:如果需要,允许KVM虚拟机访问设备 --><features><acpi/> <!-- 启用ACPI电源管理 --><apic/> <!-- 启用APIC --><pae/>  <!-- 启用PAE(物理地址扩展),允许32位系统使用大于4GB的内存 --></features><!-- 启动时自动启动虚拟机 --><on_poweroff>destroy</on_poweroff>  <!-- 电源关闭时销毁虚拟机 --><on_reboot>restart</on_reboot>      <!-- 重启时自动重启虚拟机 --><on_crash>restart</on_crash>        <!-- 崩溃时自动重启虚拟机 -->
</domain>

2、xml文件创建虚机

<domain type='kvm'><name>vm_test</name>  <memory unit='KiB'>2097152</memory>  <vcpu placement='static'>2</vcpu>  <os><type arch='x86_64' machine='pc-i440fx-2.11'>hvm</type><boot dev='cdrom'/><boot dev='hd'/></os><devices><!-- 磁盘配置 --><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/data/kvm/qcow/vx_test.qcow2'/><target dev='vda' bus='virtio'/></disk>
x<!-- ISO 镜像作为CD-ROM --><disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/data/kvm/image/ubuntu-22.04.4-live-server-amd64.iso'/><target dev='hdc' bus='ide'/><readonly/></disk><!-- 网络配置 --><interface type='network'><mac address='52:54:00:aa:bb:cc'/><source network='default'/><model type='virtio'/></interface><!-- VNC 配置 --><graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/></devices>
</domain>
qemu-img create -f qcow2 /data/kvm/qcow/vx_test.qcow2 20G
virsh define vx-test.xml 
virsh list --all
virsh start vx_test 
##设置虚拟机开机自启 
virsh autostart  vx_test 
virsh autostart --disable vx_test #取消

3、创建虚机

wget  https://mirrors.ustc.edu.cn/ubuntu-releases/22.04/ubuntu-22.04.4-live-server-amd64.iso##创建虚拟磁盘文件:该命令创建了一个大小为 20GB 的虚拟磁盘文件,格式为 qcow2,用于后续虚拟机的存储。
qemu-img create -f qcow2 /data/kvm/qcow/image.qcow2 20G## 创建和安装虚拟机:创建并安装了一个名为 vm_test 的虚拟机,分配了 2GB 内存、2 个虚拟 CPU、默认网络配置,使用 VNC 连接显示图形界面,并从 Ubuntu 22.04 ISO 镜像启动安装系统。
virt-install --virt-type kvm  --name vm_test   --ram 2048   --vcpus 2   --disk path=/data/kvm/qcow/image.qcow2,format=qcow2        --os-variant ubuntu22.04   --network network=default   --graphics vnc,listen=0.0.0.0   --cdrom /data/kvm/image/ubuntu-22.04.4-live-server-amd64.iso --noautoconsole

4、克隆虚机

root@kvm:/data/kvm/clone#   virt-clone -o vm_test -f /data/kvm/clone/vm_test.qcow2  --name vm_test_cloneERROR    Domain to clone must be shutoff.Clone 'vm_test_clone' created successfully.参数说明:-o:指定被克隆虚拟机-n:克隆机名称-f:指定克隆机文件位置与名称root@kvm:/data/kvm/clone# virsh list --allId   Name            State
--------------------------------1    vm_test2        running-    vm_test         shut off-    vm_test_clone   shut off## 修改uuid
root@kvm:/data/kvm/clone# virsh edit vm_test_clone 

5、创建快照

root@kvm:/data/kvm/clone# virsh snapshot-create-as vm_test2 vm_test-snap2
Domain snapshot vm_test-snap2 createdroot@kvm:/data/kvm/clone# virsh snapshot-list vm_test2 Name            Creation Time               State
------------------------------------------------------vm_test-snap2   2024-09-12 03:30:54 +0000   runningroot@kvm:/data/kvm/clone# virsh snapshot-info vm_test2 vm_test-snap2 
Name:           vm_test-snap2
Domain:         vm_test2
Current:        yes
State:          running
Location:       internal
Parent:         -
Children:       0
Descendants:    0
Metadata:       yes

6、脚本创建

#!/bin/bash# 需要指定的变量
VM_NAME=$1  # 虚拟机名称
OS_TYPE=$2  # 操作系统类型 (ubuntu, centos, win)
DISK_SIZE=20  # 虚拟机磁盘大小 (GB)
RAM_SIZE=2048  # 虚拟机内存大小 (MB)
VCPUS=2  # 虚拟机CPU核数
CLONE_NAME=$3  # 如果进行克隆的虚拟机名称# 检查是否提供必要的参数
if [ -z "$VM_NAME" ] || [ -z "$OS_TYPE" ]; thenecho "Usage: $0 <vm_name> <os_type: ubuntu|centos|win> [clone_name]"exit 1
fi# 设置系统对应的os-variant参数
case $OS_TYPE inubuntu)OS_VARIANT="ubuntu20.04";;centos)OS_VARIANT="centos8";;win)OS_VARIANT="win10";;*)echo "Invalid OS type! Choose from ubuntu, centos, win."exit 1;;
esac# 磁盘文件路径
DISK_PATH="/var/lib/libvirt/images/${VM_NAME}.qcow2"# 镜像文件路径(可根据实际环境修改)
ISO_PATH=""
case $OS_TYPE inubuntu)ISO_PATH="/path/to/ubuntu.iso";;centos)ISO_PATH="/path/to/centos.iso";;win)ISO_PATH="/path/to/windows.iso";;
esac# 创建虚拟机磁盘文件
echo "Creating virtual machine disk..."
qemu-img create -f qcow2 $DISK_PATH ${DISK_SIZE}G# 创建虚拟机
echo "Installing virtual machine..."
virt-install \--name $VM_NAME \--ram $RAM_SIZE \--vcpus $VCPUS \--disk path=$DISK_PATH,format=qcow2,size=$DISK_SIZE \--os-variant $OS_VARIANT \--network network=default \--graphics vnc \--cdrom $ISO_PATH \--noautoconsole# 检查是否需要克隆虚拟机
if [ ! -z "$CLONE_NAME" ]; thenecho "Cloning virtual machine..."virt-clone --original $VM_NAME --name $CLONE_NAME --file /var/lib/libvirt/images/${CLONE_NAME}.qcow2# 生成新的UUID并修改克隆虚拟机的UUIDNEW_UUID=$(uuidgen)echo "Updating UUID for the cloned virtual machine..."virsh dumpxml $CLONE_NAME > ${CLONE_NAME}.xmlsed -i "s/<uuid>.*<\/uuid>/<uuid>${NEW_UUID}<\/uuid>/" ${CLONE_NAME}.xmlvirsh define ${CLONE_NAME}.xmlrm -f ${CLONE_NAME}.xmlecho "Cloned VM: $CLONE_NAME with new UUID: $NEW_UUID"
fiecho "Virtual machine installation completed."
# 创建虚拟机(如Ubuntu)
./virsh-install.sh my_vm ubuntu# 创建虚拟机并克隆(如CentOS)
./virsh-install.sh my_vm centos my_vm_clone

VNC连接

vnc连接:主机为本机ip。默认端口5900,依次加一
安装好系统后可本机ssh连接。
在这里插入图片描述
在这里插入图片描述

四、创建集群

1、安装glusterfs

##kvm及所有节点hosts文件修改
root@vm2:~# cat /etc/hosts
...
192.168.220.88     vm2
192.168.220.99     vm3apt install glusterfs-*
glusterfs -Vroot@vm3:~# systemctl start glusterd.service 
root@vm3:~# systemctl enable glusterd.service 

2、加入集群

##单节点上执行,添加其他节点到集群
root@vm2:~# gluster peer probe vm3
peer probe: success
##vm2上验证
root@vm2:~# gluster peer status
Number of Peers: 1Hostname: vm3
Uuid: 67eed80b-be06-4564-ae16-adebfc079709
State: Peer in Cluster (Connected)

删除节点

root@vm2:~# gluster peer detach kvm

3、 创建卷

##所有节点创建目录
mkdir /data
## 直接用根分区做存储卷,需加force
##创建一个名为models的存储卷、2副本
root@vm2:~# gluster volume create gfsv replica 2 vm2:/data vm3:/data forcevolume create: gfsv: success: please start the volume to access data
root@vm2:~# gluster volume info modelsVolume Name: gfsv
Type: Replicate
Volume ID: a6d80c21-deb7-44c7-abf4-e2a70060fa64
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: vm2:/data
Brick2: vm3:/data
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
##启用卷
root@vm2:~#  gluster volume start gfsv
##停止删除卷
root@vm2:~#  gluster volume stop  gfsv
root@vm2:~#  gluster volume delete  gfsv
##查看卷状态
root@vm2:~# gluster volume status
Status of volume: models
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick vm2:/data                             54529     0          Y       6158 
Brick vm3:/data                             52302     0          Y       3377 
Self-heal Daemon on localhost               N/A       N/A        Y       6175 
Self-heal Daemon on vm3                     N/A       N/A        Y       3394 Task Status of Volume models
------------------------------------------------------------------------------
There are no active volume tasks

3、kvm挂载目录

root@kvm:/data/kvm# mount.glusterfs vm2:models /kvmdata/root@kvm:/data/kvm# echo "vm2:models /kvmdata/ glusterfs defaults,_netdev 0 0" >> /etc/fstab 
root@kvm:/data/kvm# mount -aroot@kvm:/data/kvm# df -Th | grep gluster
vm2:models                        fuse.glusterfs   57G   18G   37G  33% /kvmdataroot@kvm:/data/kvm# mkdir /kvmdata/{data,iso}##创建存储池
root@kvm:/data/kvm# virsh pool-define-as --name iso --type dir --target /kvmdata/iso/Pool iso definedroot@kvm:/data/kvm# virsh pool-define-as --name data --type dir --target /kvmdata/data/
Pool data defined

图形化创建

virt-manager

五、虚拟机迁移

同一宿主机内迁移

##查看虚拟机所有磁盘文件
##适用情况:磁盘满或新加数据盘的情况下从/aaa目录迁移到/bbb目录root@kvm:/data/kvm# virsh domblklist vm_testTarget   Source
--------------------------------------vda      /data/kvm/qcow/image.qcow2sda  
##直接迁移镜像:例如
root@kvm:/data/kvm# mv /data/kvm/qcow/image.qcow2 /kvmdata/data/
##停止虚拟机
root@kvm:/data/kvm# virsh shutdown vm_test 
Domain 'vm_test' is being shutdown
##编辑
root@kvm:/data/kvm# virsh edit vm_test
Domain 'vm_test' XML configuration edited.root@kvm:/data/kvm# virsh start vm_test
Domain 'vm_test' startedroot@kvm:/data/kvm# virsh domblklist vm_testTarget   Source
-------------------------------------vda      /kvmdata/data/image.qcow2sda      -

不同宿主机内迁移

virsh migrate方法
virsh migrate只能迁移配置文件,磁盘镜像文件还要我们手工完成。在kvm2上
virsh undefine vm_test    //只删除了配置文件
rm /data/kvm/qcow/image.qcow2 -i切换到kvm1,88为kvm2
virsh migrate --domain vm_test --desturi qemu+ssh://root@192.168.220.66/system --offline --persistent

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++设计模式——Visitor访问者模式
  • MySQL索引的深入学习与应用
  • pip install “git+https://xxx“报错error: subprocess-exited-with-error
  • C++编程语言:基础设施:函数(Bjarne Stroustrup)
  • React项目中使用发布订阅模式
  • PMP--一模--解题--11-20
  • Hive是什么?
  • 缓存预热/雪崩/穿透/击穿
  • 828华为云征文 | Flexus X的力量,驱动Halo博客在云端飞驰
  • 你都学会栈和队列了赶紧手搓一个对象池吧!!!(超详细,超简单适合新手宝宝学习)
  • 跨系统环境下LabVIEW程序稳定运行
  • CSP-J 之C++常用英文缩写
  • minio的下载和springboot整合minio使用
  • Docker容器技术1——docker基本操作
  • 线性代数 第七讲 二次型_标准型_规范型_坐标变换_合同_正定二次型详细讲解_重难点题型总结
  • 77. Combinations
  • centos安装java运行环境jdk+tomcat
  • mongo索引构建
  • MySQL几个简单SQL的优化
  • vue自定义指令实现v-tap插件
  • XForms - 更强大的Form
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 聊聊hikari连接池的leakDetectionThreshold
  • 免费小说阅读小程序
  • 前嗅ForeSpider教程:创建模板
  • 巧用 TypeScript (一)
  • 微信小程序--------语音识别(前端自己也能玩)
  • 一道闭包题引发的思考
  • 原生 js 实现移动端 Touch 滑动反弹
  • 带你开发类似Pokemon Go的AR游戏
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 整理一些计算机基础知识!
  • # 飞书APP集成平台-数字化落地
  • #QT 笔记一
  • (09)Hive——CTE 公共表达式
  • (day18) leetcode 204.计数质数
  • (floyd+补集) poj 3275
  • (javaweb)Http协议
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (WSI分类)WSI分类文献小综述 2024
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (蓝桥杯每日一题)love
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (四)JPA - JQPL 实现增删改查
  • (一)Linux+Windows下安装ffmpeg
  • (转载)深入super,看Python如何解决钻石继承难题
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 分布式技术比较
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET程序集编辑器/调试器 dnSpy 使用介绍
  • /run/containerd/containerd.sock connect: connection refused
  • @NotNull、@NotEmpty 和 @NotBlank 区别