Uubuntu安装使用KVM

温馨提醒

安装 KVM 和相关工具

  • 环境检查

    1
    
    egrep -c '(vmx|svm)' /proc/cpuinfo

    结果大于0:表示支持虚拟化

    结果为0:表示不支持,或者需要在 BIOS 中开启 Virtualization Technology。

  • 安装软件包

    1
    2
    3
    4
    5
    6
    
    # Ubuntu/Debian
    apt update
    apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager
    
    # CentOS/RHEL
    yum install qemu-kvm libvirt virt-manager bridge-utils -y

    qemu-kvm:核心模拟器

    libvirt:管理虚拟化的后台服务

    bridge-utils:用于配置网桥网络

    virt-manager:图形化管理界面

  • 启动服务

    1
    
    systemctl enable --now libvirtd

配置网络

  • 物理机使用动态 IP

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    # 创建网桥 br0
    nmcli conn add type bridge con-name br0 ifname br0
    
    # 将物理网卡(enp3s0)绑定到网桥
    nmcli conn add type ethernet slave-type bridge con-name bridge-slave-enp3s0 ifname enp3s0 master br0
    
    # 设置网桥为 DHCP (auto)
    nmcli conn modify br0 ipv4.method auto
    
    # 启动网桥
    nmcli conn up br0
    
    # 关闭原来的物理网卡连接(避免冲突)这个命令执行后,通过 ssh 连接的就会断开
    # 先用 nmcli conn show 查看原本物理连接的名字,通常叫 "Wired connection 1"
    nmcli conn down "Wired connection 1"
  • 物理机使用静态 IP

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    # 创建网桥 br0
    nmcli conn add type bridge con-name br0 ifname br0
    
    # 将物理网卡(如 enp3s0)绑定到网桥(作为从属接口)
    nmcli conn add type ethernet slave-type bridge con-name bridge-slave-enp3s0 ifname enp3s0 master br0
    
    # 给网桥配置 IP (如果是静态 IP)
    nmcli conn modify br0 ipv4.addresses '192.168.1.100/24' ipv4.gateway '192.168.1.1' ipv4.dns '8.8.8.8' ipv4.method manual
    
    # 启动网桥并关闭旧的物理网卡连接
    nmcli conn up br0
    nmcli conn down "Wired connection 1"  # 名字可能不同,用 nmcli conn show 查看

命令行创建管理虚拟机

  • 创建虚拟机卷

    1
    2
    3
    4
    5
    
    mkdir /data/kvm/ubuntu/
    qemu-img create -f qcow2 /data/kvm/ubuntu/ubunut.qcow2 20G
    # -f 用于指定镜像的格式,qcow2格式是 QEMU 最常见的镜像格式
    # /data/kvm/ubuntu/ubunut.qcow2:完整卷名
    # 30G 卷大小,创建出来以后并不会立刻分配所有的空间
  • 查看镜像文件信息

    1
    
    qemu-img info ubuntu.qcow2
  • 创建虚拟机

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    virt-install --virt-type=kvm --name=ubuntu --vcpus=2,maxvcpus=4 --memory=2048,maxmemory=4096 --location=/data/iso/ubuntu-24.04-live-server-amd64.iso --disk path=/data/kvm/ubuntu/ubuntu.qcow2,size=20,format=qcow2 --network bridge=br0 --console=pty,target_type=serial --extra-args='console=ttyS0' --nographics --force
    
    # --name 虚拟机名字
    # --virt-type:要使用的管理程序名称,如 kvm、qemu、xen 等
    # --memory:分配给虚拟机的内存
    # --vcpus:分配给虚拟机的 cpu 核数
    # --location:安装源,有本地、nfs、http、ftp几种,多用于ks网络安装
    # --network:设置网络(如:--network network=default,bridge=br0)
    # --os-variant:支持的操作系统,可以使用 osinfo-query os 命令查看
    # --disk path:指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
    # --noautoconsole:不要自动尝试连接到客户端控制台
    # --extra-args:定义终端额外的参数
    # --graphics:指定是否开启图形
    # --console:定义终端的属性,target_type 则是定义终端的类型

使用 Cockpit Web 管理

  • 安装

    1
    
    apt install cockpit cockpit-machines
  • 启动

    1
    
    systemctl enable --now cockpit.socket
  • 访问

    https://IP:9090,使用系统用户名和密码登录,点击左侧的 虚拟机,可以直接在网页上创建、管理虚拟机。

常用命令

  • 基本操作

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    # 列出所有的虚拟机
    virsh list --all
    
    # 启动centos虚拟机
    virsh start centos
    
    # 关闭centos虚拟机
    virsh shutdown centos
    
    # 强制关闭centos虚拟机
    virsh destroy centos
    
    # 设置centos自动启动
    virsh autostart centos
    
    # 删除centos虚拟机
    virsh undefine centos
    
    # 暂停centos虚拟机
    virsh suspend centos
    
    # 恢复centos虚拟机
    vrish resume centos
    
    # 重启centos虚拟机
    virsh reboot centos
    
    # 编辑centos虚拟机
    virsh edit centos
  • 虚拟机管理

    1
    2
    3
    4
    5
    
    # 访问某个虚拟机
    virsh console 虚拟机ID或虚拟机名称
    
    # 退出虚拟机,返回宿主机
    ctrl + ]

快照

  • 创建快照

    生成快照,快照文件在 /var/lib/libvirt/qemu/snapshot/

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    # 关闭虚拟机
    virsh shutdown 虚拟机ID
    
    # 列出所有虚拟机
    virsh list --all
    
    # 为虚拟机 test 创建快照 test_snapshot01
    virsh snapshot-create-as test test_snapshot01
    
    # 列出 test 虚拟机的所有快照
    virsh snapshot-list test
    
    # 查看快照的详细信息
    virsh snapshot-info test test_snapshot01
  • 恢复快照

    1
    2
    3
    4
    5
    6
    7
    8
    
    # 关闭虚拟机
    virsh shutdown 虚拟机ID
    
    # 为 test 虚拟机恢复快照
    virsh snapshot-revert test test_snapshot
    
    # 启动虚拟机
    virsh start test
  • 删除快照

    1
    
    virsh snapshot-delete test test_snapshot