一、打开BIOS中的SVM

安装qemu之前,要确保打开了svm control。

二、host机安装qume、libvirt

host机器信息如下

[root@hadoop03 ~]# uname -a
Linux bclinux-21-10-u4 6.15.7 #1 SMP PREEMPT_DYNAMIC Mon Oct 20 16:33:54 CST 2025 x86_64 x86_64 x86_64 GNU/Linux

1,安装qemu

yum install qemu --allowerasing

2,安装libvirt

yum install libvirt-daemon libvirt-daemon-kvm qemu-kvm virt-install

3,启动libvirtd

[root@hadoop03 ~]# systemctl start libvirtd && systemctl enable libvirtd
[root@hadoop03 ~]# 

4,检查libvirtd状态

[root@hadoop03 ~]# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
     Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2025-09-18 11:17:07 CST; 2s ago
TriggeredBy: ● libvirtd-ro.socket
             ● libvirtd.socket
             ● libvirtd-admin.socket
       Docs: man:libvirtd(8)
             https://libvirt.org
   Main PID: 6058 (libvirtd)
      Tasks: 21 (limit: 32768)
     CGroup: /system.slice/libvirtd.service
             ├─ 4401 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
             ├─ 4402 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
             └─ 6058 /usr/sbin/libvirtd --timeout 120

Sep 18 11:17:07 hadoop03 systemd[1]: Starting Virtualization daemon...
Sep 18 11:17:07 hadoop03 systemd[1]: Started Virtualization daemon.
Sep 18 11:17:07 hadoop03 dnsmasq[4401]: read /etc/hosts - 12 names
Sep 18 11:17:07 hadoop03 dnsmasq[4401]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 names
Sep 18 11:17:07 hadoop03 dnsmasq-dhcp[4401]: read /var/lib/libvirt/dnsmasq/default.hostsfile
[root@hadoop03 ~]#

启动libvirtd后,ifconfig应该能看到virbr0。

  • 没有virbr0,按第5步执行
  • 有virbr0,按第7步执行
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:29:fb:19  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 2 overruns 0  carrier 0  collisions 0

5,检查“default”网络是否存在

虚拟机xml中定义了<source network='default'/>,libvirt 会去查找一个名为 “default” 的网络,如果找不到该虚拟网络,就不会创建virbr0网桥设备。

[root@hadoop03 ~]# virsh net-list --all
 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yes
  • virsh net-list --all中没有“default”,按第6步执行
  • virsh net-list --all中没有“default”,按第7步执行

6,创建“default”网络

vim /etc/libvirt/qemu/networks/default.xml,新建文件:

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh net-edit default
or other application using the libvirt API.
-->

<network>
  <name>default</name>
  <uuid>74c467fd-c8f1-4339-826e-31eaadb317d6</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:29:fb:19'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

启动default网络:

virsh net-define /tmp/default.xml
virsh net-start default
virsh net-autostart default

此时ifconfig就能看到virbr0设备了。

7,开启转发规则

