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

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-checker

root@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-manager


root@kvm:~#  systemctl start libvirtd
root@kvm:~#  systemctl enable libvirtd

root@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/pool


virsh pool-define-as --name kvm_test --type dir --target /data/kvm/pool/

virsh pool-start kvm_test

virsh 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 nbd

qemu-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: data

parted /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 overcommit
    vm.nr_overcommit_hugepages = 0
    vm.overcommit_kbytes = 0
    vm.overcommit_memory = 0
    vm.overcommit_ratio = 50

    vm.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_clone

ERROR    Domain to clone must be shutoff.

Clone 'vm_test_clone' created successfully.

 参数说明:
 -o:指定被克隆虚拟机
 -n:克隆机名称
 -f:指定克隆机文件位置与名称
 
root@kvm:/data/kvm/clone# virsh list --all
 Id   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 created


root@kvm:/data/kvm/clone# virsh snapshot-list vm_test2 
 Name            Creation Time               State
------------------------------------------------------
 vm_test-snap2   2024-09-12 03:30:54 +0000   running


root@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" ]; then
    echo "Usage: $0 <vm_name> <os_type: ubuntu|centos|win> [clone_name]"
    exit 1
fi

# 设置系统对应的os-variant参数
case $OS_TYPE in
    ubuntu)
        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 in
    ubuntu)
        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" ]; then
    echo "Cloning virtual machine..."
    virt-clone --original $VM_NAME --name $CLONE_NAME --file /var/lib/libvirt/images/${CLONE_NAME}.qcow2

    # 生成新的UUID并修改克隆虚拟机的UUID
    NEW_UUID=$(uuidgen)
    echo "Updating UUID for the cloned virtual machine..."
    virsh dumpxml $CLONE_NAME > ${CLONE_NAME}.xml
    sed -i "s/<uuid>.*<\/uuid>/<uuid>${NEW_UUID}<\/uuid>/" ${CLONE_NAME}.xml
    virsh define ${CLONE_NAME}.xml
    rm -f ${CLONE_NAME}.xml
    echo "Cloned VM: $CLONE_NAME with new UUID: $NEW_UUID"
fi

echo "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     vm3


apt install glusterfs-*
glusterfs -V

root@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: 1

Hostname: 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 force

volume create: gfsv: success: please start the volume to access data
root@vm2:~# gluster volume info models
 
Volume 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 -a

root@kvm:/data/kvm# df -Th | grep gluster
vm2:models                        fuse.glusterfs   57G   18G   37G  33% /kvmdata

root@kvm:/data/kvm# mkdir /kvmdata/{data,iso}

##创建存储池
root@kvm:/data/kvm# virsh pool-define-as --name iso --type dir --target /kvmdata/iso/Pool iso defined

root@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_test
 Target   Source
--------------------------------------
 vda      /data/kvm/qcow/image.qcow2
 sda  
##直接迁移镜像:例如
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' started

root@kvm:/data/kvm# virsh domblklist vm_test
 Target   Source
-------------------------------------
 vda      /kvmdata/data/image.qcow2
 sda      -

不同宿主机内迁移

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

http://www.kler.cn/a/302063.html

相关文章:

  • RK3568平台(I2C篇)i2c_transfer接口详解
  • 常用在汽车PKE无钥匙进入系统的高度集成SOC芯片:CSM2433
  • java:接口,抽象,多态的综合小练习
  • FreeRTOS的列表与列表项
  • SpringCloud 微服务消息队列灰度方案 (RocketMQ 4.x)
  • FBX福币交易所恒指收跌1.96% 半导体股继续回调
  • 华为 HCIP-Datacom H12-821 题库 (20)
  • ArmSoM-Sige5 的 RK3576 SoC 主线内核支持进展
  • React 嵌套类名样式不生效
  • CSS 布局技巧实现元素左右排列
  • 使用 Vue 的事件总线:为了实现点击当前按钮关注或取消关注时,另一个页面的 Vue 组件中的表格数据自动刷新
  • PowerShell 脚本自动化 Windows 工作开发流程
  • 论文《Graph Neural Networks with convolutional ARMA filters》笔记
  • 开关电源的占空比与输入输出电压的关系
  • 更改PaddlePaddle的模型默认缓存目录
  • Anaconda下载及安装保姆级教程(详细图文)
  • 基于Java+SpringBoot+Vue+MySQL的西安旅游管理系统网站
  • 办海洋测绘乙级该如何准备才能万无一失办下来
  • 2.3.1 协程设计原理与汇编实现coroutine 2
  • 路径规划 | 基于A*算法的往返式全覆盖路径规划的改进算法(Matlab)
  • 【西电电装实习】6. 手装无人机的蓝牙断连debug
  • 【linux006】目录操作命令篇 - pwd 命令
  • vue3 自定义指令 directive
  • CSS-3
  • 如何让大模型更好地进行场景落地?
  • OpenSSL工具验证RSA证书