[root@hadoop03 ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

三、准备虚机的iso文件

把linux系统镜像文件拷贝到 /var/lib/libvirt/images/ 目录,比如我的环境:

[root@hadoop03 ~]# ls /var/lib/libvirt/images/
BCLinux-21.10U4-dvd-x86_64-250520.iso

四、创建虚机

1,定义虚机

通过网盘分享的文件:geshifei-vm1.xml
链接: https://pan.baidu.com/s/1NMk3WEGHgCE8-oebWkFGsw 提取码: 1234

[root@hadoop03 ~]# virsh define /home/geshifei/geshifei-vm1.xml
Domain 'geshifei-vm1' defined from /home/geshifei/geshifei-vm1.xml

2,创建虚机的磁盘

[root@hadoop03 ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/bclinux.qcow2 40G
Formatting '/var/lib/libvirt/images/bclinux.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=42949672960 lazy_refcounts=off refcount_bits=16

3,启动虚机

[root@hadoop03 ~]# virsh start geshifei-vm1
Domain 'geshifei-vm1' started

通过后面的“虚机状态”命令,应处于“running”状态,注意此时虚机还没有系统

4,安装虚机系统

如果虚机的boot分区(xml中的boot dev)已经安装过系统,就不需要再安装了。删除虚机,并不会删除bclinux.qcow2磁盘,所以只要这块盘安装过系统,新虚机可以直接用,不需要再次安装系统,略过第本节。

<domain type='kvm'>
  <name>geshifei-vm1</name>
  <uuid>3781fd54-111e-40b4-81f0-902bd92f91d7</uuid>
  ……
  <os>
    <type arch='x86_64' machine='pc-q35-6.2'>hvm</type>
    <boot dev='hd'/>    这里是启动分区

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/bclinux.qcow2'/>  这里是虚机的磁盘

4.1 设置cdrom启动

[root@hadoop03 ~]# EDITOR=vim virsh edit geshifei-vm1

<boot dev='hd'/> 改成<boot dev='cdrom'/> 

4.2 查看虚机端口

[root@hadoop03 ~]# virsh vncdisplay geshifei-vm1
:0

表示虚拟机 VNC 图形界面正在宿主机的端口 5900 上监听。

输出 含义
:0 VNC 服务的显示编号为 0,对应 TCP 端口 5900(5900 + 显示号)
:0 显示编号为 1,对应 TCP 端口 5901
以此类推

4.3 重启虚机

virsh destroy geshifei-vm1   强制关闭虚机
virsh start geshifei-vm1     启动虚机

因为前面设置了boot dev='cdrom',所以重启会进入cdrom的安装界面。

4.4 vnc登陆虚机

linux系统可通过vncview命令、windows系统可通过RealVNC Viewr软件,登陆虚机。

vncviewer host机器ip:5900

此时会弹出下面的安装界面,正常安装虚机的系统即可。

 安装完成后,记得通过EDITOR=vim virsh edit geshifei-vm1命令,将<boot dev='cdrom'/> 改回<boot dev='hd'/> 。然后重新启动虚机,就会运行安装在虚机磁盘上的系统。

五,删除虚机

1,关闭虚机

virsh shutdown geshifei-vm1
或
virsh destroy geshifei-vm1 (强制删除)

2,删除虚拟机定义(xml配置)


[root@hadoop03 ~]# virsh undefine  geshifei-vm1
Domain 'geshifei-vm1' has been undefined

注意,这只是从 libvirt 的数据库里去掉了这台虚机,虚机的磁盘文件还在,如果确认不用了,可以通过“六”节将磁盘文件也删除。

六、删除虚机的磁盘文件

系统中长时间使用,可能有一些虚机已经被删除,但遗留一些磁盘文件,需删除这些遗留的磁盘文件,增大host系统磁盘空用空间。

1,确认有哪些虚机

[root@hadoop03 ~]# virsh list --all
 Id   Name           State
-------------------------------
geshifei-vm1   shut off

2,确认现存虚机使用的文件


[root@hadoop03 ~]# virsh domblklist geshifei-vm1
 Target   Source
-------------------------------------------------------------------------
 vda      /var/lib/libvirt/images/bclinux.qcow2
 sda      /var/lib/libvirt/images/BCLinux-21.10U4-dvd-x86_64-250520.iso

3,查看存储池中有哪些磁盘文件

[root@hadoop03 ~]# ls -lh /var/lib/libvirt/images/
total 73G
-rw-r--r-- 1 qemu qemu 3.9G May 30 14:09 BCLinux-21.10U4-dvd-x86_64-250520.iso
-rw------- 1 root root 7.4G Sep 23 11:21 bclinux-clone-1.qcow2
-rw------- 1 root root 7.4G Sep 23 11:16 bclinux-clone-2.qcow2
-rw-r--r-- 1 root root 7.4G Sep 23 10:24 bclinux.qcow2

在这个例子中,bclinux-clone-1.qcow2、bclinux-clone-2.qcow2已经没人使用了,可以删除掉。

[root@hadoop03 ~]# rm -rf /var/lib/libvirt/images/bclinux-clone-1.qcow2
[root@hadoop03 ~]# rm -rf /var/lib/libvirt/images/bclinux-clone-2.qcow2 

七、虚机信息

1,虚机状态

[root@hadoop03 ~]# virsh list --all
 Id   Name        State
---------------------------
 1    geshifei-vm1   running

2,虚机mac

[root@hadoop03 ~]# virsh domiflist geshifei-vm1
 Interface   Type      Source    Model    MAC
-------------------------------------------------------------
 vnet1       network   default   virtio   52:54:00:81:1f:01

3,虚机ip

[root@hadoop03 ~]# virsh net-dhcp-leases default
 Expiry Time           MAC address         Protocol   IP address           Hostname   Client ID or DUID
---------------------------------------------------------------------------------------------------------
 2025-09-23 11:16:29   52:54:00:85:77:9b   ipv4       192.168.122.47/24    -          -

4,虚机磁盘文件


[root@hadoop03 ~]# virsh domblklist geshifei-vm1
 Target   Source
-------------------------------------------------------------------------
 vda      /var/lib/libvirt/images/bclinux.qcow2
 sda      /var/lib/libvirt/images/BCLinux-21.10U4-dvd-x86_64-250520.iso

八、host ssh免密登陆guest

1,检查host的SSH密钥对

host机器中,主目录中已经有id_rsa.pub(已经有公钥了),按第3步执行。

[root@hadoop03 ~]# ls ~/.ssh/
authorized_keys  id_rsa  id_rsa.pub

2,生成rsa密钥

ssh-keygen -t rsa

3,将公钥复制到远程服务器

host中的公钥复制到guest,在host中执行下面的命令。

ssh-copy-id root@虚机ip

4,验证免密登录

ssh root@虚机ip uname -a

九、虚机克隆

1,配置源虚机环境

在clone前,需将guest环境配置好,该装的软件及环境参数都准备好,以后以此虚机做clone,新虚机就不需要再配置了。可通过下面命令登陆虚机进行配置。

ssh root@虚机ip

 2,关闭源虚机

virsh shutdown geshifei-vm1
# 等待状态变成 shut off,可以用下面命令确认
virsh list --all

# 如果关不掉,可以强制
virsh destroy geshifei-vm1

3,克隆虚机

virt-clone --original geshifei-vm1 --name geshifei-vm2 --auto-clone

4,启动源虚机和新虚机

virsh start geshifei-vm1
virsh start geshifei-vm2

clone完成后 ,可通过“七”节中的命令查询虚机信息。

十、修改虚机配置

EDITOR=vim virsh edit geshifei-vm1虚机名称

改完后,重启虚机。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